【MyBatis系列4】MyBatis与Spring Boost整合

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 上个月看同事写的项目代码,看到MyBatis这块,发现里面没有XML文件,我就问他“MyBatis和Spring集成,我之前写过Demo,不是应该有XML文件配置的么?”,然后他说“这个是Spring Boost,不需要XML文件配置”,我一脸蒙圈,当时就感觉Java的工具真TM多,一时这样,一时那样,搞的我连代码都看不懂。

`~GLK48[6B6%}0_{162WKFO.jpg

主要通过示例讲解MyBatis和Spring Boost整合的流程。


前言


上个月看同事写的项目代码,看到MyBatis这块,发现里面没有XML文件,我就问他“MyBatis和Spring集成,我之前写过Demo,不是应该有XML文件配置的么?”,然后他说“这个是Spring Boost,不需要XML文件配置”,我一脸蒙圈,当时就感觉Java的工具真TM多,一时这样,一时那样,搞的我连代码都看不懂。

文章《【MyBatis系列2】MyBatis与Spring整合》已经讲述了与Spring的整合,下面我们就看看MyBatis和Spring Boost是如何整合的。


项目准备


DB结构:

CREATE TABLE `user_test` (
  `uid` tinyint(2) NOT NULL,
  `uname` varchar(20) DEFAULT NULL,
  `usex` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

DB初始数据:

uid uname usex
1 张三
2 陈恒
3 楼仔


集成示例


项目结构

我们先看一下项目结构:

image.gifU0{Q2ZTCLTHD_QAF}EC2V$2.png


pom.xml

DB使用的是Mysql,pom.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>


资源文件

本文不使用application.properties文件,而使用更加简洁的application.yml文件。将resource文件夹下原有的application.properties文件删除,创建application.yml配置文件(备注:其实SpringBoot底层会把application.yml文件解析为application.properties),本文创建了两个yml文件(application.yml和application-dev.yml),分别来看一下内容:

application.yml

spring:
  profiles:
    active: dev

application-dev.yml

server:
  port: 8080
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://xxx:3104/xm_jointly?characterEncoding=utf8
    username: xx
    password: xxx
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.example.entity
#showSql
logging:
  level:
    com:
      example:
        mapper : debug

因为现在一个项目有好多环境,开发环境,测试环境,准生产环境,生产环境,每个环境的参数不同,所以我们就可以把每个环境的参数配置到yml文件中,这样在想用哪个环境的时候只需要在主配置文件中将用的配置文件写上就行如application.yml。

在Spring Boot中多环境配置文件名需要满足application-{profile}.yml的格式,其中{profile}对应你的环境标识,比如:

  • application-dev.yml:开发环境
  • application-test.yml:测试环境
  • application-prod.yml:生产环境

至于哪个具体的配置文件会被加载,需要在application.yml文件中通过spring.profiles.active属性来设置,其值对应{profile}值。

UserMapper.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.example.dao.UserDao">
    <!-- 根据uid查询一个用户信息 -->
    <select id="selectUserById" parameterType="Integer" resultType="com.example.entity.MyUser">
        select * from user_test where uid = #{uid}
    </select>
    <!-- 查询所有用户信息 -->
    <select id="selectAllUser" resultType="com.example.entity.MyUser">
        select * from user_test
    </select>
    <!-- 添加一个用户,#{uname}为 com.mybatis.po.MyUser 的属性值 -->
    <insert id="addUser" parameterType="com.example.entity.MyUser">
        insert into user_test (uid,uname,usex)
        values(#{uid},#{uname},#{usex})
    </insert>
    <!--修改一个用户 -->
    <update id="updateUser" parameterType="com.example.entity.MyUser">
        update user_test set uname =#{uname},usex = #{usex} where uid = #{uid}
    </update>
    <!-- 删除一个用户 -->
    <delete id="deleteUser" parameterType="Integer">
        delete from user_test where uid= #{uid}
    </delete>
</mapper>


代码文件

MyUser.java

/**
 * springtest数据库中user表的持久类
 */
@Data
public class MyUser {
    private Integer uid; // 主键
    private String uname;
    private String usex;
}

UserDao.java

@Repository
@Mapper
public interface UserDao {
    /**
     * 接口方法对应的SQL映射文件中的id
     */
    public MyUser selectUserById(Integer uid);
    public List<MyUser> selectAllUser();
    public int addUser(MyUser user);
    public int updateUser(MyUser user);
    public int deleteUser(Integer uid);
}

UserServer.java

@Service
@RequestMapping("user")
public class UserServer {
    @Autowired
    private UserDao userMapper;
    @ResponseBody
    @RequestMapping("getuser/{id}")
    public String test(@PathVariable int id) {
        MyUser user = userMapper.selectUserById(id);
        System.out.println(user.toString());
        return user.toString();
    }
}

HelloWorldMainApplication.java

@SpringBootApplication
public class HelloWorldMainApplication {
    public static void main(String[] args) {
        // Spring应用启动起来
        SpringApplication.run(HelloWorldMainApplication.class, args);
    }
}


测试

启动服务,然后在网页输入"http://localhost:8080/user/getuser/1",结果如下:

image.gif3A{`SK6W1NF2UJ(R2UYDWG2.png

输入"http://localhost:8080/user/getuser/2",结果如下:

image.gif{42Q4EI{$@6$MND@}`P$P{S.png

整个示例的内容,我基本没有解为什么要这样集成,因为原理基本和Spring的集成类似,如果大家对MyBatis与Spring的集成非常清楚,这个看起来会非常简单,具体每一步的原因,请先参考文章《【MyBatis系列2】MyBatis与Spring整合》,不同的部分,后面我会进行说明。


Spring Boost vs Spring


两者的相同的地方:

  • 原理和核心机制是一样的;
  • 对代码的编码部分是一样的,都需要DB类MyUser、接口UserDao、映射文件UserMapper.xml。

两者不同的地方:

  • 之前Spring和MyBatis集成时的一些配置,比如sqlSessionFactory、MapperScannerConfigurer、mybatis-config.xml等,之前在Spirng中都是写在applicationContext.xml配置中,但是在Spring Boost中都找不到了,变成了application.yml和application-dev.yml的配置。
  • 查找UserMapper.xml文件,是直接写在了application-dev.yml,这个还是作为MyBatis的配置项。

还有一点,不知道是不是我用错了,我在Spring中,可以写个Test测试两者的集成,但是在Spring Boost中,不能通过Test进行内部调用,需要走URL请求的方式,可能是程序启动时,加载了Spring Boost框架,我自己写的Demo,没有启动Spring Boost框架导致,这个只是我自己的理解,后面有空我会再研究一下。


后记


MyBatis的基础知识,我基本学完了,花了一个星期时间,当然只是学习的基础部分,后面两天再看看项目中用到MyBatis的地方,把核心知识再抽离出来,然后再完成最后一篇文章后,这个系列就会先告一段落。

今天端午节,也祝大家端午节快乐!!!

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
SQL Java 数据库连接
SpringBoot整合Mybatis
SpringBoot整合Mybatis
21 2
|
1月前
|
Java Spring 容器
Spring系列文章:Spring6集成MyBatis3.5
Spring系列文章:Spring6集成MyBatis3.5
|
1月前
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
29 0
|
19天前
|
运维 监控 安全
云HIS医疗管理系统源码——技术栈【SpringBoot+Angular+MySQL+MyBatis】
云HIS系统采用主流成熟技术,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问前后端分离,多服务协同,服务可拆分,功能易扩展;支持多样化灵活配置,提取大量公共参数,无需修改代码即可满足不同客户需求;服务组织合理,功能高内聚,服务间通信简练。
32 4
|
1月前
|
SQL Java 数据库连接
【mybatis】第一篇,Springboot中使用插件PageHelper不生效解决方案
【mybatis】第一篇,Springboot中使用插件PageHelper不生效解决方案
|
6天前
|
Java 数据库连接 Spring
Spring 整合mybatis
Spring 整合mybatis
17 2
|
2天前
|
JSON Java 数据格式
nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
|
10天前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
30 4
|
13天前
|
XML Java 数据库连接
Spring Boot与MyBatis:整合与实战
【4月更文挑战第29天】在现代的Java Web应用开发中,持久化层框架扮演了至关重要的角色。MyBatis作为一款优秀的持久化框架,被广泛应用于Java开发中。Spring Boot提供了简化开发流程的功能,而与MyBatis的整合也变得更加便捷。
24 0
|
17天前
|
Java 数据库连接 数据库
spring+mybatis_编写一个简单的增删改查接口
spring+mybatis_编写一个简单的增删改查接口
16 2