美文网首页程序员spring boot
Mybatis-Plus 真好用(乡村爱情加持)

Mybatis-Plus 真好用(乡村爱情加持)

作者: CodeSheep | 来源:发表于2019-04-12 07:21 被阅读99次
    乡村爱情

    写在前面

    MyBatis的增强方案确实有不少,甚至有种感觉是现在如果只用 “裸MyBatis”,不来点增强插件都不好意思了。这不,在上一篇文章《Spring Boot项目利用MyBatis Generator进行数据层代码自动生成》 中尝试了一下 MyBatis Generator。这次来点更加先进的 Mybatis-Plus,SQL语句都不用写了,分页也是自动完成,嗯,真香!


    数据库准备

    CREATE TABLE tbl_user
    (
        user_id BIGINT(20) NOT NULL COMMENT '主键ID',
        user_name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
        user_age INT(11) NULL DEFAULT NULL COMMENT '年龄',
        PRIMARY KEY (user_id)
    ) charset = utf8;
    

    MyBatis-Plus加持

    • 工程搭建 (不赘述了)

    • 依赖引入

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.9</version>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
        <version>8.0.12</version>
    </dependency>
    

    主要是 Mybatis Plus、Lombok(不知道Lombok干嘛的?可以看这里)、Druid连接池 等依赖。

    • MyBatis Plus配置

    项目配置

    mybatis-plus:
      mapper-locations: classpath:/mapper/*Mapper.xml
    

    新增 MyBatis Plus配置类

    @Configuration
    @MapperScan("cn.codesheep.springbtmybatisplus.mapper")
    public class MyBatisConfig {
    }
    

    看到没,几乎零配置啊,下面就可以写业务逻辑了


    业务编写

    • 实体类
    @Data
    @TableName("tbl_user")
    public class User {
        @TableId(value = "user_id")
        private Long userId;
        private String userName;
        private Integer userAge;
    }
    
    • Mapper类
    public interface UserMapper extends BaseMapper<User> {
    }
    

    这里啥接口方法也不用写,就可以实现增删改查了!

    • Service类

    Service接口:

    public interface UserService extends IService<User> {
        int insertUser( User user );
        int updateUser( User user );
        int deleteUser( User user );
        User findUserByName( String userName );
        IPage getUserPage( Page page, User user );
    }
    

    Service实现:

    @Service
    @AllArgsConstructor
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    
        // 增
        @Override
        public int insertUser(User user) {
            return baseMapper.insert( user );
        }
    
        // 改
        @Override
        public int updateUser(User user) {
            return baseMapper.updateById( user );
        }
    
        // 删
        @Override
        public int deleteUser(User user) {
            return baseMapper.deleteById( user.getUserId() );
        }
    
        // 查
        @Override
        public User findUserByName( String userName ) {
            return baseMapper.getUserByName( userName );
        }
    }
    
    • Controller类
    @RestController
    @RequestMapping("/user")
    public class UserContorller {
    
        @Autowired
        private UserService userService;
    
        // 增
        @PostMapping( value = "/insert")
        public Object insert( @RequestBody User user ) {
            return userService.insertUser( user );
        }
    
        // 改
        @PostMapping( value = "/update")
        public Object update( @RequestBody User user ) {
            return userService.updateUser( user );
        }
    
        // 删
        @PostMapping( value = "/delete")
        public Object delete( @RequestBody User user ) {
            return userService.deleteUser( user );
        }
    
        // 查
        @GetMapping( value = "/getUserByName")
        public Object getUserByName( @RequestParam String userName ) {
            return userService.findUserByName( userName );
        }
    }
    

    通过以上几个简单的步骤,我们就实现了 tbl_user表的增删改查,传统 MyBatis的 XML文件一个都不需要写!


    实际实验【《乡爱》加持】

    • 启动项目

    很牛批的 logo就会出现

    Mybatis Plus Logo

    接下来通过 Postman来发送增删改查的请求

    • 插入记录

    通过 Postman随便插入几条记录 POST localhost:8089/user/insert

    {"userId":3,"userName":"刘能","userAge":"58"}
    {"userId":4,"userName":"赵四","userAge":"58"}
    {"userId":5,"userName":"谢广坤","userAge":"58"}
    {"userId":6,"userName":"刘大脑袋","userAge":"58"}
    
    发送插入请求 插入结果
    • 修改记录

    修改记录时需要带用户ID,比如我们修改 赵四 那条记录的名字为 赵四(Zhao Four)

    发送修改请求 修改结果
    • 删除记录

    修改记录时同样需要带用户ID,比如删除ID=6 那条 刘大脑袋的记录

    image.png
    • 查询记录(普通查询,下文讲分页查询)

    比如,按照名字来查询:GET localhost:8089/user/getUserByName?userName=刘能


    最关心的分页问题

    • 首先装配分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
    
    • Mapper类
    public interface UserMapper extends BaseMapper<User> {
    
        // 普通查询
        User getUserByName( String userName );
    
        // 分页查询
        IPage<List<User>> getUsersPage( Page page, @Param("query") User user );
    }
    
    • Service类
    @Service
    @AllArgsConstructor
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    
        // 查:普通查
        @Override
        public User findUserByName( String userName ) {
            return baseMapper.getUserByName( userName );
        }
    
        // 分页查
        @Override
        public IPage getUserPage(Page page, User user) {
            return baseMapper.getUsersPage( page, user );
        }
    }
    
    • Controller类
    @GetMapping( value = "/page")
    public Object getUserPage( Page page, User user ) {
        return userService.getUserPage( page, user );
    }
    

    实际实验一下,我们分页查询 年龄 = 58 的多条记录:

    分页查询结果

    可以看到结果数据中,除了给到当前页数据,还把总记录条数,总页数等一并返回了,很是优雅呢 !


    写在最后

    由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!



    相关文章

      网友评论

        本文标题:Mybatis-Plus 真好用(乡村爱情加持)

        本文链接:https://www.haomeiwen.com/subject/uixgyqtx.html