spring06:mybatis-spring(Spring整合MyBatis)

spring06:mybatis-spring(Spring整合MyBatis)


文章目录

  • spring06:mybatis-spring(Spring整合MyBatis)
  • 前言:
    • [什么是 MyBatis-Spring?](#什么是 MyBatis-Spring?)
      • [MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。](#MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。)
  • 一、mybatis流程
    • [1. 编写实体类](#1. 编写实体类)
    • [2. 编写核心配置文件mybatis-config.xml](#2. 编写核心配置文件mybatis-config.xml)
    • [3. 编写接口UserMapper](#3. 编写接口UserMapper)
    • [4. 编写配置文件UserMapper.xml](#4. 编写配置文件UserMapper.xml)
    • [5. 编写测试类](#5. 编写测试类)
  • [二、spring整合mybatis 方式一](#二、spring整合mybatis 方式一)
  • [三、spring整合mybatis 方式二](#三、spring整合mybatis 方式二)
      • [1. 编写实现类UserDaoImpl 直接继承 SqlSessionDaoSupport](#1. 编写实现类UserDaoImpl 直接继承 SqlSessionDaoSupport)
      • [2. 编写spring配置文件spring-dao.xml(相当于beans.xml)](#2. 编写spring配置文件spring-dao.xml(相当于beans.xml))
        • [applicationContext.xml是beans.xml配置文件的 整合!!!](#applicationContext.xml是beans.xml配置文件的 整合!!!)
      • [3. 编写测试类](#3. 编写测试类)
  • 总结

前言:

什么是 MyBatis-Spring?

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。


提示:以下是本篇文章正文内容:

一、mybatis流程

1.编写实体类

2.编写核心配置文件mybatis-config.xml

3.编写工具类MyBatisUtil

4.编写接口UserMapper

5.编写配置文件UserMapper.xml

6.编写测试类

1. 编写实体类

java 复制代码
// 使用了lombok注解简化:
@Data
public class User {
   private int id;
   private String name;
   private String pwd;
}

2. 编写核心配置文件mybatis-config.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

   <typeAliases>
       <package name="nuc.ss.pojo"/>
   </typeAliases>

   <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true;useUnicode=true;characterEncoding=utf8"/>
               <property name="username" value="root"/>
               <property name="password" value="admin"/>
           </dataSource>
       </environment>
   </environments>

   <mappers>
       <package name="nuc.ss.dao"/>
   </mappers>
</configuration>

3. 编写接口UserMapper

java 复制代码
public interface UserMapper {
   public List<User> selectUser();
}

4. 编写配置文件UserMapper.xml

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="nuc.ss.dao.UserMapper">
   <select id="selectUser" resultType="User">
    select * from user
   </select>

</mapper>

5. 编写测试类

MyBatisUtils工具类的作用就是创建sqlSession

我们在测试类直接创建,逻辑和 MyBatisUtils工具类是差不多的。

java 复制代码
@Test
public void selectUser() throws IOException {
	// MyBatisUtils工具类的作用就是创建sqlSession
	// 我们在测试类直接创建,逻辑和 MyBatisUtils工具类是差不多的。
   String resource = "mybatis-config.xml";
   InputStream inputStream = Resources.getResourceAsStream(resource);
   SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
   SqlSession sqlSession = sqlSessionFactory.openSession();

   UserMapper mapper = sqlSession.getMapper(UserMapper.class);

   List<User> userList = mapper.selectUser();
   for (User user: userList){
       System.out.println(user);
  }

   sqlSession.close();
}


二、spring整合mybatis 方式一

1.编写数据源配置

2.sqlSessionFactory

3.sqlSessionTemplate

4.需要给接口加实现类

5.将自己写的实现类,注入到spring当中

6.编写测试类

1. 在pom.xml导入maven依赖:mybatis-spring

xml 复制代码
<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis-spring</artifactId>
   <version>2.0.2</version>
</dependency>

2. 写一个接口实现类:UserDaoImpl(对于UserMapper接口)

在后面须要把这个类注入到spring容器里面(beams.xml)

这个类的作用:相当于mybatis的测试类,

得到sqlSession对象,执行UserMapper的方法。(执行sql语句)

在mybatis-spring里面,我们需要写这样一个方法,然后注入到spring里面,交给spring来管理。

java 复制代码
public class UserDaoImpl implements UserMapper {
   //sqlSession不用我们自己创建了,Spring来管理
   private SqlSessionTemplate sqlSession;

   public void setSqlSession(SqlSessionTemplate sqlSession) {
       this.sqlSession = sqlSession;
  }
   public List<User> selectUser() {
       UserMapper mapper = sqlSession.getMapper(UserMapper.class);
       return mapper.selectUser();
  }
}

3. 编写spring配置文件spring-dao.xml(相当于beans.xml)

注意:上面图片第4步的将实现类注入到spring中,写错了(那个是第二种方式的)

下面这个才是:(私有化一个sqlSession)

xml 复制代码
<bean id="userDao" class="nuc.ss.dao.UserDaoImpl">
   <property name="sqlSession" ref="sqlSession"/>
</bean>

4. 编写测试类

java 复制代码
// 1.获取spring容器
// 2.获取对象
// 3.使用对象执行方法
@Test
public void test(){
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserMapper mapper = (UserMapper) context.getBean("userDao");
    List<User> user = mapper.selectUser();
    System.out.println(user);
}


三、spring整合mybatis 方式二

dao继承SqlSessionDaoSupport 类 , 直接利用 getSqlSession() 获得 , 然后直接注入SqlSessionFactory .

比起方式1 , 不需要管理SqlSessionTemplate , 而且对事务的支持更加友好

1. 编写实现类UserDaoImpl 直接继承 SqlSessionDaoSupport

java 复制代码
// 1.获取sqlSession对象
// 2.得到mapper对象
// 3.利用mapper对象执行方法
public class UserDaoImpl extends SqlSessionDaoSupport implements UserMapper {
   public List<User> selectUser() {
       UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
       return mapper.selectUser();
  }
}

2. 编写spring配置文件spring-dao.xml(相当于beans.xml)

applicationContext.xml是beans.xml配置文件的 整合!!!

3. 编写测试类

感觉 mybatis的测试类的步骤 和 mybatis-spring的测试类的步骤 好像!!!

java 复制代码
// 1.获取spring容器
// 2.拿到mapper对象
// 3.利用mapper对象执行方法
@Test
public void test2(){
   ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
   UserMapper mapper = (UserMapper) context.getBean("userDao");
   List<User> user = mapper.selectUser();
   System.out.println(user);
}

总结

提示:这里对文章进行总结:

😊😊😊

相关推荐
开MINI的工科男18 分钟前
【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划
人工智能·笔记·自动驾驶·预测与决策
Dola_Pan20 分钟前
Linux文件IO(二)-文件操作使用详解
java·linux·服务器
wang_book23 分钟前
Gitlab学习(007 gitlab项目操作)
java·运维·git·学习·spring·gitlab
weixin_455446171 小时前
Python学习的主要知识框架
开发语言·python·学习
蜗牛^^O^1 小时前
Docker和K8S
java·docker·kubernetes
从心归零2 小时前
sshj使用代理连接服务器
java·服务器·sshj
一个诺诺前行的后端程序员2 小时前
springcloud微服务实战<1>
spring·spring cloud·微服务
IT毕设梦工厂3 小时前
计算机毕业设计选题推荐-在线拍卖系统-Java/Python项目实战
java·spring boot·python·django·毕业设计·源码·课程设计
Ylucius3 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
LvManBa4 小时前
Vue学习记录之六(组件实战及BEM框架了解)
vue.js·学习·rust