《\mybatis\day02\16mybatis和spring整合-sqlSessionFactory配置.avi;》

MyBatis学习七:spring和MyBatis整合、逆向工程 - mwj_88的专栏 - CSDN博客--和老是讲课相同--已经拷贝在下方
http://blog.csdn.net/mwj_88/article/details/50315701

添加 source folder 这是一个虚拟目录
点击folder 就是真实目录

spring和 springMVC 和mybatis整合;
1、添加对应的jar包,
2、配置文件 在applicationContext.xml配置sqlSessionFactory和数据源
spring/applicationContext.xml
mybatis/SqlMapConfig.xml
3、有原始DAO开发 和 mapper代理开发


=======【转】MyBatis学习七:spring和MyBatis整合、逆向工程 - mwj_88的专栏 ==============

一、整合思路

需要
spring
通过单例方式管理SqlSessionFactory。

spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession(spring和mybatis整合自动完成)。

持久层的mapper都需要由spring进行管理。


二、整合之后结构图


三、配置SqlSessionFactory和数据源

在applicationContext.xml配置SqlSessionFactory和数据源。

<!—加载配置文件 --
>

<context:property-placeholderlocation=”classpath:db.properties”/><!—数据源,使用dbcp -->  
<beanid=”dataSource”class=”org.apache.commons.dbcp.BasicDataSource”destroy-method=”close”><property name=”driverClassName”value=”${jdbc.driver}”//继续配置url、username、password、maxActive、maxIdle等  
</bean
> <!--sqlSessionFactory--> <beanid=”sqlSessionFactory”class=”org.mybatis.spring.SqlSessionFactoryBean”><!—加载mybatis的配置文件 --> <propertyname=”configLocation”value=”mybatis/SqlMapConfig.xml”/><!—数据源 --> <propertyname=”datasource”ref=”datasource”/> </bean>

假设已经写好pojo、映射文件(原始dao方式名称为User.xml;代理开发方式为xxMapper.xml)。、在SQLConfigMap.xml中加载映射文件,然后接着开发:


四、原始dao方式


1、dao实现类继承SqlSessionDaoSupport

dao接口实现类需要注入SqlSessionFactory,通过spring进行注入。两种方式:自动注入或者声明配置方式;这里使用声明配置方式,配置dao的bean:让UserDaoImpl实现类继承SqlSessionDaoSupport。

  1. public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
  2. @override
  3. public User findUserById(int id) throws Exception{
  4. //继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSession
  5. SqlSession
    sqlSession =
    this.getSqlSession();
  6. User
    user =
    sqlSession.selectOne(“test.findUserById”, id);
  7. return user;
  8. <
    span
    style=
    "white-space:pre"
    >
    </
    span
    >}
  9. }

2、配置dao

在applicationContext.xml中配置dao。

  1. <!—原始dao接口 --
    >
  2. <
    bean
    id=”userDao”
    class=”cn.itcast.ssm.dao.UserDaoImpl”
    >
  3. <
    property
    name=”sqlSessionFactory”
    ref=”sqlSessionFactory”
    />
  4. </
    bean
    >

3、测试
  1. public class UserDaoImplTest{
  2. private ApplicationContext applicationContext;
  3. //在setUp这个方法得到spring容器
  4. @Before
  5. public void setUp() throws Exception{
  6. applicationContext =
    new ClassPathXmlApplicationContext(“classpath:spring/applicationContext”)
  7. <
    span
    style=
    "white-space:pre"
    >
    </
    span
    >}
  8. @Test
  9. public void testFindUserById() throws Exception{
  10. UserDao
    userDao = (UserDao)applicationContext.getBean(“userDao”);
  11. User
    user =
    userDao.findUserById(1);
  12. System.out.println(user);
  13. <
    span
    style=
    "white-space:pre"
    >
    </
    span
    >}
  14. }


五、mapper代理开发方式


1、mapper.xml和mapper.java


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

此方法问题:需要针对每个mapper进行配置,麻烦。


3、通过MapperScannerConfigurer进行mapper扫描
<!—加载映射文件 -->  //SqlMapConfig.xml中的
<mappers>  
<mapperresource=”sqlmap/User.xml”/><!—批量加载mapper  
指定mapper接口的包名,mybatis自动扫描包下所有mapper接口进行加载。遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名保持一致,
且在一个目录下。上边规范的前提是:使用 的是mapper代理方法。
和spring整合后,使用mapper扫描器,mybatis的配置文件中就不需要配置了
<!-- <package name
=”cn.itcast.ssm.mapper”/>-->//用了下方的Mapper扫描器后,此处的包扫描可以去掉了
-->
</mappers>

<!—mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册。遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,
且在一个目录中。自动扫描出来的mapper的bean的id为mapper类名(首字母小写) --
> <beanclass=”org.mybatis.spring.mapper.MapperScannerConfigurer”><!—指定扫描的包名。如果扫描多个包,每个包中间使用半角逗号分隔 --> <propertyname=”basePackage”value=”cn.itcast.ssm.mapper”/><property name=”sqlSessionFactoryBeanName”value=”sqlSessionFactory”/></bean> // 这里name必须用sqlSessionFactoryBeanName而不可以用sqlSessionFactory
//不可以<property name=”sqlSessionFactory” ref=”sqlSessionFactory”/>
// 用像2方法中哪样,否则不优先执行<context:property-placeholder location="classpath:db.properties" />


4、测试代码
    1. @Test
    2. public void testFindUserById() throws Exceptino{
    3. UserMapper
      userMapper = (userMapper)applicationContext.getBean(“userMapper”);
    4. User
      user =
      userMapper.findUserById(1);
    5. System.out.println(user);
    6. }

标签: none

添加新评论