mybatis-plus基础入门

    技术2025-03-15  34

    1、启动类

    @SpringBootApplication //2.springBoot最为重要的入口注解 public class SpringBootRun { /** * 程序执行的过程: * 1.利用main方法执行springboot启动程序. * 2.程序加载@SpringBootApplication * @Target(ElementType.TYPE) 当前注解对类有效 @Retention(RetentionPolicy.RUNTIME) 在运行期改注解有效 @Documented 相关文档信息 @Inherited 可以被继承 --- 上述的注解是元注解 @SpringBootConfiguration springBoot的主启动类就是一个配置类 @EnableAutoConfiguration 开箱即用:只要导入指定的jar包文件,则可以自动的实现配置!!! @AutoConfigurationPackage //定义包扫描的路径信息 主启动类的包路径 以后写代码至少同包及子包中. @Import(AutoConfigurationImportSelector.class) 实现了开箱即用的功能 总结: springBoot中选择器的配置.扫描pom.xml文件中的jar包文件. 之后将jar包文件中的配置予以执行. AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware, ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered 说明: Aware是Spring框架从项目启动-到项目的效果的各个时期的接口. 了解: 加载第三方的类信息 @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) * * @param args */ public static void main(String[] args) { SpringApplication.run(SpringBootRun.class, args); } }

    1.2、MsgController类

    添加属性注入依赖–配置properties

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>

    MsgController

    @RestController @ConfigurationProperties(prefix="msg") //方法二 public class MsgController { /*方法一 * @Value 表示从spring容器中动态获取数据. * 通过spel表达式动态取值 * @Value("${msg.username}") * private String username; //用户名 * @Value("${msg.age}") * private Integer age; //用户名 */ /** //方法二@ConfigurationProperties(prefix="msg") 配合lombok的@data注解 * 批量为属性赋值,必须配合set方法才能赋值 */ private String username; //用户名 private Integer age; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @RequestMapping("/getMsg") public String getMsg() { //String str="springBoot测试方法"; return "返回结果:"+username+"+"+age; } }

    热部署

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>

    2.1、MsgController2

    配置getMsg2 main/resources/properties/msg.propertiies中添加代码

    msg.username2=凹凸曼打奥特曼 msg.age2=18

    MsgController2

    @RestController //默认条件下 使用ISO-8859-1的编码格式,所以中文乱码 @PropertySource(value="classpath:/properties/msg.propertiies",encoding="UTF-8") public class MsgController2 { @Value("${msg.username2}") private String username; //用户名 @Value("${msg.age2}") private Integer age; @RequestMapping("/getMsg2") public String getMsg() { //String str="springBoot测试方法"; return "返回结果:"+username+"+"+age; } }

    2.2、yml配置

    # 语法: 1. key-value结构 2.key和value之间使用:(空格)进行分割 # 2.YML配置文件有层级结构 spring: profiles: active: test #指定默认的环境策略 --- spring: profiles: prod server: port: 8090 servlet: context-path: / #项目发布路径信息 默认条件下 /根目录 # tomcat服务器进行发布 默认发布路径地址webapps目录下 #指定用户配置文件信息 msg: username: 小黑 age: 30 --- #环境分隔 spring: profiles: test server: port: 80 servlet: context-path: /test #项目发布路径信息 默认条件下 /根目录 #指定用户配置文件信息 msg: username: 老舒 age: 30

    2、SpringBoot整合Mybatis入门案例

    导入sql文件 或者手动导入如下: 打开cmd 命令: mysql -uroot -p***** 导入指令: source D:\jtdb.sql;

    2.1、创建项目springBootDemo2

    new 一个spring项目

    2.2、添加配置pom.xml

    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- parent标签作用:管理所有被SpringBoot整合的jar版本的定义 springboot特点:开箱即用, 映入jar包就可以添加相对应的功能定义了当前springboot2.3.1所有有关依赖的版本号信息 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.jt</groupId> <artifactId>springBootDemo2</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springBootDemo2</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <!-- 指定插件版本 --> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> <!-- 跳过测试类打包 --> <skipTests>true</skipTests> </properties> <dependencies> <!-- 在webjar包的内部关联了所有被springMVC的jar包信息. 定义了当前依赖包的版本 所以只需要引入一个jar包,则可以关联整合所有的有关mvc的依赖包信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <!-- 配置properties添加属性注入依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!-- 支持热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!--引入插件lombok 自动的set/get/构造方法插件 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- SpringBoot整合Mybatis --> <!--引入数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--springBoot数据库连接 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--spring整合mybatis 暂时 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> </dependencies> <!-- 负责打包更新maven操作相关配置,必须配置 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

    然后更新一下maven

    2.3、添加application.yml

    server: port: 80 servlet: context-path: / spring: datasource: #数据库驱动 高版本 com.mysql.cj.jdbc.Driver #低版本 com.mysql.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true username: root password: *** mybatis: #定义别名包 type-aliases-package: com.jt.pojo #添加映射文件 mapper-locations: classpath:/mybatis/mappers/*.xml #开启驼峰映射 configuration: map-underscore-to-camel-case: true

    serverTimezone=GMT%2B8 东8区 useUnicode=true&characterEncoding=utf8 使用指定的字符集编码 &autoReconnect=true 数据库连接断开之后,是否自动重连 &allowMultiQueries=true 是否允许批量操作sql语句. 一般查询居多 允许

    2.4、添加类

    建立User

    @Data @Accessors(chain = true) //开启链式加载结构 public class User { //属性一般都与表字段对应 private Integer id; private String name; private Integer age; private String sex; }

    建立UserMapper

    //@Mapper //将接口交给Spring容器管理,并且为其创建代理对象-->在启动类设置了 public interface UserMapper { //1.查询所有的用户表记录 @Select("select id,name,age,sex from user") List<User> findAll(); }

    在启动类添加

    //利用包扫描的形式 扫描指定包路径为接口创建代理对象 批量操作 @MapperScan("com.jt.mapper") //@mapper的包扫描类型

    2.5、测试

    @SpringBootTest //springBoot测试注解 开启了spring容器 public class TestMybatis { @Autowired private UserMapper userMapper; @Test public void findAll() { List<User> userList = userMapper.findAll(); System.out.println(userList); } }

    3、mybatis-plus入门

    CRUD

    crud是指在做计算处理时的增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能

    3.1、将application.yml中的mybatis 换成mybatis-plus

    <!--spring整合mybatis 暂时 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency>

    换成

    <!--spring整合mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency>

    3.2、关联User表

    @Data @Accessors(chain = true) //开启链式加载结构 @TableName //@TableName("user")与表名进行关联 如果名称一致,则可以不写(不分大小写) public class User { //属性一般都与表字段对应 @TableId(type= IdType.AUTO) //主键说明(自增标识AUTO) private Integer id; //@TableField(value = "name") //如果属性名称与字段一致(包含驼峰规则),则可以不写 private String name; private Integer age; private String sex; }

    3.3、继承BaseMapper

    如果泛型不引入,则数据库操作无法完成.

    public interface UserMapper extends BaseMapper<User> { //1.查询所有的用户表记录 @Select("select id,name,age,sex from user") List<User> findAll(); }

    3.4、添加日志

    顺便把mybatis改成mybatis-plus,其他不用改

    #Mybatis-plus整合 mybatis-plus: #定义别名包 type-aliases-package: com.jt.pojo #添加映射文件(xml文件的依赖) mapper-locations: classpath:/mybatis/mappers/*.xml #开启驼峰映射 configuration: map-underscore-to-camel-case: true #添加日志 logging: level: #mybatis指定mapper接口 以debug的形式展现日志. com.jt.mapper: debug

    3.5测试mybatis-plus

    @Test public void findAll() { List<User> userList = userMapper.selectList(null); System.out.println(userList); }

    新增

    @Test public void insert() { User user =new User(); user.setName("小小黑") .setAge(15) .setSex("女"); userMapper.insert(user); System.out.println("入库成功"); } /** * 查询API说明 * 案例:查询id=53的用户信息 */ @Test public void select01() { User user =userMapper.selectById(53); System.out.println(user); }

    查询API说明 案例:查询name=“孙尚香” sex=“女” 的用户 queryWrapper:条件构造器 拼接where条件 逻辑运算符 : =(eq),>(gt),<(lt),>=(ge),<=(le)

    @Test public void select02() { //1、利用对象封装参数,实现数据查询 User user =new User(); user.setName("孙尚香") .setSex("女"); //根据对象中不为null的元素拼接where条件,默认条件下使用and连接符 QueryWrapper<User> queryWrapper =new QueryWrapper<>(user); List<User> userList =userMapper.selectList(queryWrapper); System.out.println(userList); //2利用条件构造器构建where条件 QueryWrapper<User> queryWrapper2 =new QueryWrapper<>(user); queryWrapper2.eq("name", "孙尚香") .eq("sex", "女"); List<User> userList2 =userMapper.selectList(queryWrapper2); System.out.println(userList2); }

    查询用户age<18岁 或者 age>100岁

    @Test public void select03() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lt("age", 18) .or() .gt("age", 100); List<User> userList =userMapper.selectList(queryWrapper); System.out.println(userList); }

    查询id=1,3,6的用户

    @Test public void select04() { //1、通过API进行封装 List<Integer> list =new ArrayList<>(); list.add(1); list.add(3); list.add(6); List<User> userList =userMapper.selectBatchIds(list); System.out.println(userList); //2、条件构造器进行封装 QueryWrapper<User> queryWrapper=new QueryWrapper<User>(); queryWrapper.in("id", 1,3,6); List<User> userList1 = userMapper.selectList(queryWrapper); System.out.println(userList1); } @Test public void select05() { QueryWrapper<User> queryWrapper=new QueryWrapper<User>(); //queryWrapper.between("字段", "值1", "值2"); //queryWrapper.like("naem", "精"); //包含精字 %精% //queryWrapper.likeRight("naem", "精"); //以精开头 精% //queryWrapper.likeLeft("naem", "精"); //以精结尾 %精 //queryWrapper.groupBy("naem"); //分组查询 //queryWrapper.orderByDesc("age"); //倒序 //queryWrapper.orderByAsc("age"); //正序 //queryWrapper.between("age", "1", "100"); //1~100岁之间 //queryWrapper.lt("age", 18) //小于18岁 .or() //或 .gt("age", 100); //大于100岁 // 逻辑运算符 : =(eq),>(gt),<(lt),>=(ge),<=(le) List<User> userList = userMapper.selectList(queryWrapper); System.out.println(userList); }

    更多条件构造器 https://blog.csdn.net/SkyCloud_/article/details/108247234

    4、mybatis-plus

    MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

    4.1特性

    无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere ) 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

    4.2历史背景

    问题1: 现在操作的数据库任然采用 sql语句的方式进行编辑. 操作sql的方式实质就是面对过程的操作方式. 需求: 由于传统的sql 开发效率低,并且无论多么简单的sql都需要程序员自己编辑.很繁琐(无趣). 想法: 能否以面向对象的方式操作数据库!!!

    4.3JPA说明

    JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

    核心理念: 以面向对象的方式操作数据库.

    4.4MybatisPlus实现原理

    核心:

    表与对象建立关联关系 对象名称 ---------> 表名 对象的属性 -------> 数据表中的字段.采用第三方接口 规范所有的单表操作规则.(封装思想)将CURD接口方法,必须按照sql的规范转化为指定的sql语句.

    理论依据: userMapper.insert(user); //程序员只写到这里. sql: insert into 表名(字段名…) values (属性值…); 按照用户的调用发方法,动态拼接sql.之后交给Mybatis去执行. 拼接sql: insert into user表(字段A,字段B,字段C…) values (属性值A,属性B,属性C…);

    lombok配置

    引入插件lombok 自动的set/get/构造方法插件

    <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>

    1、如果要在Linux系统中运行java项目,不需要需要安装lombok插件 2、lombok:可以自动的生成get/set等方法.但是使用lombok时需要安装插件 3、lombok在程序编译期有效,当程序由.java文件编译为.class文件时,lombok插件开始工作.动态生成了get/set等方法. 而Linux中运行的项目直接.jar包文件里边包含了.class类型文件.所以不需要lombok插件再次编译即可运行.

    注意

    <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>

    配置文件写法

    1.YML文件写法 层级关系 空格 连接符:号 注意缩进. 2.pro文件 本身都是字符串不需要添加""号 注意字符集编码iso-8859-1 转化为utf-8 重新编辑. 负责打包更新maven操作相关配置,必须配置(springboot会自动配置)

    属性赋值

    目的:动态配置属性信息. 方式2: 取值前提: 先赋值,再取值 1.@value spel表达式 2@ConfigurationProperties(prefix = “msg”) 一般配合@data注解. 指定配置文件进行加载. @PropertySource(“classpath:/xxxxxxxx.properties”)

    环境切换

    spring.profiles: prod 定义环境名称 spring.profiles.active: prod 指定默认的环境

    Processed: 0.023, SQL: 9