• mybatisplus入门


    快速入门

    创建表

    创建数据库haoke

    CREATE TABLE `user` (
    `id` bigint(20) NOT NULL COMMENT '主键ID', `name` varchar(30) DEFAULT NULL COMMENT '姓名', `age` int(11) DEFAULT NULL COMMENT '年龄', `email` varchar(50) DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
    -- 插入数据 
    INSERT INTO `user` (`id`, `name`, `age`, `email`) VALUES ('1', 'Jone', '18', 'test1@baomidou.com'); INSERT INTO `user` (`id`, `name`, `age`, `email`) VALUES ('2', 'Jack', '20', 'test2@baomidou.com'); INSERT INTO `user` (`id`, `name`, `age`, `email`) VALUES ('3', 'Tom', '28', 'test3@baomidou.com'); INSERT INTO `user` (`id`, `name`, `age`, `email`) VALUES ('4', 'Sandy', '21', 'test4@baomidou.com'); INSERT INTO `user` (`id`, `name`, `age`, `email`) VALUES ('5', 'Billie', '24', 'test5@baomidou.com');
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    创建工程以及导入依赖

    groupid:cn.itcast.mybatisplus
    artifactid:itcast-mybatis-plus

    
    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
    
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.1.0.RELEASEversion>
        parent>
    
        <groupId>cn.itcast.mybatisplusgroupId>
        <artifactId>itcast-mybatis-plusartifactId>
        <version>1.0-SNAPSHOTversion>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starterartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
            
            <dependency>
                <groupId>com.baomidougroupId>
                <artifactId>mybatis-plus-boot-starterartifactId>
                <version>3.0.5version>
            dependency>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>5.1.47version>
            dependency>
            
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <optional>trueoptional>
                <version>1.18.4version>
            dependency>
        dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
            plugins>
        build>
    
    
    project>
    
    • 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
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    编写application.properties文件

    spring.application.name = itcast-mybatis-plus
    
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://192.168.58.136:3306/haoke?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
    spring.datasource.username=root
    spring.datasource.password=root
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    创建User对象

    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableId;
    import lombok.Data;
    
    @Data
    public class User {
    
        @TableId(value = "ID", type = IdType.AUTO)
        private Long id;
        private String name;
        private Integer age;
        private String email;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    编写UserMapper

    import cn.itcast.mybatisplus.pojo.User;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    
    public interface UserMapper extends BaseMapper<User> {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    编写springboot启动类

    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    
    @MapperScan("cn.itcast.mybatisplus.mapper") //设置mapper接口的扫描包
    @SpringBootApplication
    public class MyApplication {
    
        /**
         * 分页插件
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    编写单元测试用例

    import cn.itcast.mybatisplus.pojo.User;
    import com.baomidou.mybatisplus.core.conditions.Wrapper;
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.List;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserMaperTest {
    	 @Autowired
        private UserMapper userMapper;
    
        @Test
        public void testSelect(){
            List<User> users = this.userMapper.selectList(null);
            for (User user : users) {
                System.out.println(user);
            }
        }
    }
    
    • 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

    在这里插入图片描述
    测试结果
    在这里插入图片描述

    BaseMapper

    在MybatisPlus中,BaseMapper中定义了一些常用的CRUD方法,当我们自定义的Mapper接口继承BaseMapper后即可拥有了这些方法。

    /**
    * 

    * Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能 *

    *

    * 这个 Mapper 支持 id 泛型 *

    * * @author hubin * @since 2016-01-23 */
    public interface BaseMapper<T> { /** *

    * 插入一条记录 *

    * * @param entity 实体对象 */
    int insert(T entity); /** *

    * 根据 ID 删除 *

    * * @param id 主键ID */
    int deleteById(Serializable id); /** *

    * 根据 columnMap 条件,删除记录 *

    * * @param columnMap 表字段 map 对象 */
    int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); /** *

    * 根据 entity 条件,删除记录 *

    * * @param queryWrapper 实体对象封装操作类(可以为 null) */
    int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** *

    * 删除(根据ID 批量删除) *

    * * * @param idList 主键ID列表(不能为 null 以及 empty) */
    int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); /** *

    * 根据 ID 修改 *

    * * @param entity 实体对象 */
    int updateById(@Param(Constants.ENTITY) T entity); /** *

    * 根据 whereEntity 条件,更新记录 *

    * * @param entity 实体对象 (set 条件值,不能为 null) * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) */
    int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper); /** *

    * 根据 ID 查询 *

    * * @param id 主键ID */
    T selectById(Serializable id); /** *

    * 查询(根据ID 批量查询) *

    * * @param idList 主键ID列表(不能为 null 以及 empty) */
    List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); /** *

    * 查询(根据 columnMap 条件) *

    * * @param columnMap 表字段 map 对象 */
    List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); /** *

    * 根据 entity 条件,查询一条记录 *

    * * @param queryWrapper 实体对象 */
    T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** *

    * 根据 Wrapper 条件,查询总记录数 *

    * * @param queryWrapper 实体对象 */
    Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** *

    * 根据 entity 条件,查询全部记录 *

    * * @param queryWrapper 实体对象封装操作类(可以为 null) */
    List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** *

    * 根据 Wrapper 条件,查询全部记录 *

    * * @param queryWrapper 实体对象封装操作类(可以为 null) */
    List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** *

    * 根据 Wrapper 条件,查询全部记录 * 注意: 只返回第一个字段的值 *

    * * @param queryWrapper 实体对象封装操作类(可以为 null) */
    List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** *

    * 根据 entity 条件,查询全部记录(并翻页) * *

    * * @param page 分页查询条件(可以为 RowBounds.DEFAULT) * @param queryWrapper 实体对象封装操作类(可以为 null) */
    IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** *

    * 根据 Wrapper 条件,查询全部记录(并翻页) *

    * * @param page 分页查询条件 * @param queryWrapper 实体对象封装操作类 */
    IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
    • 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
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160

    like查询

    @Test
        public void testSelectByLike(){
            QueryWrapper<User> wrapper = new QueryWrapper<User>();
            wrapper.like("name", "o");
            List<User> list = this.userMapper.selectList(wrapper);
            for (User user : list) {
                System.out.println(user);
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    条件查询

    @Test
        public void testSelectByLe(){
            QueryWrapper<User> wrapper = new QueryWrapper<User>();
            wrapper.le("age", 20);
            List<User> list = this.userMapper.selectList(wrapper);
            for (User user : list) {
                System.out.println(user);
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    插入数据

     @Test
        public void testSave(){
            User user = new User();
            user.setAge(25);
            user.setEmail("zhangsan@qq.com");
            user.setName("zhangsan");
            int count = this.userMapper.insert(user);
            System.out.println("新增数据成功! count => " + count);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    设置自增长id

    public class User {
    
        @TableId(value = "ID", type = IdType.AUTO)
        private Long id;
        private String name;
        private Integer age;
        private String email;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    删除数据

        @Test
        public void testDelete(){
            this.userMapper.deleteById(7L);
            System.out.println("删除成功!");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改数据

    根据id修改数据,修改不为null的字段

    @Test
        public void testUpdate(){
            User user = new User();
            user.setId(6L);
            user.setName("lisi");
            this.userMapper.updateById(user);
            System.out.println("修改成功!");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    分页查询

    首先需要在启动类上配置分页插件:

    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.Bean;
    
    @MapperScan("cn.itcast.mybatisplus.mapper") //设置mapper接口的扫描包
    @SpringBootApplication
    public class MyApplication {
    
        /**
         * 分页插件
         */
        @Bean
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    进行查询

     @Test
        public void testSelectPage() {
            Page<User> page = new Page<>(2, 2);
            IPage<User> userIPage = this.userMapper.selectPage(page, null);
            System.out.println("总条数 ------> " + userIPage.getTotal());
            System.out.println("当前页数 ------> " + userIPage.getCurrent());
            System.out.println("当前每页显示数 ------> " + userIPage.getSize());
            List<User> records = userIPage.getRecords();
            for (User user : records) {
                System.out.println(user);
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    配置

    虽然在MybatisPlus中可以实现零配置,但是有些时候需要我们自定义一些配置,就需要使用Mybatis原生的一些配置文件方式了。
    application.properties:

    # 指定全局配置文件
    mybatis-plus.config-location = classpath:mybatis-config.xml
    # 指定mapper.xml文件
    mybatis-plus.mapper-locations = classpath*:mybatis/*.xml
    
    • 1
    • 2
    • 3
    • 4

    Lombok

    lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码,尤其是针对pojo,在MybatisPlus中使用lombok

    配置安装

    导入依赖:

    
    <dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <optional>trueoptional>
    <version>1.18.4version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    安装IDEA插件:
    在这里插入图片描述

    常用注解

    @Data:注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、
    hashCode、toString 方法
    @Setter:注解在属性上;为属性提供 setting 方法
    @Getter:注解在属性上;为属性提供 getting 方法
    @Slf4j:注解在类上;为类提供一个 属性名为log 的 slf4j日志对象
    @NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
    @AllArgsConstructor:注解在类上;为类提供一个全参的构造方法
    @Builder:使用Builder模式构建对象

    @Slf4j
    @Data
    @AllArgsConstructor
    @Builder
    public class Item {
    
        private Long id;
        private String title;
        private Long price;
    
        public Item() {
            log.info("写日志。。。。。");
        }
    
        public static void main(String[] args) {
            Item item =  Item.builder().price(100L)
                    .title("hello").id(1L).build();
            
            System.out.println(item);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    使用lombok改造User对象

    将前面测试的User对象进行改造。

    @Data
    public class User {
    
        @TableId(value = "ID", type = IdType.AUTO)
        private Long id;
        private String name;
        private Integer age;
        private String email;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    源代码

    链接:https://pan.baidu.com/s/1pr57SuwWi9mL5_sTT0Unjw?pwd=b14o
    提取码:b14o
    –来自百度网盘超级会员V3的分享

  • 相关阅读:
    Joe主题魔改:正文内容实现图片懒加载
    小程序获取用户手机号码
    C++:红黑树
    LeGo-LOAM 跑通与源码学习
    VN5620以太网测试——DoIP配置
    Autoware.universe部署06:使用DBC文件进行UDP的CAN通信代码编写
    flyway的快速入门教程
    qt day
    CYarp:力压frp的C#高性能http内网反代中间件
    真真正正的九面阿里才定级 P6+ 支持背调,还不来看?(建议收藏)
  • 原文地址:https://blog.csdn.net/peacezhi/article/details/126032433