• MyBatis-Plus入门案例


    MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率。

    • 开发方式
      • 基于MyBatis使用MyBatisPlus
      • 基于Spring使用MyBatisPlus
      • 基于SpringBoot使用MyBatisPlus

    SpringBoot它能快速构建Spring开发环境用以整合其他技术,使用起来是非常简单,对于MP也基于SpringBoot来构建的。

    回顾下,SpringBoot整合Mybatis的开发过程:

    • 创建SpringBoot工程

      在这里插入图片描述

      在这里插入图片描述

    • 勾选配置使用的技术,能够实现自动添加起步依赖包

      在这里插入图片描述

    • 设置dataSource相关属性(JDBC参数)

      在这里插入图片描述

    • 定义数据层接口映射配置

      在这里插入图片描述

    我们可以参考着上面的这个实现步骤把SpringBoot整合MyBatisPlus来快速实现下,具体的实现步骤为:

    步骤1:创建数据库及表

    CREATE TABLE `platform_user` (
      `user_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
      `email` varchar(60) NOT NULL DEFAULT '',
      `user_name` varchar(60) NOT NULL DEFAULT '',
      `branch_name` varchar(30) DEFAULT NULL,
      PRIMARY KEY (`user_id`) USING BTREE,
      KEY `idx_platform_user_id_name` (`user_name`) USING BTREE,
      KEY `idx_platform_user_email` (`email`) USING BTREE
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    步骤2:创建SpringBoot工程

    在这里插入图片描述

    步骤3:勾选配置使用技术

    在这里插入图片描述

    说明:

    • 由于MP并未被收录到idea的系统内置配置,无法直接选择加入,需要手动在pom.xml中配置添加

    步骤4:pom.xml补全依赖

    		<dependency>
    			<groupId>com.baomidougroupId>
    			<artifactId>mybatis-plus-boot-starterartifactId>
    			<version>3.5.2version>
    		dependency>
    		<dependency>
    			<groupId>com.alibabagroupId>
    			<artifactId>druidartifactId>
    			<version>1.2.11version>
    		dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    说明:

    • druid数据源可以加也可以不加,SpringBoot有内置的数据源,可以配置成使用Druid数据源

    • 从MP的依赖关系可以看出,通过依赖传递已经将MyBatis与MyBatis整合Spring的jar包导入,我们不需要额外在添加MyBatis的相关jar包

      在这里插入图片描述

    步骤5:添加MP的相关配置信息

    resources默认生成的是properties配置文件,可以将其替换成yml文件,并在文件中配置数据库连接的相关信息:application.yml

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
        username: root
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    说明:serverTimezone是用来设置时区,UTC是标准时区,和咱们的时间差8小时,所以可以将其修改为Asia/Shanghai

    步骤6:根据数据库表创建实体类

    @TableName(value = "platform_user")
    public class User {
        @TableId(value = "user_id",type = IdType.AUTO)
        private  Integer userId;
        private  String email;
        private  String userName;
        private  String branchName;
    
        public Integer getUserId() {
            return userId;
        }
    
        public void setUserId(Integer userId) {
            this.userId = userId;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getBranchName() {
            return branchName;
        }
    
        public void setBranchName(String branchName) {
            this.branchName = branchName;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "userId=" + userId +
                    ", email='" + email + '\'' +
                    ", userName='" + userName + '\'' +
                    ", branchName='" + branchName + '\'' +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    说明:Mybatis plus实体类属性与表字段不一致问题。

    • @TableName(value = "platform_user"),当数据库名与实体类名不一致或不符合驼峰命名 时,需要在此注解指定表名
    • @TableId(type = IdType.AUTO),指定实体类的属性为对应的主键
    • @TableField注解,主要用来解决实体类的字段名与数据库中的字段名不匹配的问题(数据库user_addr,字段useraddr未驼峰,mp默认开启驼峰 ),或者实体类中的属性字段在表中不存在的问题

    步骤7:创建Dao接口

    @Mapper
    public interface UserDao extends BaseMapper<User> {
    }
    
    • 1
    • 2
    • 3

    步骤8:编写引导类

    @SpringBootApplication
    //@MapperScan("com.dcxuexi.dao")
    public class SpringbootMp01FristApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SpringbootMp01FristApplication.class, args);
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    说明: Dao接口要想被容器扫描到,有两种解决方案:

    • 方案一:在Dao接口上添加@Mapper注解,并且确保Dao处在引导类所在包或其子包中
      • 该方案的缺点是需要在每一Dao接口中添加注解
    • 方案二:在引导类上添加@MapperScan注解,其属性为所要扫描的Dao所在包
      • 该方案的好处是只需要写一次,则指定包下的所有Dao接口都能被扫描到,@Mapper就可以不写。

    步骤9:编写测试类

    @SpringBootTest
    class MpDemoApplicationTests {
    
    	@Autowired
    	private UserDao userDao;
    	@Test
    	public void testGetAll() {
    		List<User> userList = userDao.selectList(null);
    		System.out.println(userList);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    说明:

    userDao注入的时候下面有红线提示的原因是什么?

    • UserDao是一个接口,不能实例化对象

    • 只有在服务器启动IOC容器初始化后,由框架创建DAO接口的代理对象来注入

    • 现在服务器并未启动,所以代理对象也未创建,IDEA查找不到对应的对象注入,所以提示报红

    • 一旦服务启动,就能注入其代理对象,所以该错误提示不影响正常运行。

    查看运行结果:

    在这里插入图片描述

    跟之前整合MyBatis相比,你会发现我们不需要在DAO接口中编写方法和SQL语句了,只需要继承BaseMapper接口即可。整体来说简化很多。


    项目代码

  • 相关阅读:
    力扣2861 补9.21
    常用面试/笔试开源小项目61~70
    金仓数据库KingbaseES物理备份恢复命令选项(stanza-delete命令)
    Spring和Netty整合详解
    拼图游游戏代码
    记录每天学习的新知识:Composing builds
    VoLTE端到端业务详解 | 应用案例二
    链表编程题题解
    缓存淘汰算法-LRU
    怎么注册微信小程序、微信小程序注册流程说明
  • 原文地址:https://blog.csdn.net/qq_37726813/article/details/127973467