69 MyBatis和Spring整合

JavaSE基础内容

Java语法阶段

​ Java是什么。HelloWorld

​ 程序是来源于并超脱于现实生活的,它其实是用来帮助我们处理数据。(CRUD) ,变量它是我们程序在处理数据时最基础的最单一的一种方式。数据类型,运算符。

选择结构 键盘录入

循环结构

循环进阶(多重循环和断点调试)

数组

Java面向对象阶段

类和对象(我们以后编写程序 要尽可能学会进行封装)

封装,继承和多态

抽象和接口

异常

Java高级特性

集合(高级存储方式)

实用类

IO流

多线程

网络编程

XML

数据库阶段

MySQL

Java和数据连接 JDBC

DAO模式

前端阶段:三剑客 HTML5 CSS3 JS

JavaWeb阶段:

服务器

动态页面技术JSP

第三方组件

分页实现

分层架构

EL和JSTL

过滤器 监听器

Ajax

Linux

Java框架阶段:SSM框架

MyBatis 简化DAO层实现

Spring 使用IoC和AOP简化我们对象的生命周期管理和冗余功能的解耦。

1.理解整合的原理

利用Spring的IoC和AOP特性整合

IoC:控制反转,DI依赖注入,以前我们自己维护一个对象的生命周期,现在交给Spring IoC容器管理。

MyBatis:

导包

编写核心配置文件:数据源配置,其他额外配置。(用于加载SqlSessionFactory对象)

编写POJO和SQL映射文件

使用API

SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(核心配置文件)
SqlSession SqlSession = ssf.openSession();
//.....
sqlSession.close();

2.掌握MyBatis和Spring的账号

整合思路:SqlSessionFactory对象 由Spring IoC来帮你创建,SqlSession对象由IoC来帮你创建。

​ 数据源交给Spring来处理

​ SqlSessionFactory交给Spring来管理

整合步骤:

导包:导入MyBatis和Spring的相关包以及MyBatis提供的整合包

编写MyBatis和Spring的核心配置文件 以及其他的一些日志等配置文件。

将MyBatis环境准备好(POJO.Mapper文件等)

在Spring中配置数据源(采用DBCP连接池)

在Spring中配置SqlSessionFactory(采用整合包中的SqlSessionFactoryBean)

<!-- 数据源交给Spring管理(采用第三方连接池DBCP) --
><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///smbms"/>    <property name="username" value="root"/>
<property name="password" value="root"/>
</bean>​<!-- SqlSessionFactory交给Spring管理 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 类型别名 -->
<property name="typeAliasesPackage" value="cn.kgc.smbms.pojo"/>
<!-- 引入Sql映射文件 -->
<property name="mapperLocations">
<array>            <value>cn/kgc/smbms/dao/UserMapper.xml</value>        </array>
</property>
<!-- 如果你的一些额外配置 不想通过Spring来注入 还是希望采用MyBatis核心配置文件 -->
<!-- <property name="configLocation" value="classpath:mybatis-config.xml">
</property> -->
</bean>

2.1 传统方式的整合[了解,它和Hibernate与Spring整合思路基本一致]

sqlSession.selectList("Mapper文件的namespace名和对应SQL语句的标识");
sqlSession.selectOne();

SqlSessiom对象的获取(SqlSessionTemplate)

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"></constructor-arg>
</bean>

这样我们就可以在每一个DAO中去准备一个属性,然后注入好SqlSession,就可以使用了。

public class UserDaoImpl implements UserDao {// DAO注入一下即可private SqlSessionTemplate sqlSession;@Overridepublic List<User> getList() throws Exception {return sqlSession.selectList("userdao.getList");}public SqlSessionTemplate getSqlSession() {return sqlSession;}public void setSqlSession(SqlSessionTemplate sqlSession) {this.sqlSession = sqlSession;}}

但是每次都要在不同的DAO中准备一个额外的属性,感觉非常麻烦,所以我们可以使用SqlSessionDaoSupport类来简化。

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {@Overridepublic List<User> getList() throws Exception {return getSqlSession().selectList("userdao.getList");}}
<bean id="userDao" class="cn.kgc.smbms.dao.UserDaoImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory"></property></bean>

2.2 接口方式的整合[掌握]

sqlSession.getMapper(接口.class);
<!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">指定好接口全类名<property name="mapperInterface" value="cn.kgc.smbms.mapperdao.UserMapper"></property>因为MapperFactoryBean 继承了SqlSessionDaoSupport类 所以可以采用下方注入<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean> --><!-- Mapper扫描器 可以帮你自动生成上方的MapperBean对象  它生成的MapperBean会自动以对应的接口的小驼峰来命名bean的id -->
<!-- Mapper接口和XML必须同名同包 否则扫描失败 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 配置接口扫描位置 --><property name="basePackage" value="cn.kgc.smbms.mapperdao"></property><!-- 不需要注入SqlSessionFactory对象了 它是默认按照类型查找 -->
</bean>

Mapper接口的配置替代掉了以前的DAO.(MapperFactoryBean)

但是一个个的接口配置非常麻烦,所以可以使用扫描(MapperScannerConfigurer).

3.掌握声明式事务的使用(AOP)

<!-- 配置声明式事务(AOP) -->
<!-- 配置事务管理器(相当于我们前面自己编写的增强处理类) -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property>
</bean><!-- 声明式事务的规则配置 -->
<tx:advice id="tx-advice" transaction-manager="transactionManager"><tx:attributes><!-- 下方的规则表示 如果查找到add系列的方法 则开启事务管理...如果查找到get系列的方法 则不开启事务管理而如果查找到的方法不符合这些系列 则默认开始事务管理--><tx:method name="add*"/><tx:method name="update*"/><tx:method name="delete*"/><!-- 查询方法不需要事务管理 --><tx:method name="get*" read-only="true"/><tx:method name="*"/></tx:attributes>
</tx:advice><!-- 配置AOP -->
<aop:config><aop:pointcut expression="execution(* cn.kgc.smbms.service..*.*(..))" id="txPointCut"/><!-- 引用事务通知 --><aop:advisor advice-ref="tx-advice" pointcut-ref="txPointCut"/>
</aop:config>
<!-- 配置声明式事务(AOP) -->
<!-- 配置事务管理器(相当于我们前面自己编写的增强处理类) -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property>
</bean><!-- 启用注解式声明式事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

4. Spring的扩展

4.1 JDNI配置

JNDI(Java Naming and Directory Interface)Java命名和目录接口

我们可以使用JNDI来实现对于资源的共享,之前我们学习JNDI就是为了使用Tomcat内置的连接池(DBCP)。

<Resource name="jdbc-mysql"type="javax.sql.DataSource"auth="Container" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql:///smbms?useUnicode=true&amp;characterEncoding=utf-8"username="root" password="root"maxActive="100" maxIdle="30" maxWait="10000"/>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"><property name="jndiName" value="java:comp/env/jdbc-mysql"/></bean>

注意经由Tomcat服务器之后,Spring才可以使用到JNDI资源。

4.2 Spring的bean作用域

// 如果想更改默认的bean作用域 就在对应的bean的配置上添加scope="prototype"
<bean id="userService" class="" scope="prototype"></bean>
@Service
@Scope("prototype")
public class UserServiceImpl impl....

4.3 Spring自动注入

我们以前纯XML形式开发,需要自行配置service,dao的bean组件,然后自己进行依赖注入,而现在如果采用了自动注入,那么你就不需要再去配置依赖注入了,只需要配置好bean组件即可。

自动注入有几种选项:

byName 按照属性名称来自动注入信息

byType 按照属性类型来自动注入信息

constructor 构造自动注入

注意:如果开启了全部的自动注入,需要保证 那些不需要的bean要配置
<beans default-autowire="byName"><bean id="" class="" autowire="no"/>
</beans>

4.4 Spring文件拆分(掌握)

我们在项目开发中,未来配置越来越多,有些时候,如果所有的配置都放在一起。不方便我们进行维护,同样也不方便团队开发,所以当配置内容到达一定程度之后,我们可以对配置文件进行拆分。

拆分1:按照分层架构拆分

​ applicationContext-controller.xml

​ applicationContext-servive.xml

​ applicationContext-dao.xml

​ applicationContext-basic.xml

拆分2:按照模板拆分

applicationContext-user.xml

applicationContext-role.xml

applicationContext-provider.xml

applicationContext-basic.xml

拆分后,加载配置文件的策略:

1.在某个配置文件中 引入其他的拆分后的配置,然后加载单一的配置文件即可

<import resource="applicationContext-dao.xml"/>
<import resource="applicationContext-service.xml"/>
  1. 使用Spring的重载的加载资源API,同时加载多个资源配置文件

69 MyBatis和Spring整合相关推荐

  1. Mybatis与Spring整合之配置文件方式

    Mybatis与Spring整合之配置文件 案例制作步骤--基础准备工作 ⚫ 环境准备 导入Spring坐标,MyBatis坐标,MySQL坐标,Druid坐标 ⚫ 业务类与接口准备 创建数据库表,并 ...

  2. mybatis和spring整合时这个报错,应该这样解决!

    01 问题描述 今天在写mybatis和spring整合的时候,出现了个问题,其实也没有多难,就是自己没有仔细看,特此记录一下. 报错问题如下: org.springframework.beans.f ...

  3. 【MyBatis框架】mybatis和spring整合

    spring和mybatis整合 1.整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactor ...

  4. Spring+SpringMVC+MyBatis深入学习及搭建(九)——MyBatis和Spring整合

    1.整合思路 需要Spring通过单例方式管理SqlSessionFactory. Spring和MyBatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(Sp ...

  5. Mybatis 与Spring整合及原理

    Mybatis 与Spring原理分析 http://www.mybatis.org/spring/zh/index.html 这里我们以传统的Spring 为例,因为配置更直观,在Spring 中使 ...

  6. Mybatis和Spring整合

    一.dao接口+实现类的方式 1.先创建好整合工程结构 2.对于Spring和Mybatis 整合,我们先从数据库开始,即先创建一张简单的数据表,Sql如下 CREATE TABLE `t_user` ...

  7. MyBatis - 6.Spring整合MyBatis

    1.查看不同MyBatis版本整合Spring时使用的适配包: http://www.mybatis.org/spring/ 2.下载整合适配包 https://github.com/mybatis/ ...

  8. spring boot mybatis 整合_MyBatis学习:MyBatis和Spring整合

    1. 整合的工程结构 首先我们来看下整合之后的工程结构是什么样的. 2. 配置文件 在于spring整合之前,mybatis都是自己管理数据源的,然后sqlSessionFactory是我们自己去注入 ...

  9. MyBatis与Spring整合

    1. 使用Spring的数据源代替MyBatis的配置 <bean id="dataSource" class="org.springframework.jdbc. ...

  10. 【Spring】【MyBatis】Spring整合MyBatis01

    这是一个Spring整合MyBatis的第一次尝试,对于文件的命名和存放位置,也许有些不太合理,请见谅 需要数据库的请查阅[Mybatis]学习笔记01:连接数据库,实现增删改 - 萌狼蓝天 本文档使 ...

最新文章

  1. 【ACM】杭电OJ 1003。
  2. linux命令的使用实验报告,Linux实验报告一-常用命令使用.doc
  3. GAE 博客——B3log Solo 0.3.5 正式版发布了!
  4. 微软重组变两大事业部:Windows主管离职
  5. 电脑动态壁纸_每日壁纸—水彩插画少女动漫手机高清无水印壁纸第二波
  6. php网页输入框,php网页的输入框显示中文异常
  7. [学习笔记]舞蹈链(Dancing Links)C++实现(指针版)
  8. 致敬 HarmonyOS 不平凡的 2020,热情背后还有多少期待
  9. 深入理解javascript原型和闭包 1
  10. SpringAOP-基于@AspectJ的简单入门
  11. python申明变量和赋值_Python入门(二)
  12. tqdm的版本问题导致tensorflow_datasets无法加载
  13. 史上最全 SQL 基础知识语法
  14. github优秀代码锦集
  15. html背景色坐标,【已解决】Html的Canvas设置全局背景色
  16. 计算机图形学---简单光照明模型知识汇总
  17. 十分钟开发物联网:智能气象站(4G版)
  18. KBEngine游戏服务器(一)——引擎源代码的获取和编译
  19. @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  20. PT静态时序分析 第三课 第四课

热门文章

  1. 行列式的3种计算方法技巧和一点注意
  2. ffmpeg批量将图片合并为视频
  3. 宏的录制之工资条的制作
  4. 【UE4】使用UMG创建UI,了解内部机制及相应优化方法
  5. U3D学习项目一:2D横版小狐狸闯关游戏(代码部分二)
  6. 前端web实训——小米商城(第一天)
  7. 青岛大学计算机考研率高吗,学院2015届毕业生考研率再创新高
  8. 星巴克中国虎年新春限定产品上市
  9. Node-RED使用指南:7:配置与设定总结:其他配置
  10. 基于学术研究下载NOAA气象雷达资料的详细步骤