《\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-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。

  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接口生成代理对象 -->
<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扫描
<!—加载映射文件 -->  //SqlMapConfig.xml中的
<mappers>
<mapper resource=”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类名(首字母小写) -->
<bean class=”org.mybatis.spring.mapper.MapperScannerConfigurer”>
<!—指定扫描的包名。如果扫描多个包,每个包中间使用半角逗号分隔 -->
<property name=”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. }

MyBatis学习七:spring和MyBatis整合的更多相关文章

  1. mybatis学习笔记 spring与mybatis整合

    转载自http://blog.csdn.net/naruto_Mr/article/details/48239357 1.创建web工程,导入spring依赖包与mybatis依赖包,还需要mybat ...

  2. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  3. MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql

    目录(?)[-] 一MyBatis简介与配置MyBatisSpringMySql MyBatis简介 MyBatisSpringMySql简单配置 搭建Spring环境 建立MySql数据库 搭建My ...

  4. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(转)

    通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车,开始美好的旅程! 本篇是在SSM框架基础上进行的. 参考文章: 1.Quartz学习——Qua ...

  5. MyBatis学习 之 四、MyBatis配置文件

    目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...

  6. 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置

    [转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...

  7. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  8. spring学习 六 spring与mybatis整合

    在mybatis学习中有两种配置文件 :全局配置文件,映射配置文件.mybatis和spring整合,其实就是把mybatis中的全局配置文件的配置内容都变成一个spring容器的一个bean,让sp ...

  9. Spring学习之Spring与Mybatis的两种整合方式

    本机使用IDEA 2020.1.MySql 8.0.19,通过Maven进行构建 环境准备 导入maven依赖包 <dependencies> <dependency> < ...

随机推荐

  1. 第二十二节,TensorFlow中RNN实现一些其它知识补充

    一 初始化RNN 上一节中介绍了 通过cell类构建RNN的函数,其中有一个参数initial_state,即cell初始状态参数,TensorFlow中封装了对其初始化的方法. 1.初始化为0 对于 ...

  2. 【好用的Mac分屏软件】Magnet for Mac 2.3

      「Magnet」是一款Mac窗口管理工具. 当您每次将内容从一个应用移动到另一应用时,当您需要并排比较数据时,或是以其他方式进行多任务处理时,你需要妥善放置所有窗口.Magnet 让这一过程清爽又 ...

  3. mysql加速source导入数据

    mysql加速source导入数据 # 进入mysql中执行如下 ; ; ; ; -- 你的sql语句1 -- 你的sql语句2 -- 你的sql语句3 ; ; ; ;

  4. 获取日k数据

    http://web.ifzq.gtimg.cn/appstock/app/fqkline/get?_var=kline_dayqfq&param=sz002921,day,,,320,qfq ...

  5. 2017-12-15python全栈9期第二天第七节之运算符

    #!/user/bin/python# -*- coding:utf-8 -*-print(3>4 or 4<3 and 1==1)print(1<2 and 3 <4 or ...

  6. python机器学习-sklearn挖掘乳腺癌细胞(五)

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  7. 图论分支-差分约束-SPFA系统

    据说差分约束有很多种,但是我学过的只有SPFA求差分: 我们知道,例如 A-B<=C,那么这就是一个差分约束. 比如说,著名的三角形差分约束,这个大家都是知道的,什么两边之差小于第三边啦,等等等 ...

  8. 6-(基础入门篇)学会编译lua固件,固件的合成

    http://www.cnblogs.com/yangfengwu/p/9336274.html 基础教程源码链接请在淘宝介绍中下载,由于链接很容易失效,如果失效请联系卖家,谢谢 https://it ...

  9. 实战Google深度学习框架-C5-MNIST数字识别问题

    5.1 MNIST数据处理 MNIST是NIST数据集的一个子集,包含60000张图片作为训练数据,10000张作为测试数据,其中每张图片代表0~9中的一个数字,图片大小为28*28(可以用一个28* ...

  10. Elastic Stack之ElasticSearch分布式集群yum方式搭建

    Elastic Stack之ElasticSearch分布式集群yum方式搭建 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.搜索引擎及Lucene基本概念 1>.什么 ...