spring——整合Mybatis
一、Mybatis整合spring
步骤:
- 导入相关jar包
- junit
- mybatis
- mysql数据库
- spring-webmvc
- aop织入
- mybatis-spring
- spring-jdbc(spring的事务管理器,也可以用druid等的代替)
- 编写配置文件
- 测试
1.1 回忆mybatis
- 编写实体类
- 编写核心配置文件
- 编写接口
- 编写Mapper.xml
- 测试
1.2 整合方式一
注意版本限制:

dataSource(这里配置使用Spring的数据源替换Mybatis的配置)
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/dailyClick-test?useSSL=false&useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="1111"/>
<property name="password" value="1111"/>
</bean>
注:Mybatis有默认的数据源(连接池),但是是可以替换的
sqlSessionFactory配置
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 绑定配置文件地址和mapper地址-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:com/guan/dao/*.xml"/>
</bean>
注意:
- 需要配置数据源
- 需要绑定配置文件地址和mapper地址,注意这里的路径使用classpath路径
- 由于mapper等信息被转移到
<bean>中,不能重复配置(如:<mapper>),否则会报错;mybatis-config.xml配置文件通常留<typeAlias>和<settings>
与在原来的mybatis不同,整合后需要有一个接口的实现类,且接口的方法需要通过sqlSessionTemplate实现(有利于bean的注册和管理,这个sqlSessioinTemplate是线程安全的)
sqlSessionTemplate配置
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
注:由于sqlSessionTemplate没有set方法,只有构造函数,所以通过
<constructor>标签注入实现类:与mybatis元素代码不同,接口类需要实现且接口的方法通过sqlSessionTemplate实现
public class UserMapperImpl implements UserMapper {
SqlSessionTemplate sqlSession; public void setSqlSession(SqlSessionTemplate sqlSession) {
this.sqlSession = sqlSession;
} public List<UserBean> getUserList() {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
return mapper.getUserList();
}
}
<bean id="userMapper" class="com.guan.dao.UserMapperImpl">
<property name="sqlSession" ref="sqlSession"/>
</bean>
测试
public class MyTest {
public static void main(String[] args) throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapperImpl userMapperImpl = context.getBean("userMapper", UserMapperImpl.class);
List<UserBean> userList = userMapperImpl.getUserList();
for (UserBean userBean : userList) {
System.out.println(userBean);
}
}
}
注:
(1).mybatis的配置文件(指的是和spring注册的那一部分),最好通过import引入ApplicationiContext中,这样spring配置文件的结构可以区分开
(2).xxxTemplate是spring特有的模板类
1.3 整合方式二
注:SqlSessionDaoSupport:抽象类,可以通过SqlSessionFactory获得一个SqlSessionTemplate.所以该方法相对于第一种方法增加了一个抽象类,减少了一个配置SqlSessionTemplate的步骤
环境搭建:
接口:
public interface UserMapper1 {
List<UserBean> getUserList();
}
xml实现
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.guan.dao.UserMapper1">
<select id="getUserList" resultType="userBean">
SELECT * FROM user;
</select>
</mapper>
实体类:
public class UserMapper1Impl extends SqlSessionDaoSupport implements UserMapper1{
public List<UserBean> getUserList() {
return getSqlSession().getMapper(UserMapper1.class).getUserList();
}
}
xml配置(在上文的前文的基础上配置)
<bean id="userMapper1" class="com.guan.dao.UserMapper1Impl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
测试:
public static void main(String[] args) throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper1Impl userMapperImpl = context.getBean("userMapper1", UserMapper1Impl.class);
List<UserBean> userList = userMapperImpl.getUserList();
for (UserBean userBean : userList) {
System.out.println(userBean);
}
}
二、spring中的事物管理
编程式事务:将事务管理代码嵌到业务方法中控制事务的提交和回滚
缺点:使业务逻辑中包含额外的事务管理代码
声明式事物:使用AOP
(1).搭建环境:
接口
public interface UserMapper1 {
List<UserBean> getUserList();
void insert(UserBean user);
void delete(String UId);
}
mapper:
<insert id="insert" parameterType="userBean">
INSERT INTO user(UId,UName,USet,UAuth,UPassword,UState) VALUES(#{UId},#{UName},#{USet},#{UAuth},#{UPassword},#{UState});
</insert> <delete id="delete" parameterType="string">
DELETEs FROM user WHERE UId = #{UId};
</delete>
注:可以看到我这里的"DELETEs"是错误的写法
编写实体类:
public class UserMapper1Impl extends SqlSessionDaoSupport implements UserMapper1{
public List<UserBean> getUserList() {
insert(new UserBean("6666666666","淀真嗣",1,0,"123456",1));
delete("3180421016");
return getSqlSession().getMapper(UserMapper1.class).getUserList();
} public void insert(UserBean user) {
getSqlSession().getMapper(UserMapper1.class).insert(user);
} public void delete(String UId) {
getSqlSession().getMapper(UserMapper1.class).delete(UId);
}
}
注:getUserList中添加了insert和delete方法,且delete方法是错误的.如果没有事务,则插入可以完成;如果有事务,则插入无法完成
(2).导入事务相关的xml头文件约束,创建
DataSourceTransaction对象以开启事务,配置事务通知,结合AOP实现事务的织入<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://47.100.90.132:3306/dailyClick-test?useSSL=false&useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="aguan123"/>
</bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- bind mybatis-config.xml and userMapper.xml-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:com/guan/dao/*.xml"/>
</bean> <bean id="userMapper1" class="com.guan.dao.UserMapper1Impl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean> <!-- 配置声明式事务-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <!-- 配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="getUserList" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice> <!-- 结合AOP织入事务-->
<aop:config>
<aop:pointcut id="point" expression="execution(* com.guan.dao.*.*(..))"/>
<!-- <aop:advisor advice-ref="txAdvice" pointcut-ref="point"/>-->
</aop:config> </beans>
注:
<tx:method name="getUserList" propagation="REQUIRED"/>的propagation属性表示对这些方法怎样使用事务,如:REQUIRED表示支持当前事务,如果当前没有事务,就新建一个事务 (Default)(3).测试
public class MyTest { public static void main(String[] args) throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper1 userMapperImpl = context.getBean("userMapper1", UserMapper1.class);
List<UserBean> userList = userMapperImpl.getUserList();
for (UserBean userBean : userList) {
System.out.println(userBean);
}
}
}
注意:由于使用了AOP,这里
UserMapper1 userMapperImpl = context.getBean("userMapper1", UserMapper1.class)的返回类型必须为interface类型,而不是实体类型
spring——整合Mybatis的更多相关文章
- Spring学习总结(六)——Spring整合MyBatis完整示例
为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简 ...
- Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)二
接着上一篇博客<Spring整合MyBatis(Maven+MySQL)一>继续. Spring的开放性和扩张性在J2EE应用领域得到了充分的证明,与其他优秀框架无缝的集成是Spring最 ...
- 分析下为什么spring 整合mybatis后为啥用不上session缓存
因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存. 习惯是本地缓存自己用map写或者引入第三方的本地缓存框架ehcache,Guava 所以提出来纠结下 实验 ...
- 2017年2月16日 分析下为什么spring 整合mybatis后为啥用不上session缓存
因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存. 习惯是本地缓存自己用map写或者引入第三方的本地缓存框架ehcache,Guava 所以提出来纠结下 实验 ...
- spring整合mybatis错误:class path resource [config/spring/springmvc.xml] cannot be opened because it does not exist
spring 整合Mybatis 运行环境:jdk1.7.0_17+tomcat 7 + spring:3.2.0 +mybatis:3.2.7+ eclipse 错误:class path reso ...
- spring 整合Mybatis 《报错集合,总结更新》
错误:java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldExcepti ...
- spring整合mybatis(hibernate)配置
一.Spring整合配置Mybatis spring整合mybatis可以不需要mybatis-config.xml配置文件,直接通过spring配置文件一步到位.一般需要具备如下几个基本配置. 1. ...
- spring 整合 mybatis 中数据源的几种配置方式
因为spring 整合mybatis的过程中, 有好几种整合方式,尤其是数据源那块,经常看到不一样的配置方式,总感觉有点乱,所以今天有空总结下. 一.采用org.mybatis.spring.mapp ...
- Mybatis学习(六)————— Spring整合mybatis
一.Spring整合mybatis思路 非常简单,这里先回顾一下mybatis最基础的根基, mybatis,有两个配置文件 全局配置文件SqlMapConfig.xml(配置数据源,全局变量,加载映 ...
- Spring整合MyBatis 你get了吗?
Spring整合MyBatis 1.整体架构dao,entity,service,servlet,xml 2..引入依赖 <dependencies> <dependency> ...
随机推荐
- 巧用python进行接口自动化测试
一.接口自动化测试的流程 1.需求分析 1.1请求(url,方法.数据) 2.挑选需要做自动化测试的接口 3.设计自动化测试用例 4.搭建自动化测试环境 5.设计自动化执行框架(报告.参数化. 用例执 ...
- 配置samba共享,实现/www目录共享
一.samba服务器 1.安装samba包 # yum -y install samba 2.创建用户组 # groupadd -r admins # useradd -s /sbin/nologin ...
- notepad++颜色属性解释
Global Styles Indent guideline style 缩进参考线的颜色Brace highlight style 鼠标指针在框架左右时框架的颜色(如css中{} js中的() ...
- Ubuntu20.04 安装MongoDB及其基本使用
MongoDB 官方文档 本博客旨在自我学习使用,如有任何疑问请及时联系博主 基本介绍 MongoDB 是由C++语言编写并基于分布式文件存储的开源数据库. MongoDB 是一款介于关系数据库和非关 ...
- 10、架构--keepalive、四层负载均衡
笔记 1.晨考 1.HTTPS的作用,怎么实现的呢? 2.全栈部署HTTPS 只需在代理中部署HTTPS 3.反向代理 BBS 步骤 1.部署WEB机器 2.部署代理 4.如果 LB01 宕机了,怎么 ...
- redis(一)-----初识redis
Redis是一种基于键值对(key-value)的NoSQL数据库 因为Redis会将所有数据都存放在内存 中,所以它的读写性能非常惊人.不仅如此,Redis还可以将内存的数据利 用快照和日志的形式保 ...
- Solution -「Gym 102759C」Economic One-way Roads
\(\mathcal{Description}\) Link. 给定一个含 \(n\) 个点 \(m\) 条边的简单无向图,每条边的两种定向方法各有权值,求使得图强连通且定向权值和最小的方法. ...
- 面试突击24:为什么wait和notify必须放在synchronized中?
在多线程编程中,wait 方法是让当前线程进入休眠状态,直到另一个线程调用了 notify 或 notifyAll 方法之后,才能继续恢复执行.而在 Java 中,wait 和 notify/noti ...
- CPU、进程、线程原理
巨人的肩膀 看完这篇还不懂高并发中的线程与线程池你来打我 (qq.com)
- 超简单集成 HMS ML Kit 实现最大脸微笑抓拍
前言 如果大家对 HMS ML Kit 人脸检测功能有所了解,相信已经动手调用我们提供的接口编写自己的 APP 啦.目前就有小伙伴在调用接口的过程中反馈,不太清楚 HMS ML Kit 文档中的 ML ...