MyBatis学习七:spring和MyBatis整合、逆向工程
2015-12-15 16:03
711 查看
一、整合思路
需要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实现类继承SqlSessionDaoSupportdao接口实现类需要注入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.java2、通过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代码。
相关文章推荐
- Spring jdbcTemplat插入,查询
- java.lang.IllegalStateException: getOutputStream() has already been called for this response解决方案
- Java创建多线程的几种方法
- spring配置文件详解--真的蛮详细
- java关键字
- Java静态内部类的实例化问题
- java 接口和抽象
- Jdk1.8的安装
- Java国际化和Spring国际化比较
- 初识struts
- 使用Java匿名类直接实例化接口
- MyEclipse has detected that less than 5% of the 22MB of PS Survivor Space (Heap memory) space remain
- java之JDBC相关整理
- Struts2-Interceptor的逻辑意义
- java 正则表达式 匹配问题
- RxJava使用场景小结
- 你应该将应用迁移到Spring 4的五个原因
- Spring中的AOP 在Advice方法中获取目标方法的参数(顶)
- java.lang.VerifyError
- JAVA的静态变量、静态方法、静态类