MyBatis學習七:spring和MyBatis整合、逆向工程

一、整合思路

需要spring通過單例方式管理SqlSessionFactory。

spring和mybatis整合生成代理對象,使用SqlSessionFactory創建SqlSession(spring和mybatis整合自動完成)。

持久層的mapper都需要由spring進行管理。

二、整合之後結構圖


三、配置SqlSessionFactory和數據源

在applicationContext.xml配置SqlSessionFactory和數據源。

<!—加載配置文件 -->
<context:property-placeholder location=”classpath:db.properties”/>
<!—數據源,使用dbcp -->
<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”>
	<property name=”driverClassName” value=”${jdbc.driver}”
	//繼續配置url、username、password、maxActive、maxIdle等
</bean>
<!-- sqlSessionFactory -->
<bean id=”sqlSessionFactory” class=”org.mybatis.spring.SqlSessionFactoryBean”>
	<!—加載mybatis的配置文件 -->
	<property name=”configLocation” value=”mybatis/SqlMapConfig.xml”/>
	<!—數據源 -->
	<property name=”datasource” ref=” datasource”/>
</bean>

假設已經寫好pojo、映射文件(原始dao方式名稱爲User.xml;代理開發方式爲xxMapper.xml)。、在SQLConfigMap.xml中加載映射文件,然後接着開發:

四、原始dao方式

1、dao實現類繼承SqlSessionDaoSupport

dao接口實現類需要注入SqlSessionFactory,通過spring進行注入。兩種方式:自動注入或者聲明配置方式;這裏使用聲明配置方式,配置dao的bean:讓UserDaoImpl實現類繼承SqlSessionDaoSupport。

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
	@override
	public User findUserById(int id) throws Exception{
	//繼承SqlSessionDaoSupport,通過this.getSqlSession()得到sqlSession
	SqlSession sqlSession = this.getSqlSession();
	User user = sqlSession.selectOne(“test.findUserById”, id);
	return user;
<span style="white-space:pre">	</span>}
}
2、配置dao

在applicationContext.xml中配置dao。

<!—原始dao接口 -->
<bean id=”userDao” class=”cn.itcast.ssm.dao.UserDaoImpl”>
	<property name=”sqlSessionFactory” ref=”sqlSessionFactory”/>
</bean>
3、測試
public class UserDaoImplTest{
	private ApplicationContext applicationContext;
	//在setUp這個方法得到spring容器
	@Before
	public void setUp() throws Exception{
		applicationContext = new ClassPathXmlApplicationContext(“classpath:spring/applicationContext”)
<span style="white-space:pre">	</span>}

@Test
public void testFindUserById() throws Exception{
		UserDao userDao = (UserDao)applicationContext.getBean(“userDao”);
		User user = userDao.findUserById(1);
		System.out.println(user);
<span style="white-space:pre">	</span>}
}

五、mapper代理開發方式

1、mapper.xml和mapper.java

2、通過MapperFactoryBean創建代理對象
<!—mapper配置MapperFactoryBean:根據mapper接口生成代理對象 -->
<bean id=”userMapper” class=”org.mybatis.spring.mapper.MapperFactoryBean”>
	<!--mapperInterface指定mapper接口 -->
	<property name=”mapperInterface” value=”cn.itcast.ssm.mapper.UserMapper”/>
	<property name=”sqlSessionFactory” ref=”sqlSessionFactory”/>
</bean>

此方法問題:需要針對每個mapper進行配置,麻煩。

3、通過MapperScannerConfigurer進行mapper掃描

<!—加載映射文件 -->
<mappers>
	<mapper resource=”sqlmap/User.xml”/>
	<!—批量加載mapper
 	指定mapper接口的包名,mybatis自動掃描包下所有mapper接口進行加載。遵循一些規範:需要將mapper接口類名和mapper.xml映射文件名保持一致,且在一個目錄下。上邊規範的前提是:使用 的是mapper代理方法。
和spring整合後,使用mapper掃描器,mybatis的配置文件中就不需要配置了
<!-- <package name=”cn.itcast.ssm.mapper”/> -->
-->
</mappers>
<!—mapper批量掃描,從mapper包中掃描出mapper接口,自動創建代理對象並且在spring容器中註冊。遵循規範:將mapper.java和mapper.xml映射文件名稱保持一致,且在一個目錄中。自動掃描出來的mapper的bean的id爲mapper類名(首字母小寫) -->
<bean class=”org.mybatis.spring.mapper.MapperScannerConfigurer”>
	<!—指定掃描的包名。如果掃描多個包,每個包中間使用半角逗號分隔 -->
	<property name=”basePackage” value=”cn.itcast.ssm.mapper”/>
	<property name=”sqlSessionFactoryBeanName” value=”sqlSessionFactory”/>
</bean>
4、測試代碼
@Test
public void testFindUserById() throws Exceptino{
	UserMapper userMapper = (userMapper)applicationContext.getBean(“userMapper”);
	User user = userMapper.findUserById(1);
	System.out.println(user);
}

六、逆向工程

mybatis需要程序員自己編寫sql語句,mybatis官方提供逆向工程,可以針對單表自動生成mybatis執行所需要的代碼(mapper.java、mapper.xml、po等等)

企業實際開發彙總,常用的逆向工程方式:由數據庫的表生成java代碼。

 













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章