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代码。

 













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