35

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

 5 years ago
source link: https://segmentfault.com/a/1190000018840729?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

vueUZzb.jpg!web

写在前面

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就会出现

yMfAzi3.png!web

接下来通过 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"}

3yqQfyf.png!web

JvAbIn3.png!web

  • 修改记录

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

vQvYR3Y.png!web

ErIFRjj.png!web

  • 删除记录

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

UzUBvqU.png!web

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

比如,按照名字来查询: 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 的多条记录:

aeuURrf.png!web

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

写在最后

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK