mybatis整合spring

大家好,我是IT修真院西安分院第4期的JAVA学员,一枚正直纯洁善良的JAVA程序员。
今天给大家分享一下,修真院官网Java任务1,mybatis整合spring
一、.背景介绍
MYBATIS是啥
MyBatis是一个用来实现数据库访问的框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等一系列jdbc繁杂的过程代码。
为什么要使用SPRING框架
1.方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
2.AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
3.声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
4.方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
5.方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts2、Hibernate、MyBatis、Quartz等)的直接支持
6.降低JavaEE API的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

二.知识剖析
MYBATIS的核心组件

SqlsessionFactoryBuilder:它根据你写的配置文件或者代码来生成SqlsessionFactory
SqlsessionFactory:它生成Sqlsession
Sqlsession:发送SQL语句进行对数据库的增删改查
SQL Mapper:由一个java接口和XML(或者注解)构成,同样可以对数据库进行操作

SqlsessionFactory
SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像.SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例.每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心.同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在.在应用运行期间不要重复创建多次,建议使用单例模式.SqlSessionFactory是创建SqlSession的工厂.

public static SqlSessionFactory getSqlSessionFactory(){
InputStream is = MybatisUtil.class.getClassLoader().getResourceAsStream(“conf.xml”);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
return factory; }

InputStream is = MybatisUtil.class.getClassLoader().getResourceAsStream(“conf.xml”);
这行代码是使用类加载器加载了mybatis的xml文件,使用InputStream对文件进行解析读取,就是字节流的输入。

SqlsessionFactoryBuilder类负责构建SqlsessionFactory
SqlSessionFactoryBuilder构造SqlSessionFactory主要委托XMLConfigBuilder类来验证并解析xml配置文件成Configuration
SqlSessionFactory在mybatis的默认实现类为org.apache.ibatis.session.defaults.DefaultSqlSessionFactory , 其构造过程主要是注入了Configuration的实例对象,Configuration的实例对象即可通过解析xml配置文件产生 。
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
获取到SqlSessionFactory之后,就可以利用SqlSessionFactory方法的openSession来获取SqlSession对象了。
SqlSession session = getSqlSessionFactory().openSession();
结合SPRING框架使用MYBATIS
MyBatis + Spring的使用方式,一般是在Spring的配置文件里,配置以下内容:
1.数据源(DataSource)
2.SqlSessionFactoryBean,实现FactoryBean接口,通过注入DataSource对象,以及MyBatis的相关配置信息,返回SQLSessionFactory对象。

SQLSESIONFACTORYBEAN
首先,我们需要从Mybatis官网上下载Mybatis-Spring的jar包添加到我们项目的类路径下,当然也需要添加Mybatis的相关jar包和Spring的相关jar包。我们知道在Mybatis的所有操作都是基于一个SqlSession的,而SqlSession是由SqlSessionFactory来产生的,SqlSessionFactory又是由SqlSessionFactoryBuilder来生成的。但是Mybatis-Spring是基于SqlSessionFactoryBean的。

在使用Mybatis-Spring的时候,我们也需要SqlSession,而且这个SqlSession是内嵌在程序中的,一般不需要我们直接访问。SqlSession也是由SqlSessionFactory来产生的,但是Mybatis-Spring给我们封装了一个SqlSessionFactoryBean,在这个bean里面还是通过SqlSessionFactoryBuilder来建立对应的SqlSessionFactory,进而获取到对应的SqlSession。通过SqlSessionFactoryBean我们可以通过对其指定一些属性来提供Mybatis的一些配置信息。所以接下来我们需要在Spring的applicationContext配置文件中定义一个SqlSessionFactoryBean。 在定义SqlSessionFactoryBean的时候,dataSource属性是必须指定的,它表示用于连接数据库的数据源。

MAPPERFACTORYBEAN 之映射接口
为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象(DAO)的代码,MyBatis-Spring 提供了一个动态代理的实现——MapperFactoryBean。这个类可以让你直接注入数据映射器接口到你的 service 层bean 中。当使用映射器时,你仅仅如调用你的 DAO 一样调用它们就可以了,但是你不需要编写任何 DAO 实现的代码,因为 MyBatis-Spring将会为你创建代理。同样,MapperFactoryBean创建的代理控制开放和关闭 session。 在使用MapperFactoryBean时,可以通过映射接口方式提供sql语句,也可以通过映射文件提供sql语句。

MapperFactoryBean创建的代理类实现了 UserMapper 接口,并且注入到应用程序中。因为代理创建在运行时环境中,那么指定的映射器必须是一个接口,而不是一个具体的实现类。
三.常见问题
1.连接不上数据库

2.加载不了xml文件

四.解决方案
1.连接不上数据库
注意检查property name是否与数据源匹配,不同的数据源的属性名称不同。 使用db.properties文件value时,加载不了文件,检查properties的路径是否正确,还有它要放在resource包下。加载properties的方法有很多种,自行百度。

2.加载不了配置文件
检查文件名是否书写正确,spring.xml记住后面要带上xml文件类型。 可以在单元测试中先尝试加载xml文件,成功后再去写代码。

五、扩展思考
MYBATIS完美整合SPRING不需要MAPPER映射文件

在接口中使用注解方式,将映射文件中的sql语句转移到接口中。
六、参考文献
https://www.jianshu.com/p/beceba363798
https://www.cnblogs.com/linjian/p/4831088.html
https://www.zhihu.com/question/53589525/answer/275249556
七、更多讨论
1.mybatis整合spring有几种配置方式?
方式一、采用MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。
方式二、采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.SqlSessionTemplate。
方式三、采用抽象类org.mybatis.spring.support.SqlSessionDaoSupport提供SqlSession。
2.单独使用mybatis和整合spring后的连接池配置有什么区别?
单独使用mybatis时配置的是自己连接池。
整个spring后的连接池是外部的。
3.如何理解动态代理模式?
代理类在程序运行时创建的代理方式被成为动态代理。 静态代理类(studentProxy)是自己定义好的,在程序运行之前就已经编译完成。然而动态代理,代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代码中的“指示”动态生成的。相比于静态代理, 动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用修改每个代理类中的方法。
技能树.IT修真院“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~我的邀请码: 27182947,或者你可以直接点击此链接: 快到碗里来
视频链接
PPT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值