0


Spring Boot 和 MyBatis-Plus 的简单整合

1. 引言

MyBatis是一个强大且稳定的持久层解决方案,也是众多java程序员入门的首选,而MyBatis-Plus是MyBatis 的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。

有人会将MyBatis和Hibernate放在一起比较,其实明显感觉MyBatis-Plus正在向全自动的ORM框架进发,有可能这才是主流的方向。

  • 请事先准备一个可以访问的MySQL数据库,记录下访问连接,用户名,密码。

2. 创建项目

创建一个名为mybatis-plus-demo的项目,使用Maven+JDK17。不会的请看 IntelliJ IDEA快速创建Spring Boot项目,最终项目结构,如下图。
在这里插入图片描述

3. 编写代码

根据最终项目结构,从下往上依次列出各个文件的代码。

3.1 pom.xml

这里用的springboot3.x的版本,对应的MySQL驱动需要mysql-connector-j。修改完成后,更新maven,等待资源下载完成。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>mybatis-plus-demo</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <properties>
  10. <maven.compiler.source>17</maven.compiler.source>
  11. <maven.compiler.target>17</maven.compiler.target>
  12. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  13. </properties>
  14. <!-- 为Spring Boot项目提供一系列默认的配置和依赖管理-->
  15. <parent>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-parent</artifactId>
  18. <version>3.3.2</version>
  19. <relativePath/>
  20. </parent>
  21. <dependencies>
  22. <!-- Spring Boot核心依赖-->
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter</artifactId>
  26. </dependency>
  27. <!-- Spring Boot单元测试和集成测试的依赖-->
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. </dependency>
  33. <!-- Spring Boot构建Web应用程序的依赖-->
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-starter-web</artifactId>
  37. </dependency>
  38. <!-- mysql驱动-->
  39. <dependency>
  40. <groupId>com.mysql</groupId>
  41. <artifactId>mysql-connector-j</artifactId>
  42. </dependency>
  43. <!-- mybatis-plus核心依赖-->
  44. <dependency>
  45. <groupId>com.baomidou</groupId>
  46. <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
  47. <version>3.5.7</version>
  48. </dependency>
  49. </dependencies>
  50. </project>

3.2 application.properties

需要配置好自己的数据库连接,用户名,密码。

  1. #数据库连接
  2. spring.datasource.url=jdbc:mysql://localhost:3306/test1
  3. #数据库用户名
  4. spring.datasource.username=您的数据库用户名
  5. #数据库密码
  6. spring.datasource.password=您的数据库密码
  7. #显示sql
  8. mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

3.3 mapper/UserMapper.xml

注意namespace的值对应org/example/mapper/UserMapper.java,这个是一一对应的,不要写错了。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="org.example.mapper.UserMapper">
  4. <select id="selectAllPage" parameterType="java.util.Map" resultType="java.util.Map">
  5. select * from t_user_test
  6. <where>
  7. <if test="param.name != null and param.name != ''">
  8. INSTR(CONCAT(IFNULL(name,'')),#{param.name})>0
  9. </if>
  10. </where>
  11. </select>
  12. </mapper>

3.4 org/example/Main.java

这个是启动类,注意@MapperScan的值对应org/example/mapper,这个是一一对应的,不要写错了。

  1. package org.example;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.transaction.annotation.EnableTransactionManagement;
  6. @EnableTransactionManagement // 启用事务管理
  7. @MapperScan("org.example.mapper") // 扫描mapper
  8. @SpringBootApplication
  9. public class Main {
  10. public static void main(String[] args) {
  11. SpringApplication.run(Main.class, args);
  12. }
  13. }

3.5 org/example/mapper/UserMapper.java

注意selectAllPage方法和UserMapper.xml中的节点需要一一对应。

  1. package org.example.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import org.apache.ibatis.annotations.MapKey;
  5. import org.apache.ibatis.annotations.Param;
  6. import org.example.entity.User;
  7. import java.util.List;
  8. import java.util.Map;
  9. public interface UserMapper extends BaseMapper<User> {
  10. @MapKey("")
  11. List<Map<String, Object>> selectAllPage(Page<?> page, @Param("param") Map<String, Object> param);
  12. }

3.6 org/example/entity/User.java

这个就是实体类,与数据库中的表对应。

  1. package org.example.entity;
  2. import com.baomidou.mybatisplus.annotation.*;
  3. import java.util.Date;
  4. @TableName("t_user_test")
  5. public class User {
  6. @TableId(type = IdType.ASSIGN_ID)
  7. private Long id;
  8. private String name;
  9. private String phone;
  10. @TableField(fill = FieldFill.INSERT)
  11. private Date createTime;
  12. @TableField(fill = FieldFill.INSERT_UPDATE)
  13. private Date updateTime;
  14. public Long getId() {
  15. return id;
  16. }
  17. public void setId(Long id) {
  18. this.id = id;
  19. }
  20. public String getName() {
  21. return name;
  22. }
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26. public String getPhone() {
  27. return phone;
  28. }
  29. public void setPhone(String phone) {
  30. this.phone = phone;
  31. }
  32. public Date getCreateTime() {
  33. return createTime;
  34. }
  35. public void setCreateTime(Date createTime) {
  36. this.createTime = createTime;
  37. }
  38. public Date getUpdateTime() {
  39. return updateTime;
  40. }
  41. public void setUpdateTime(Date updateTime) {
  42. this.updateTime = updateTime;
  43. }
  44. }

3.7 org/example/controller/UserController.java

UserController类用于测试,正常情况下还需要创建service层,在service层操作数据库,但是这里为了方便测试,就直接在controller层操作数据库。
注意@Transactional是事务注解,增、删、改数据时,需要加上这个注解才能使用事务功能。

  1. package org.example.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import org.example.entity.User;
  5. import org.example.mapper.UserMapper;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.transaction.annotation.Transactional;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.ResponseBody;
  11. import java.util.Date;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. @Controller
  16. @RequestMapping("/UserController")
  17. public class UserController {
  18. @Autowired
  19. private UserMapper userMapper;
  20. @RequestMapping(value = "/insert")
  21. @ResponseBody
  22. @Transactional
  23. public Object insert() {
  24. for (int i = 0; i < 20; i++) {
  25. User user = new User();
  26. user.setName("张"+i);
  27. user.setPhone(new Date().getTime()+"");
  28. userMapper.insert(user);
  29. }
  30. return "数据插入成功";
  31. }
  32. @RequestMapping(value = "/listAll")
  33. @ResponseBody
  34. public Object listAll() {
  35. QueryWrapper<User> q = new QueryWrapper<>();
  36. q.like("name", "张1");
  37. List<User> list = userMapper.selectList(q);
  38. return list;
  39. }
  40. @RequestMapping(value = "/listPage")
  41. @ResponseBody
  42. public Object list() {
  43. Page<?> page = new Page<>(1, 3);
  44. Map<String, Object> param = new HashMap<>();
  45. param.put("name", "张");
  46. List<Map<String, Object>> list = userMapper.selectAllPage(page, param);
  47. return list;
  48. }
  49. }

3.8 org/example/conf/MyMetaObjectHandler.java

  1. package org.example.conf;
  2. import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  3. import org.apache.ibatis.reflection.MetaObject;
  4. import org.springframework.stereotype.Component;
  5. import java.util.Date;
  6. /*
  7. MyBatis-Plus 提供了一个便捷的自动填充功能,用于在插入或更新数据时自动填充某些字段,如创建时间、更新时间等
  8. */
  9. @Component
  10. public class MyMetaObjectHandler implements MetaObjectHandler {
  11. @Override
  12. public void insertFill(MetaObject metaObject) {
  13. this.setFieldValByName("createTime", new Date(), metaObject);
  14. this.setFieldValByName("updateTime", new Date(), metaObject);
  15. }
  16. @Override
  17. public void updateFill(MetaObject metaObject) {
  18. this.setFieldValByName("updateTime", new Date(), metaObject);
  19. }
  20. }

3.9 org/example/conf/MybatisPlusConfig.java

  1. package org.example.conf;
  2. import com.baomidou.mybatisplus.annotation.DbType;
  3. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  4. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. /*
  8. MyBatis-Plus 配置
  9. */
  10. @Configuration
  11. public class MybatisPlusConfig {
  12. /**
  13. * 添加分页插件
  14. */
  15. @Bean
  16. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  17. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  18. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
  19. return interceptor;
  20. }
  21. }

4,运行代码

4.1 创建数据库和表

首先使用您的数据库工具,在MySQL中创建一个数据库test1,与application.properties中的配置的数据库相对应。然后再创建表t_user_test,表名与User.java中@TableName的值对应。字段名与User.java的属性相对应,这里的字段名默认将驼峰命名转下划线命名。

  1. CREATE TABLE t_user_test (
  2. id bigint(20) NOT NULL,
  3. name varchar(255) DEFAULT NULL,
  4. phone varchar(255) DEFAULT NULL,
  5. create_time datetime DEFAULT NULL,
  6. update_time datetime DEFAULT NULL,
  7. PRIMARY KEY (`id`)
  8. );

在这里插入图片描述

4.2 启动项目

在Main上右键Run,启动项目,可以看到端口是8080。
在这里插入图片描述

4.3 新增数据

打开浏览器访问http://localhost:8080/UserController/insert,可以看到页面上打印“数据插入成功”,刚好和UserController类中的代码功能一致,同时控制台也打印出了insert语句,说明调用成功。
在这里插入图片描述在这里插入图片描述

4.4 查询数据

打开浏览器访问http://localhost:8080/UserController/listAll,可以看到页面上返回了所有包含“张1”的数据,刚好和UserController类中的代码功能一致。
在这里插入图片描述在这里插入图片描述

4.5 整合成功

打开数据库工具,查看t_user_test表中的数据,和刚才新增的数据一致。自此Spring Boot和MyBatis-Plus简单整合完成。
在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_40718345/article/details/141166042
版权归原作者 D_J_Dragon 所有, 如有侵权,请联系我们删除。

“Spring Boot 和 MyBatis-Plus 的简单整合”的评论:

还没有评论