当前位置: 首页 > news >正文

Java课题笔记~ Spring 集成 MyBatis

Spring 集成 MyBatis

将 MyBatis 与 Spring 进行整合,主要解决的问题就是将 SqlSessionFactory 对象交由 Spring 来管理。所以该整合,只需要将 SqlSessionFactory 的对象生成器SqlSessionFactoryBean 注册在 Spring 容器中,再将其注入给 Dao 的实现类即可完成整合。

实现 Spring 与 MyBatis 的整合常用的方式:扫描的 Mapper 动态代理

Spring 像插线板一样,mybatis 框架是插头,可以容易的组合到一起。

插线板 spring 插上 mybatis,两个框架就是一个整体。

1、MySQL 创建数据库 db1,新建表 student2

 

2、maven 依赖 pom.xml

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.26</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.3.26</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.26</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.11</version></dependency><!-- Spring整合MyBatis的依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.1.0</version></dependency><!-- --------------------- --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency>
</dependencies>	<!--插件:-->
<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins>
</build>

3、定义实体类 Student

 代码如下:

package com.ambow.pojo;import lombok.Data;@Data
public class Student {private int id;private String name;private int age;}

4、定义 StudentDao 接口

 代码如下:

package com.ambow.dao;import com.ambow.pojo.Student;import java.util.List;public interface StudentDao {int insertStudent(Student student);int updateStudent(Student student);int deleteStudent(int id);Student selectStudentById(int id);List<Student> selectAllStudents();
}

5、定义映射文件 mapper

在 Dao 接口的包中创建 MyBatis 的映射文件 mapper,命名与接口名相同,本例为 StudentDao.xml

mapper 中的 namespace 取值也为 Dao 接口 的全限定性名。

  代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ambow.dao.StudentDao"><insert id="insertStudent">insert into student2 values(null,#{name},#{age})</insert><update id="updateStudent">update student2 set name = #{name},age = #{age} where id = #{id}</update><delete id="deleteStudent">delete from student2 where id = #{id}</delete><select id="selectStudentById" resultType="com.ambow.pojo.Student">select * from student2 where id = #{id}</select><select id="selectAllStudents" resultType="com.ambow.pojo.Student">select * from student2</select></mapper>

6、定义 Service 接口和实现类

接口定义:

  代码如下:

package com.ambow.service;import com.ambow.pojo.Student;import java.util.List;public interface StudentService {int addStudent(Student student);int modifyStudent(Student student);int removeStudent(int id);Student findStudentById(int id);List<Student> findAllStudents();
}

实现类定义:

  代码如下:

package com.ambow.service.impl;import com.ambow.dao.StudentDao;
import com.ambow.pojo.Student;
import com.ambow.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.List;@Service("studentService")
public class StudentServiceImpl implements StudentService {//引入StudentDao的对象@Autowiredprivate StudentDao studentDao;public void setStudentDao(StudentDao studentDao) {this.studentDao = studentDao;}@Overridepublic int addStudent(Student student) {return studentDao.insertStudent(student);}@Overridepublic int modifyStudent(Student student) {return studentDao.updateStudent(student);}@Overridepublic int removeStudent(int id) {return studentDao.deleteStudent(id);}@Overridepublic Student findStudentById(int id) {return studentDao.selectStudentById(id);}@Overridepublic List<Student> findAllStudents() {return studentDao.selectAllStudents();}
}

7、定义 MyBatis 主配置文件

在 src 下定义 MyBatis 的主配置文件,命名为 mybatis.xml

这里有两点需要注意:

(1)主配置文件中不再需要数据源的配置了。因为数据源要交给 Spring 容器 来管理了。

(2)这里对 mapper 映射文件的注册,使用标签,即只需给出 mapper 映射文件所在的包即可。因为 mapper 的名称与 Dao 接口名相同, 可以使用这种简单注册方式。

这种方式的好处是:若有多个映射文件,这里的 配置也是不用改变的。当然,也可使用原来的标签方式。

 

8 、修改 Spring 配置文件

(1) 数据源的配置(掌握)

使用 JDBC 模板,首先需要配置好数据源,数据源直接以 Bean 的形式配置 在 Spring 配置文件中。根据数据源的不同,其配置方式不同:

Druid 数据源 DruidDataSource Druid 是阿里的开源数据库连接池。是 Java 语言中最好的数据库连接 池。Druid 能够提供强大的监控和扩展功能。Druid 与其他数据库连接池的 最大区别是提供数据库的

官网:GitHub - alibaba/druid: 阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池 - GitHub - alibaba/druid: 阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池https://github.com/alibaba/druid

使用地址:Home · alibaba/druid Wiki · GitHub阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池 - Home · alibaba/druid Wikihttps://github.com/alibaba/druid/wiki/

常见问题

配置连接池:

  Spring 配置文件:

  代码如下:

    <!--1.DataSource--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean>

(2) 从属性文件读取数据库连接信息

为了便于维护,可以将数据库连接信息写入到属性文件中,使 Spring 配置 文件从中读取数据。

属性文件名称自定义,但一般都是放在 src 下。

  代码如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.2.111:3306/db1
jdbc.username=root
jdbc.password=Mysql666!

Spring 配置文件从属性文件中读取数据时,需要在的 value 属性中使用${ },将在属性文件中定义的 key 括起来,以引用指定属性的值。

该属性文件若要被 Spring 配置文件读取,其必须在配置文件中进行注册。 使用<context>标签。

<context:property-placeholder />方式(掌握)

该方式要求在 Spring 配置文件头部加入 spring-context.xsd 约束文件

<context:property-placeholder />标签中有一个属性 location,用于指定属 性文件的位置。

 (3) 注册 SqlSessionFactoryBean

 

代码如下: 

    <!--2.注册SqlSessionFactoryBean--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="typeAliasesPackage" value="com.ambow.pojo" /><property name="mapperLocations" value="classpath:com/ambow/dao/*.xml" /></bean>

(4) 定义 Mapper 扫描配置器 MapperScannerConfigurer

Mapper 扫描配置器 MapperScannerConfigurer 会自动生成指定的基本 包中 mapper 的代理对象。该 Bean 无需设置 id 属性。basePackage 使用分 号或逗号设置多个包。

 

 代码如下:

    <!--3.mapper的扫描配置器 -> 生成mapper的代理对象--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /><property name="basePackage" value="com.ambow.dao" /></bean>

9、向 Service 注入接口名

向 Service 注入 Mapper 代理对象时需要注意,由于通过 Mapper 扫描配置器 MapperScannerConfigurer 生成的 Mapper 代理对象没有名称,所以在 向 Service 注入 Mapper 代理时,无法通过名称注入。但可通过接口的简单类名注入,因为生成的是这个 Dao 接口的对象。

 

 代码如下:

    <!--4.向service层注入Dao-->
<!--    <bean id="studentService" class="com.ambow.service.impl.StudentServiceImpl"><property name="studentDao" ref="studentDao" /></bean>-->

10、Spring 配置文件全部配置

 代码如下:

<?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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--整合:把MyBatis中的核心对象,放到Spring容器--><!--引入属性配置文件--><context:property-placeholder location="classpath:jdbc.properties" /><context:component-scan base-package="com.ambow.service" /><!--1.DataSource--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><!--2.注册SqlSessionFactoryBean--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="typeAliasesPackage" value="com.ambow.pojo" /><property name="mapperLocations" value="classpath:com/ambow/dao/*.xml" /></bean><!--3.mapper的扫描配置器 -> 生成mapper的代理对象--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /><property name="basePackage" value="com.ambow.dao" /></bean><!--4.向service层注入Dao-->
<!--    <bean id="studentService" class="com.ambow.service.impl.StudentServiceImpl"><property name="studentDao" ref="studentDao" /></bean>--><!--注入的过程--><!--dataSource -> SqlSessionFactoryBean -> MapperScannerConfigurer(生成Dao代理对象) -> studentService--></beans>

项目整体结构如下图:

 运行测试类test02:

 

运行测试类test03:

 

http://www.lryc.cn/news/115000.html

相关文章:

  • 分布式系统理论基础
  • mfc 编辑框限制
  • web基础与tomcat环境部署
  • Go 变量
  • 【雷达通信】非相干多视处理(CSA)(Matlab代码实现)
  • 73. 矩阵置零
  • ‘大数据技术与应用’和‘数据科学与大数据技术’有什么区别
  • 没有jsoup,rust怎么解析html呢?
  • 【C高级】Day4 shell脚本 排序
  • 大模型开发(十六):从0到1构建一个高度自动化的AI项目开发流程(中)
  • 【深入了解pytorch】PyTorch强化学习:强化学习的基本概念、马尔可夫决策过程(MDP)和常见的强化学习算法
  • 尚硅谷张天禹Vue2+Vue3笔记(待续)
  • 深度学习(35)—— StarGAN(2)
  • 连续四年入选!三项荣耀!博云科技强势上榜Gartner ICT技术成熟度曲线
  • Docker实战-操作Docker容器实战(一)
  • c#设计模式-行为型模式 之 观察者模式
  • 开窗积累之学习更新版
  • ffplay简介
  • mysql之limit语句详解
  • 4.while循环
  • 【雕爷学编程】 MicroPython动手做(35)——体验小游戏2
  • mouseover 和 mouseenter
  • [JavaScript游戏开发] 绘制Q版地图、键盘上下左右地图场景切换
  • CI/CD持续集成持续发布(jenkins)
  • Qt5.14.2+QtCreator+PDB 查看源码
  • DOM基础获取元素+事件基础+操作元素
  • MATLAB——感知神经网络学习程序
  • SpringBoot中事务失效的原因
  • Webstorm的一些常用快捷键
  • 系统集成项目成本管理