69 MyBatis和Spring整合
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&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"/>
- 使用Spring的重载的加载资源API,同时加载多个资源配置文件
69 MyBatis和Spring整合相关推荐
- Mybatis与Spring整合之配置文件方式
Mybatis与Spring整合之配置文件 案例制作步骤--基础准备工作 ⚫ 环境准备 导入Spring坐标,MyBatis坐标,MySQL坐标,Druid坐标 ⚫ 业务类与接口准备 创建数据库表,并 ...
- mybatis和spring整合时这个报错,应该这样解决!
01 问题描述 今天在写mybatis和spring整合的时候,出现了个问题,其实也没有多难,就是自己没有仔细看,特此记录一下. 报错问题如下: org.springframework.beans.f ...
- 【MyBatis框架】mybatis和spring整合
spring和mybatis整合 1.整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactor ...
- Spring+SpringMVC+MyBatis深入学习及搭建(九)——MyBatis和Spring整合
1.整合思路 需要Spring通过单例方式管理SqlSessionFactory. Spring和MyBatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(Sp ...
- Mybatis 与Spring整合及原理
Mybatis 与Spring原理分析 http://www.mybatis.org/spring/zh/index.html 这里我们以传统的Spring 为例,因为配置更直观,在Spring 中使 ...
- Mybatis和Spring整合
一.dao接口+实现类的方式 1.先创建好整合工程结构 2.对于Spring和Mybatis 整合,我们先从数据库开始,即先创建一张简单的数据表,Sql如下 CREATE TABLE `t_user` ...
- MyBatis - 6.Spring整合MyBatis
1.查看不同MyBatis版本整合Spring时使用的适配包: http://www.mybatis.org/spring/ 2.下载整合适配包 https://github.com/mybatis/ ...
- spring boot mybatis 整合_MyBatis学习:MyBatis和Spring整合
1. 整合的工程结构 首先我们来看下整合之后的工程结构是什么样的. 2. 配置文件 在于spring整合之前,mybatis都是自己管理数据源的,然后sqlSessionFactory是我们自己去注入 ...
- MyBatis与Spring整合
1. 使用Spring的数据源代替MyBatis的配置 <bean id="dataSource" class="org.springframework.jdbc. ...
- 【Spring】【MyBatis】Spring整合MyBatis01
这是一个Spring整合MyBatis的第一次尝试,对于文件的命名和存放位置,也许有些不太合理,请见谅 需要数据库的请查阅[Mybatis]学习笔记01:连接数据库,实现增删改 - 萌狼蓝天 本文档使 ...
最新文章
- 【ACM】杭电OJ 1003。
- linux命令的使用实验报告,Linux实验报告一-常用命令使用.doc
- GAE 博客——B3log Solo 0.3.5 正式版发布了!
- 微软重组变两大事业部:Windows主管离职
- 电脑动态壁纸_每日壁纸—水彩插画少女动漫手机高清无水印壁纸第二波
- php网页输入框,php网页的输入框显示中文异常
- [学习笔记]舞蹈链(Dancing Links)C++实现(指针版)
- 致敬 HarmonyOS 不平凡的 2020,热情背后还有多少期待
- 深入理解javascript原型和闭包 1
- SpringAOP-基于@AspectJ的简单入门
- python申明变量和赋值_Python入门(二)
- tqdm的版本问题导致tensorflow_datasets无法加载
- 史上最全 SQL 基础知识语法
- github优秀代码锦集
- html背景色坐标,【已解决】Html的Canvas设置全局背景色
- 计算机图形学---简单光照明模型知识汇总
- 十分钟开发物联网:智能气象站(4G版)
- KBEngine游戏服务器(一)——引擎源代码的获取和编译
- @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
- PT静态时序分析 第三课 第四课