SpringBoot整合MyBatis完整详细版

野性酷女 2023-06-19 14:25 159阅读 0赞

写在前面: 从2018年底开始学习SpringBoot,也用SpringBoot写过一些项目。现在想对学习Springboot的一些知识总结记录一下。如果你也在学习SpringBoot,可以关注我,一起学习,一起进步。

相关文章:

【Springboot系列】Springboot入门到项目实战


上一篇写了SpringBoot整合JdbcTemplate,JdbcTemplate虽然简单,但在实际开发中用的并不多,因为它没有MyBatis方便,MyBatis是一个优秀的持久层框架,在实体类和SQL语句之间建立了映射关系,MyBatis支持普通SQL查询,存储过程和高级映射。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或者注解进行配置和原始映射,将查询出的数据库记录映射成java对象。这篇来看看在Spring Boot中MyBatis要如何使用。

目录

搭建项目

1、项目结构

2、创建SpringBoot项目

3、添加相关依赖

4、编写相关配置

表结构设计

1、表结构

2、建表

编写代码

1、编写实体类

2、编写xml文件,SQL查询

3、编写Mapper接口

3、编写业务层类

测试应用

1、编写测试Controller

2、测试应用


本文章项目下载地址:SpringBoot整合Mybatis,增删改查分页动态查询。

搭建项目

1、项目结构

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjA1MTE2_size_16_color_FFFFFF_t_70

2、创建SpringBoot项目

创建一个SpringBoot项目,添加Web依赖,MyBatis依赖以及MySQL驱动依赖,如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjA1MTE2_size_16_color_FFFFFF_t_70 1

3、添加相关依赖

创建完成后,添加对应的依赖,完整的pom.xml文件如下。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.2.1.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.mcy</groupId>
  12. <artifactId>springboot-mybatis</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>springboot-mybatis</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>com.alibaba</groupId>
  26. <artifactId>druid</artifactId>
  27. <version>1.0.9</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.mybatis.spring.boot</groupId>
  31. <artifactId>mybatis-spring-boot-starter</artifactId>
  32. <version>2.1.1</version>
  33. </dependency>
  34. <dependency>
  35. <groupId>mysql</groupId>
  36. <artifactId>mysql-connector-java</artifactId>
  37. <scope>runtime</scope>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.springframework.boot</groupId>
  41. <artifactId>spring-boot-starter-test</artifactId>
  42. <scope>test</scope>
  43. <exclusions>
  44. <exclusion>
  45. <groupId>org.junit.vintage</groupId>
  46. <artifactId>junit-vintage-engine</artifactId>
  47. </exclusion>
  48. </exclusions>
  49. </dependency>
  50. </dependencies>
  51. <build>
  52. <plugins>
  53. <plugin>
  54. <groupId>org.springframework.boot</groupId>
  55. <artifactId>spring-boot-maven-plugin</artifactId>
  56. </plugin>
  57. </plugins>
  58. </build>
  59. </project>

4、编写相关配置

在src/main/resources下找到application.properties文件,在该配置文件中配置数据源。

  1. spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8
  2. spring.datasource.username=root
  3. spring.datasource.password=root
  4. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  5. #连接池的配置
  6. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
  7. server.port=80
  8. #配置mapper xml文件所在的路径
  9. mybatis.mapper-locations=classpath:mapper/*.xml
  10. #mybatis别名包扫描,映射类所在的包名,对应实体类的包名
  11. mybatis.type-aliases-package=com.mcy.springbootmybatis.entity

这里需要注意的是两个配置xml和实体类包路径不能出错,不然会报错。

  1. #配置mapper xml文件所在的路径
  2. mybatis.mapper-locations=classpath:mapper/*.xml
  3. #mybatis别名包扫描,映射类所在的包名,对应实体类的包名
  4. mybatis.type-aliases-package=com.mcy.springbootmybatis.entity

表结构设计

1、表结构

设计了一张tb_user用户表,表结构如下。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjA1MTE2_size_16_color_FFFFFF_t_70 2

2、建表

执行以下脚本在数据库中创建tb_user表。

  1. CREATE TABLE `tb_user` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(255) DEFAULT NULL,
  4. `username` varchar(255) DEFAULT NULL,
  5. `password` varchar(255) DEFAULT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

编写代码

在项目中新建4个包,分别为entity(放置持久化类)、controller(控制器)、mapper(定义数据访问接口的包)、service(业务逻辑处理类)。在resources目录下创建mapper文件夹。代码中有详细的注释,下面直接贴代码。

1、编写实体类

实体类User.java,其代码如下(和数据库字段需要对应,继承分页公共类MyEverpage)。

  1. public class User extends MyEverpage {
  2. private Integer id;
  3. private String name;
  4. private String username;
  5. private String password;
  6. public Integer getId() {
  7. return id;
  8. }
  9. public void setId(Integer id) {
  10. this.id = id;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public String getUsername() {
  19. return username;
  20. }
  21. public void setUsername(String username) {
  22. this.username = username;
  23. }
  24. public String getPassword() {
  25. return password;
  26. }
  27. public void setPassword(String password) {
  28. this.password = password;
  29. }
  30. }

分页查询参数公共类MyEverpage.java,代码如下。

  1. /**
  2. * 分页类
  3. * @author Administrator
  4. *
  5. */
  6. public class MyEverpage {
  7. private int limit;
  8. private int offset;
  9. public int getLimit() {
  10. return limit;
  11. }
  12. public void setLimit(int limit) {
  13. this.limit = limit;
  14. }
  15. public int getOffset() {
  16. return offset;
  17. }
  18. public void setOffset(int offset) {
  19. this.offset = offset;
  20. }
  21. }

2、编写xml文件,SQL查询

在resources/mapper文件夹下新建一个UserMapper.xml文件,编写查询语句,代码如下(这里的xml路径一定要和application.properties配置文件中的路径一致)。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--
  6. namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离
  7. 注意:使用mapper代理方法开发,namespace有特殊重要的作用,namespace等于mapper接口地址
  8. -->
  9. <mapper namespace="com.mcy.springbootmybatis.mapper.UserMapper">
  10. <!-- 查询所有-->
  11. <select id="findAll" resultType="User">
  12. select * from tb_user
  13. </select>
  14. <!-- 根据姓名查询-->
  15. <select id="findByName" parameterType="User" resultType="User">
  16. select * from tb_user where name=#{name}
  17. </select>
  18. <!-- 根据用户名模糊查询-->
  19. <select id="findByUsernameLike" parameterType="User" resultType="User">
  20. select * from tb_user where username like "%"#{username}"%"
  21. </select>
  22. <!-- 根据id查询-->
  23. <select id="findById" parameterType="User" resultType="User">
  24. select * from tb_user where id = #{id}
  25. </select>
  26. <!--多条件动态查询-->
  27. <select id="find" parameterType="User" resultType="User">
  28. select * from tb_user where 1=1
  29. <if test="name != '' and name != null">
  30. and name =#{name}
  31. </if>
  32. <if test="username != '' and username != null">
  33. and username =#{username}
  34. </if>
  35. </select>
  36. <!-- 分页查询所有-->
  37. <select id="findByPageAll" parameterType="User" resultType="User">
  38. select * from tb_user limit #{offset},#{limit}
  39. </select>
  40. <!-- 增加 -->
  41. <insert id="addSave" parameterType="User">
  42. insert into tb_user values(null, #{name}, #{username}, #{password})
  43. </insert>
  44. <!-- 修改 -->
  45. <update id="update" parameterType="User">
  46. update tb_user set name=#{name}, username=#{username}, password=#{password}
  47. where id=#{id}
  48. </update>
  49. </mapper>

3、编写Mapper接口

UserMapper.java接口,代码如下(需要添加@Mapper注解,方法名需要额xml中的id值对应)。

  1. import com.mcy.springbootmybatis.entity.User;
  2. import org.apache.ibatis.annotations.Mapper;
  3. import java.util.List;
  4. @Mapper
  5. public interface UserMapper {
  6. //查询所有,方法名需要和UserMapper.xml中的id对应
  7. public List<User> findAll();
  8. //根据姓名查询
  9. public List<User> findByName(String name);
  10. //根据用户名模糊查询
  11. public List<User> findByUsernameLike(String username);
  12. //根据id查询
  13. public User findById(Integer id);
  14. //多条件动态查询
  15. public List<User> find(User user);
  16. //分页查询
  17. public List<User> findByPageAll(User user);
  18. //新增
  19. public void addSave(User user);
  20. //修改
  21. public void update(User user);
  22. }

3、编写业务层类

UserService.java业务层类。

  1. import com.mcy.springbootmybatis.entity.User;
  2. import com.mcy.springbootmybatis.mapper.UserMapper;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import java.util.List;
  6. @Service
  7. public class UserService {
  8. @Autowired
  9. private UserMapper userMapper;
  10. //查询所有,方法名需要和UserMapper.xml中的id对应
  11. public List<User> findAll(){
  12. return userMapper.findAll();
  13. };
  14. //根据姓名查询
  15. public List<User> findByName(String name){
  16. return userMapper.findByName(name);
  17. };
  18. //根据用户名模糊查询
  19. public List<User> findByUsernameLike(String username){
  20. return userMapper.findByUsernameLike(username);
  21. };
  22. //根据id查询
  23. public User findById(Integer id){
  24. return userMapper.findById(id);
  25. };
  26. //多条件动态查询
  27. public List<User> find(User user){
  28. return userMapper.find(user);
  29. };
  30. //分页查询
  31. public List<User> findByPageAll(User user){
  32. return userMapper.findByPageAll(user);
  33. };
  34. //新增
  35. public void addSave(User user){
  36. userMapper.addSave(user);
  37. };
  38. //修改
  39. public void update(User user){
  40. userMapper.update(user);
  41. };
  42. }

测试应用

1、编写测试Controller

访问控制器UserController.java类,代码如下。

  1. import com.mcy.springbootmybatis.entity.User;
  2. import com.mcy.springbootmybatis.service.UserService;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import java.util.List;
  7. @RestController
  8. @RequestMapping("/user")
  9. public class UserController {
  10. @Autowired
  11. private UserService userService;
  12. //查询所有,方法名需要和UserMapper.xml中的id对应
  13. @RequestMapping("/findAll")
  14. public List<User> findAll(){
  15. return userService.findAll();
  16. };
  17. //根据姓名查询
  18. @RequestMapping("/findByName")
  19. public List<User> findByName(String name){
  20. return userService.findByName(name);
  21. };
  22. //根据用户名模糊查询
  23. @RequestMapping("/findByUsernameLike")
  24. public List<User> findByUsernameLike(String username){
  25. return userService.findByUsernameLike(username);
  26. };
  27. //根据id查询用户对象
  28. @RequestMapping("/findById")
  29. public User findById(Integer id){
  30. return userService.findById(id);
  31. }
  32. //多条件动态查询
  33. @RequestMapping("/find")
  34. public List<User> find(User user){
  35. return userService.find(user);
  36. };
  37. //分页查询
  38. @RequestMapping("/findByPageAll")
  39. public List<User> findByPageAll(User user){
  40. return userService.findByPageAll(user);
  41. };
  42. //新增
  43. @RequestMapping("/addSave")
  44. public String addSave(){
  45. User user = new User();
  46. user.setName("张三");
  47. user.setUsername("admin");
  48. user.setPassword("admin");
  49. userService.addSave(user);
  50. user.setName("李四");
  51. user.setUsername("123456");
  52. user.setPassword("123456");
  53. userService.addSave(user);
  54. user.setName("王五");
  55. user.setUsername("user");
  56. user.setPassword("123456");
  57. userService.addSave(user);
  58. return "数据保存成功!";
  59. };
  60. //修改
  61. @RequestMapping("/update")
  62. public String update(){
  63. User user = userService.findById(1);
  64. user.setName("诸葛亮");
  65. userService.update(user);
  66. return "修改成功!";
  67. };
  68. }

2、测试应用

运行项目,在浏览器中访问http://localhost/user/addSave,调用添加方法,添加保存方法中对应的数据,执行成功后返回“数据保存成功!”,如图。

20191206224538980.png

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjA1MTE2_size_16_color_FFFFFF_t_70 3

测试查询所有方法,在浏览器中输入http://localhost/user/findAll,查询数据库中所有数据,如图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjA1MTE2_size_16_color_FFFFFF_t_70 4

测试修改方法,在浏览器中输入http://localhost/user/update,修改成功返回“修改成功!”,如图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjA1MTE2_size_16_color_FFFFFF_t_70 5

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjA1MTE2_size_16_color_FFFFFF_t_70 6

测试动态查询,在浏览器中输入http://localhost/user/find?name=李四,查询返回结果如图。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjA1MTE2_size_16_color_FFFFFF_t_70 7

测试分页查询,在浏览器中输入http://localhost/user/findByPageAll?offset=1&limit=2,从索引为1开始查询,查询3条数据,索引是从0开始的,查询结构如图。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwMjA1MTE2_size_16_color_FFFFFF_t_70 8

基本查询就这些了,有什么不足之处,欢迎大家指出,期待与你的交流。

发表评论

表情:
评论列表 (有 0 条评论,159人围观)

还没有评论,来说两句吧...

相关阅读