欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Spring学习笔记(十一)。Spring整合MyBatis,applicationContext.xml,sqlSessionTemplate,SqlSessionDaoSupport

时间:2023-08-17
文章目录

Spring整合MyBatis1 回忆Mybatis2 MyBatis-Spring学习3 整合实现一4 整合实现二 Spring整合MyBatis

搭建一个MyBatis程序

导入相关的依赖

junit

junit junit 4.12

mybatis

org.mybatis mybatis 3.5.2

mysql-connector

mysql mysql-connector-java 5.1.47

spring相关的

org.springframework spring-webmvc 5.1.10.RELEASE org.springframework spring-jdbc 5.1.10.RELEASE

aspectJ AOP 织入器

org.aspectj aspectjweaver 1.9.4

mybatis-spring整合包 【重点】

org.mybatis mybatis-spring 2.0.2

lombok

org.projectlombok lombok 1.18.12

配置Maven静态资源过滤问题!

src/main/java ***.xml true src/main/resources ***.xml true

编写配置文件

代码实现

1 回忆Mybatis

编写pojo实体类

@Data@AllArgsConstructor@NoArgsConstructorpublic class User { private int id; private String name; private String pwd;}

编写UserMapper接口

public interface UserMapper { public List selectUser();}

编写数据库连接配置

db.properties

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8username=rootpassword=xxc113206

实现mybatis的配置文件

<?xml version="1.0" encoding="UTF-8" ?>

接口对应的Mapper映射文件

<?xml version="1.0" encoding="UTF-8" ?>

工具类

public class MyBatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { // 获取MyBatis第一步:获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } // 既然有了sqlSessionFactory,顾名思义,我们就可以从中获得SqlSession的实例了 // SqlSession 完全包含了面向数据库执行SQL命令所需的所有方法 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(true); }}

测试类

public class MyTest { @Test public void test(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List users = mapper.selectUser(); for (User user : users) { System.out.println(user); } }}

2 MyBatis-Spring学习

官方文档:

http://mybatis.org/spring/zh/index.html

3 整合实现一 引入Spring配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

配置数据源替换mybaits的数据源

配置完之后我们就可以不用mybatis-config.xml中配置的了。

配置SqlSessionFactory,关联MyBatis

说明:mapperLocations就是我们mybatis-config.xml中的映射器(mappers),说明我们之前在mybatis-config.xml中的配置现在可以配到applicationContext.xml了。甚至mybatis-config.xml不用也可以。我一般会将起别名和settings(设置)保留到mybatis-config.xml中。

注册sqlSessionTemplate,关联sqlSessionFactory;(sqlSessionTemplate就是我们mybatis中说的sqlSession)

构造器注入参考:https://blog.csdn.net/weixin_45842494/article/details/122772913

增加Dao接口的实现类;私有化sqlSessionTemplate

public class UserMapperImpl implements UserMapper { //sqlSession不用我们自己创建了,Spring来管理 private SqlSessionTemplate sqlSession; public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } public List selectUser() { UserMapper mapper = sqlSession.getMapper(UserMapper.class); return mapper.selectUser(); }}

注册bean实现

测试

public class MyTest { @Test public void test1(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper mapper = (UserMapper) context.getBean("userMapper"); List user = mapper.selectUser(); System.out.println(user); }}

说明:最主要的就是将SqlSessionTemplate称为私有化属性,在操作中没有感觉到mybatis的存在一样。

同样的,为了体现整合的效果,我们将applicationContext.xml提取出来,使用import标签,用一个总得配置文件进行整合。

这样一来,spring-dao将作为固定不用在改变,我们需要注入的时候只需要修改applicationContext.xml即可

此时我们的mybatis-config.xml的内容为:

<?xml version="1.0" encoding="UTF-8" ?>

mybatis-config.xml被spring完美整合。

4 整合实现二

mybatis-spring1.2.3版以上的才有这个

官方文档截图:

dao继承Support类 , 直接利用 getSqlSession() 获得 , 然后直接注入SqlSessionFactory 、比起方式1 , 不需要管理SqlSessionTemplate , 而且对事务的支持更加友好 、可跟踪源码查看。

测试

新建一个UserMapperImpl2.java

public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{ @Override public List selectUser() { return getSqlSession().getMapper(UserMapper.class).selectUser(); }}

继承了SqlSessionDaoSupport同时实现了UserMapper。因为已经有了sqlSession,所以sqlSessionTemplate都没有必要要了。

注入到Spring中

这里直接用了sqlSessionFactory,没必要sqlSessionTemplate了

测试

public class MyTest { @Test public void test1(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper mapper = (UserMapper) context.getBean("userMapper2"); List users = mapper.selectUser(); for (User user : users) { System.out.println(user); } }}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。