springboot系列学习(二十):springboot项目整合mybatis,springboot项目如何处理事务

2022-05-09 09:51:29 浏览数 (1)

目录

  • 回顾ssm整合mybatis
  • springboot整合mybatis
  • 事务注解
    • 回顾之前ssm框架如何处理事务
    • springboot项目里面如何配置事务

回顾ssm整合mybatis

在ssm框架里面整合mybatis .

Spring框架(四)spring整合mybatis全部流程,附代码

也就是自己在src下创建并配置applicationcontext.xml文件,里面写数据源,也就是创建bean对象放到容器里面,以后哪个地方需要,直接从容器里面拿就可以了。

springboot整合mybatis

之前我们是用springboot项目整合了jdbc,现在整合mybatis。

只要导入以下的依赖,那么就可以使用mybatis框架了

如果是oracle的数据库,那么就将驱动变为oracle

代码语言:javascript复制
<!--mysql的驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
<!--springboot  和mysql  整合的jar包-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>

oracle的驱动

代码语言:javascript复制
	<!-- 数据库驱动包 -->
		<dependency>
			<groupId>com.oracle</groupId>
			<artifactId>ojdbc6</artifactId>
			<version>11.2.0</version>
		</dependency>

只要导入了以上的mybatis的配置文件,相当与我们之前spring mybatis的项目的开发环境搭建好了,

就相当于applicationcontext.xml里面关于mybatis的相关的配置也配好了。

但是我们要连哪个数据库呢?所以我们要自己配自己的数据库的用户名和密码

既然依赖已经导入,那么就开始写yml配置吧,里面的代码是

代码语言:javascript复制
spring:
  datasource:
    username: root
    password: '060708'
    #?serverTimezone=UTC解决时区的报错
    url: jdbc:mysql://localhost:3306/class?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource # 自定义数据源

    #Spring Boot 默认是不注入这些属性值的,需要自己绑定
    #druid 数据源专有配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

    #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

其实和jdbc的时候一样,相当于yml里面的就没有变,相当于数据源的写法就是那,不变

之后测试的时候,先创建一个实体类,之后用mybatis操作实体类

代码语言:javascript复制
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Department {

    private Integer id;
    private String departmentName;

}

创建mapper目录以及对应的 Mapper 接口

代码语言:javascript复制
//@Mapper : 表示本类是一个 MyBatis 的 Mapper
@Mapper
@Repository
public interface DepartmentMapper {

    // 获取所有部门信息
    List<Department> getDepartments();

    // 通过id获得部门
    Department getDepartment(Integer id);

}

对应的Mapper映射文件

代码语言:javascript复制
<?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.kuang.mapper.DepartmentMapper">

    <select id="getDepartments" resultType="Department">
       select * from department;
    </select>

    <select id="getDepartment" resultType="Department" parameterType="int">
       select * from department where id = #{id};
    </select>

</mapper>

之后我们在yml里面还要写扫描mapper的路径,因为要将mapper层的接口和这个xml关联起来,所以在配置文件里面写这个xml扫描路径,告诉springboot项目,找xml到这个地方找

这个还可以自己写一个mybatis的配置类,在类里面将这个路径也配置了,yml里面就不需要配置了

maven配置资源过滤问题,以下这个配置的原因是,有时候我们会在写java代码的地方也写xml文件,打包的时候不会将写java代码的地方的xml文件也打包,所以在pom里面写上,告诉项目以后打包的时候要将xml也打包。

如果你不打算在写java的地方写xml文件,那么就不需要在pom里面写这个,什么是写java代码的地方呢?

这个mapper里面

代码语言:javascript复制
<resources>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
    </resource>
</resources>
代码语言:javascript复制
@RestController
public class DepartmentController {
    
    @Autowired
    DepartmentMapper departmentMapper;
    
    // 查询全部部门
    @GetMapping("/getDepartments")
    public List<Department> getDepartments(){
        return departmentMapper.getDepartments();
    }

    // 查询全部部门
    @GetMapping("/getDepartment/{id}")
    public Department getDepartment(@PathVariable("id") Integer id){
        return departmentMapper.getDepartment(id);
    }
    
}

事务注解

回顾之前ssm框架如何处理事务

Spring框架(九)为什么使用SpringTX框架,如何使用,附代码

总结:也就是ssm项目里面,我们在applicationcontext.xml里面写事务相关的代码,告诉框架哪些方法需要配置事务。

springboot项目里面如何配置事务

只需要在要加事务的上面加这个注解,那么就配置了,和之前ssm项目,写的那么多的配置的功能一模一样。

0 人点赞