• Mybatis-Plus从入门到入土


    目录

    一、介绍

    二、特性

    三、架构

    四、 使用mybatis进行User查询

    1.创建工程

    2.配置pom.xml

    3.创建子模块

    4.编写mybatis-config.xml

    5.编写User对象

    6.编写UserMapper接口

    7.编写UserMapper.xml

    8.编写测试用例​​​​​​​

    五、使用Mybatis+MybatisPlus查询User

    1.UserMapper继承BaseMapper

    2.User对象类加上对表的引用

    3.使用MP中的MybatisSqlSessionFactoryBuilder进程构建

    六、Spring+Mybatis+MP查询User

    1.创建子模块

    2.在子模块的pom.xml中导入依赖

    3.编写jdbc.properties

    4.编写applicationContext.xml

    5.编写User对象

    6.编写UserMapper接口

    7.编写测试用例

    七、SpringBoot+Mybatis+MP查询User

    1.创建spring工程

    2.导入依赖pom.xml

    3.编写application.properties

    4.编写pojo

    5.编写mapper

    6.编写启动类

    7.编写测试用例

    八、基于springboot的其余CRUD

    1.插入

    @TableId主键策略

    @TableField

    2.更新

    3.删除

    4.查询

    九、Mybatis-Plus对Service的封装

    1.创建service接口

    2.实现service接口

    3.调用


    一、介绍

    Mybatis-Plus是Mybatis的增强工具,只增强不改变,为简化开发,提高效率

    二、特性

    损耗小

    强大的CRUD操作

    支持lambda形式调用

    支持多种数据库

    支持主键自动生成

    ……

    三、架构

    四、 使用mybatis进行User查询

    1.创建工程

    2.配置pom.xml

    1. "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.0modelVersion>
    6. <groupId>com.mpgroupId>
    7. <artifactId>mybatis_mpartifactId>
    8. <packaging>pompackaging>
    9. <version>1.0-SNAPSHOTversion>
    10. <build>
    11. <plugins>
    12. <plugin>
    13. <groupId>org.apache.maven.pluginsgroupId>
    14. <artifactId>maven-compiler-pluginartifactId>
    15. <version>3.8.1version>
    16. <configuration>
    17. <source>1.8source>
    18. <target>1.8target>
    19. configuration>
    20. plugin>
    21. plugins>
    22. build>
    23. <modules>
    24. <module>mybatismodule>
    25. modules>
    26. <properties>
    27. <maven.compiler.source>8maven.compiler.source>
    28. <maven.compiler.target>8maven.compiler.target>
    29. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    30. properties>
    31. <dependencies>
    32. <dependency>
    33. <groupId>com.baomidougroupId>
    34. <artifactId>mybatis-plusartifactId>
    35. <version>3.5.2version>
    36. dependency>
    37. <dependency>
    38. <groupId>mysqlgroupId>
    39. <artifactId>mysql-connector-javaartifactId>
    40. <version>8.0.30version>
    41. dependency>
    42. <dependency>
    43. <groupId>com.alibabagroupId>
    44. <artifactId>druidartifactId>
    45. <version>1.2.15version>
    46. dependency>
    47. <dependency>
    48. <groupId>org.projectlombokgroupId>
    49. <artifactId>lombokartifactId>
    50. <version>1.18.24version>
    51. dependency>
    52. <dependency>
    53. <groupId>junitgroupId>
    54. <artifactId>junitartifactId>
    55. <version>4.13.2version>
    56. dependency>
    57. <dependency>
    58. <groupId>org.slf4jgroupId>
    59. <artifactId>slf4j-apiartifactId>
    60. <version>2.0.5version>
    61. dependency>
    62. dependencies>
    63. project>

    3.创建子模块

    4.编写mybatis-config.xml

    1. "1.0" encoding="UTF-8" ?>
    2. configuration
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    5. <configuration>
    6. <environments default="development">
    7. <environment id="development">
    8. <transactionManager type="JDBC"/>
    9. <dataSource type="POOLED">
    10. <property name="driver" value="com.mysql.jdbc.Driver"/>
    11. <property name="url" value="jdbc:mysql://127.0.0.1:3306/zxkt?
    12. useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQuerie
    13. s=true&useSSL=false"/>
    14. <property name="username" value="root"/>
    15. <property name="password" value="1234"/>
    16. dataSource>
    17. environment>
    18. environments>
    19. <mappers>
    20. <mapper resource="UserMapper.xml"/>
    21. mappers>
    22. configuration>

    5.编写User对象

    1. package com.mp.pojo;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. @Data
    6. @NoArgsConstructor
    7. @AllArgsConstructor
    8. public class User {
    9. private long id;
    10. private String user_name;
    11. private String password;
    12. private String name;
    13. private Integer age;
    14. private String email;
    15. }

    6.编写UserMapper接口

    1. package com.mp.mapper;
    2. import com.mp.pojo.User;
    3. import java.util.List;
    4. public interface UserMapper {
    5. List findAll();
    6. }

    7.编写UserMapper.xml

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.mp.mapper.UserMapper">
    6. <select id="findAll" resultType="com.mp.pojo.User">
    7. select * from tb_user
    8. select>
    9. mapper>

    8.编写测试用例

    1. import com.mp.mapper.UserMapper;
    2. import com.mp.pojo.User;
    3. import org.apache.ibatis.io.Resources;
    4. import org.apache.ibatis.session.SqlSession;
    5. import org.apache.ibatis.session.SqlSessionFactory;
    6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    7. import org.junit.Test;
    8. import java.io.IOException;
    9. import java.io.InputStream;
    10. import java.util.List;
    11. public class test_mybatis {
    12. @Test
    13. public void testFindAll() throws IOException {
    14. String config = "mybatis-config.xml";
    15. InputStream inputStream = Resources.getResourceAsStream(config);
    16. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    17. SqlSession sqlSession = sqlSessionFactory.openSession();
    18. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    19. List users = userMapper.findAll();
    20. for(User user : users) {
    21. System.out.println(user);
    22. }
    23. }
    24. }

    五、使用Mybatis+MybatisPlus查询User

    在上述Mybatis的基础上做如下修改

    1.UserMapper继承BaseMapper

    1. public interface UserMapper extends BaseMapper{
    2. List findAll();
    3. }

    2.User对象类加上对表的引用

    1. package com.mp.pojo;
    2. import com.baomidou.mybatisplus.annotation.TableName;
    3. import lombok.AllArgsConstructor;
    4. import lombok.Data;
    5. import lombok.NoArgsConstructor;
    6. @Data
    7. @NoArgsConstructor
    8. @AllArgsConstructor
    9. @TableName("tb_user") //这一行需要加上,否则会查不到表
    10. public class User {
    11. private long id;
    12. private String userName;
    13. private String password;
    14. private String name;
    15. private Integer age;
    16. private String email;
    17. }

    3.使用MP中的MybatisSqlSessionFactoryBuilder进程构建

    1. public class TestMybatisPlus {
    2. @Test
    3. public void testUserList() throws Exception{
    4. String resource = "mybatis-config.xml";
    5. InputStream inputStream = Resources.getResourceAsStream(resource);
    6. //这里使用的是MP中的MybatisSqlSessionFactoryBuilder
    7. SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(inputStream);
    8. SqlSession sqlSession = sqlSessionFactory.openSession();
    9. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    10. // 可以调用BaseMapper中定义的方法
    11. List list = userMapper.selectList(null);
    12. for (User user : list) {
    13. System.out.println(user);
    14. }
    15. }

    六、Spring+Mybatis+MP查询User

    1.创建子模块

    2.在子模块的pom.xml中导入依赖

    1. "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. <parent>
    6. <artifactId>mybatis_mpartifactId>
    7. <groupId>com.mpgroupId>
    8. <version>1.0-SNAPSHOTversion>
    9. parent>
    10. <modelVersion>4.0.0modelVersion>
    11. <artifactId>mybatis_mp_springartifactId>
    12. <properties>
    13. <maven.compiler.source>8maven.compiler.source>
    14. <maven.compiler.target>8maven.compiler.target>
    15. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    16. <spring.version>5.1.6.RELEASEspring.version>
    17. properties>
    18. <dependencies>
    19. <dependency>
    20. <groupId>org.springframeworkgroupId>
    21. <artifactId>spring-webmvcartifactId>
    22. <version>${spring.version}version>
    23. dependency>
    24. <dependency>
    25. <groupId>org.springframeworkgroupId>
    26. <artifactId>spring-jdbcartifactId>
    27. <version>${spring.version}version>
    28. dependency>
    29. <dependency>
    30. <groupId>org.springframeworkgroupId>
    31. <artifactId>spring-testartifactId>
    32. <version>${spring.version}version>
    33. dependency>
    34. dependencies>
    35. project>

    3.编写jdbc.properties

    1. jdbc.driver=com.mysql.jdbc.Driver
    2. jdbc.url=jdbc:mysql://127.0.0.1:3306/tb_user?
    3. useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL
    4. =false
    5. jdbc.username=root
    6. jdbc.password=1234

    4.编写applicationContext.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xsi:schemaLocation="http://www.springframework.org/schema/beans
    6. http://www.springframework.org/schema/beans/spring-beans.xsd
    7. http://www.springframework.org/schema/context
    8. http://www.springframework.org/schema/context/spring-context.xsd">
    9. <context:property-placeholder location="classpath:*.properties"/>
    10. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
    11. destroy-method="close">
    12. <property name="url" value="${jdbc.url}"/>
    13. <property name="username" value="${jdbc.username}"/>
    14. <property name="password" value="${jdbc.password}"/>
    15. <property name="driverClassName" value="${jdbc.driver}"/>
    16. <property name="maxActive" value="10"/>
    17. <property name="minIdle" value="5"/>
    18. bean>
    19. <bean id="sqlSessionFactory"
    20. class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    21. <property name="dataSource" ref="dataSource"/>
    22. bean>
    23. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    24. <property name="basePackage" value="cn.itcast.mp.simple.mapper"/>
    25. bean>
    26. beans>

    5.编写User对象

    1. package com.mp.pojo;
    2. import com.baomidou.mybatisplus.annotation.TableName;
    3. import lombok.AllArgsConstructor;
    4. import lombok.Data;
    5. import lombok.NoArgsConstructor;
    6. @Data
    7. @NoArgsConstructor
    8. @AllArgsConstructor
    9. @TableName("tb_user")
    10. public class User {
    11. private long id;
    12. private String userName;
    13. private String password;
    14. private String name;
    15. private Integer age;
    16. private String email;
    17. }

    6.编写UserMapper接口

    1. package com.mp.mapper;
    2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    3. import com.mp.pojo.User;
    4. import java.util.List;
    5. public interface UserMapper extends BaseMapper {
    6. List findAll();
    7. }

    7.编写测试用例

    1. @RunWith(SpringJUnit4ClassRunner.class)
    2. @ContextConfiguration(locations = "classpath:applicationContext.xml")
    3. public class TestSpringMP {
    4. @Autowired
    5. private UserMapper userMapper;
    6. @Test
    7. public void testSelectList(){
    8. List users = this.userMapper.selectList(null);
    9. for (User user : users) {
    10. System.out.println(user);
    11. }
    12. }
    13. }

    七、SpringBoot+Mybatis+MP查询User

    1.创建spring工程

    2.导入依赖pom.xml

    1. "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.0modelVersion>
    5. <parent>
    6. <groupId>org.springframework.bootgroupId>
    7. <artifactId>spring-boot-starter-parentartifactId>
    8. <version>2.2.2.RELEASEversion>
    9. <relativePath/>
    10. parent>
    11. <groupId>com.mpgroupId>
    12. <artifactId>SpringBoot_MPartifactId>
    13. <version>0.0.1-SNAPSHOTversion>
    14. <name>SpringBoot_MPname>
    15. <description>SpringBoot_MPdescription>
    16. <properties>
    17. <java.version>1.8java.version>
    18. properties>
    19. <dependencies>
    20. <dependency>
    21. <groupId>org.springframework.bootgroupId>
    22. <artifactId>spring-boot-starterartifactId>
    23. dependency>
    24. <dependency>
    25. <groupId>org.springframework.bootgroupId>
    26. <artifactId>spring-boot-starter-testartifactId>
    27. <scope>testscope>
    28. <exclusions>
    29. <exclusion>
    30. <groupId>org.junit.vintagegroupId>
    31. <artifactId>junit-vintage-engineartifactId>
    32. exclusion>
    33. exclusions>
    34. dependency>
    35. <dependency>
    36. <groupId>org.projectlombokgroupId>
    37. <artifactId>lombokartifactId>
    38. <optional>trueoptional>
    39. dependency>
    40. <dependency>
    41. <groupId>com.baomidougroupId>
    42. <artifactId>mybatis-plus-boot-starterartifactId>
    43. <version>3.1.1version>
    44. dependency>
    45. <dependency>
    46. <groupId>mysqlgroupId>
    47. <artifactId>mysql-connector-javaartifactId>
    48. <version>5.1.47version>
    49. dependency>
    50. <dependency>
    51. <groupId>org.slf4jgroupId>
    52. <artifactId>slf4j-log4j12artifactId>
    53. dependency>
    54. <dependency>
    55. <groupId>junitgroupId>
    56. <artifactId>junitartifactId>
    57. <scope>testscope>
    58. dependency>
    59. dependencies>
    60. <build>
    61. <plugins>
    62. <plugin>
    63. <groupId>org.apache.maven.pluginsgroupId>
    64. <artifactId>maven-compiler-pluginartifactId>
    65. <version>3.8.1version>
    66. <configuration>
    67. <source>1.8source>
    68. <target>1.8target>
    69. <encoding>UTF-8encoding>
    70. configuration>
    71. plugin>
    72. <plugin>
    73. <groupId>org.springframework.bootgroupId>
    74. <artifactId>spring-boot-maven-pluginartifactId>
    75. plugin>
    76. plugins>
    77. build>
    78. project>

    3.编写application.properties

    1. spring.application.name = SpringBoot_MP
    2. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    3. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zxkt?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
    4. spring.datasource.username=root
    5. spring.datasource.password=1234

    4.编写pojo

    1. package com.mp.pojo;
    2. import com.baomidou.mybatisplus.annotation.TableName;
    3. import lombok.AllArgsConstructor;
    4. import lombok.Data;
    5. import lombok.NoArgsConstructor;
    6. @Data
    7. @NoArgsConstructor
    8. @AllArgsConstructor
    9. @TableName("tb_user")
    10. public class User {
    11. private Long id;
    12. private String userName;
    13. private String password;
    14. private String name;
    15. private Integer age;
    16. private String email;
    17. }

    5.编写mapper

    1. package com.mp.mapper;
    2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    3. import com.mp.pojo.User;
    4. import org.springframework.stereotype.Repository;
    5. @Repository
    6. public interface UserMapper extends BaseMapper {
    7. }

    6.编写启动类

    1. package com.mp;
    2. import org.mybatis.spring.annotation.MapperScan;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.WebApplicationType;
    5. import org.springframework.boot.autoconfigure.SpringBootApplication;
    6. import org.springframework.boot.builder.SpringApplicationBuilder;
    7. @MapperScan("com.mp.mapper") //设置mapper接口的扫描包
    8. @SpringBootApplication
    9. public class MyApplication {
    10. public static void main(String[] args) {
    11. SpringApplication.run(MyApplication.class, args);
    12. }
    13. }

    7.编写测试用例

    1. package com.mp;
    2. import com.mp.mapper.UserMapper;
    3. import com.mp.pojo.User;
    4. import org.junit.Test;
    5. import org.junit.runner.RunWith;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.boot.test.context.SpringBootTest;
    8. import org.springframework.test.context.junit4.SpringRunner;
    9. import java.util.List;
    10. @RunWith(SpringRunner.class)
    11. @SpringBootTest
    12. public class UserMapperTest {
    13. @Autowired
    14. private UserMapper userMapper;
    15. @Test
    16. public void testSelect() {
    17. List userList = userMapper.selectList(null);
    18. for (User user : userList) {
    19. System.out.println(user);
    20. }
    21. }
    22. }

    八、基于springboot的其余CRUD

    1.插入

    1. //返回的result是受影响的行数
    2. int result = usermapper.insert(user);

    @TableId主键策略

    放在对象类中,想设为主键的属性上方

    AUTO是自增长(数据库中的表的对应id需要设为AUTO_INCREMENT)

    NONE无策略

    INPUT手动输入

     

    @TableField

    通过@TableField可以注解指定字段的一些属性

    在对象类中进行注解

    1. //解决字段名不一致
    2. @TableField(value = "email")
    3. private String mail;
    1. //该字段在数据库表中不存在
    2. @TableField(exist = false)
    3. private String address;
    1. //该字段不加入查询字段
    2. @TableField(selece = false)
    3. private String password;

    2.更新

    ①根据id更新

    1. public void testUpdateById() {
    2. User user = new User();
    3. user.setId(6L); //主键
    4. user.setAge(21); //更新的字段
    5. //根据id更新,更新不为null的字段
    6. this.userMapper.updateById(user);
    7. }

    ②根据条件更新

    1. public void testUpdate() {
    2. User user = new User();
    3. user.setAge(22); //更新的字段
    4. //更新的条件
    5. QueryWrapper wrapper = new QueryWrapper<>();
    6. wrapper.eq("id", 6);
    7. //执行更新操作
    8. int result = this.userMapper.update(user, wrapper);
    9. System.out.println("result = " + result);
    10. }

    3.删除

    ①deleteById

    userMapper.deleteById(6L);

    ②deleteByMap

    1. public void testDeleteByMap() {
    2. Map columnMap = new HashMap<>();
    3. columnMap.put("age",20);
    4. columnMap.put("name","张三");
    5. //将columnMap中的元素设置为删除的条件,多个之间为and关系
    6. int result = this.userMapper.deleteByMap(columnMap);
    7. System.out.println("result = " + result);
    8. }

    ③delete

    1. public void testDeleteByMap() {
    2. User user = new User();
    3. user.setAge(20);
    4. user.setName("张三");
    5. //将实体对象进行包装,包装为操作条件
    6. QueryWrapper wrapper = new QueryWrapper<>(user);
    7. int result = this.userMapper.delete(wrapper);
    8. System.out.println("result = " + result);
    9. }

    ④批量删除

    userMapper.deleteBatchIds(Arrays.asList(1L,10L,20L));

    4.查询

    ①selectById

    userMapper.selectById(2L);

    ②selectBatchlds

    1. List users = this.userMapper.selectBatchIds(Arrays.asList(2L, 3L, 10L));
    2. for (User user : users) {
    3. System.out.println(user);
    4. }

    ③selectOne

    1. QueryWrapper wrapper = new QueryWrapper();
    2. wrapper.eq("name", "李四");
    3. //根据条件查询一条数据,如果结果超过一条会报错
    4. User user = this.userMapper.selectOne(wrapper);

    ④selectCount

    1. QueryWrapper wrapper = new QueryWrapper();
    2. wrapper.gt("age", 23); //年龄大于23岁
    3. //根据条件查询数据条数
    4. Integer count = this.userMapper.selectCount(wrapper);

    ⑤selectList

    1. QueryWrapper wrapper = new QueryWrapper();
    2. wrapper.gt("age", 23); //年龄大于23岁
    3. //根据条件查询数据
    4. List users = this.userMapper.selectList(wrapper);
    5. for (User user : users) {
    6. System.out.println("user = " + user);
    7. }

    ⑥selectPage

    创建config包,在其中创建config对象如下

    配置分页插件

    1. @Configuration
    2. @MapperScan("com.mp.mapper") //设置mapper接口的扫描包
    3. public class MybatisPlusConfig {
    4. /**
    5. * 分页插件
    6. */
    7. @Bean
    8. public PaginationInterceptor paginationInterceptor() {
    9. return new PaginationInterceptor();
    10. }
    11. }
    1. QueryWrapper wrapper = new QueryWrapper();
    2. wrapper.gt("age", 20); //年龄大于20岁
    3. //第一个参数是当前页,第二个是每页显示记录数
    4. Page page = new Page<>(1,1);
    5. //根据条件查询数据
    6. IPage iPage = this.userMapper.selectPage(page, wrapper);
    7. System.out.println("数据总条数:" + iPage.getTotal());
    8. System.out.println("总页数:" + iPage.getPages());
    9. List users = iPage.getRecords();
    10. for (User user : users) {
    11. System.out.println("user = " + user);
    12. }

    九、Mybatis-Plus对Service的封装

    1.创建service接口

    1. public interface UserService extends IService{
    2. }

    2.实现service接口

    1. @Service
    2. public UserServiceImpl extends ServiceImpl implements UserService{
    3. }

    3.调用

    1. @AutoWored
    2. private UserService userService;
    3. @Test
    4. public void testQuery() {
    5. List list = userService.list();
    6. System.out.prinlt(list);
    7. }

  • 相关阅读:
    Day725.Java为何需要模块化 -Java8后最重要新特性
    python中dateutil库用法详解
    反射与枚举
    PHP——爬虫DOM解析
    MindSpore:一文带你入门虚拟遗憾最小化CFR算法
    一个完全解耦的时间片轮询框架构
    PTE-靶场训练-1
    MFC工程的MFC库使用方式与运行时库不一致引起的编译问题
    一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill
    算法通过村第十二关-字符串|青铜笔记|隐形的王者
  • 原文地址:https://blog.csdn.net/qq_57689612/article/details/128193589