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;
工程搭建 (不赘述了)
依赖引入
<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 干嘛的?[可以看这里]( https://www.codesheep.cn/2018/04/09/SpringBoot 优雅编码之:Lombok 加持 /))、Druid 连接池 等依赖。
项目配置
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; }
public interface UserMapper extends BaseMapper<User> { }
这里啥接口方法也不用写,就可以实现增删改查了!
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 ); } }
@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 就会出现
接下来通过 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 那条 刘大脑袋
的记录
比如,按照名字来查询:GET localhost:8089/user/getUserByName?userName=刘能
@Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); }
public interface UserMapper extends BaseMapper<User> { // 普通查询 User getUserByName( String userName ); // 分页查询 IPage<List<User>> getUsersPage( Page page, @Param("query") User user ); }
@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 ); } }
@GetMapping( value = "/page") public Object getUserPage( Page page, User user ) { return userService.getUserPage( page, user ); }
实际实验一下,我们分页查询 年龄 = 58
的多条记录:
可以看到结果数据中,除了给到当前页数据,还把总记录条数,总页数等一并返回了,很是优雅呢 !
由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!
![]() | 1 jiezhi 2019-04-12 07:52:40 +08:00 via iPhone 很详细,虽然不是后端开发,还是要收藏支持一下 |
2 zeromake 2019-04-12 08:11:27 +08:00 via Android ![]() 等一个 aipjson 的兄弟 |
![]() | 3 abcbuzhiming 2019-04-12 09:39:11 +08:00 mybatis-plus 是我目前见过的,最符合 active-record 和链式调用的模型,除了不支持 join,这一点是个遗憾,隔壁的 JOOQ 能支持简单的 join。 至于 Apijson 啊,我用过这个东西,我只能说,它对整个 web 链条嵌入过深了,它如果专注数据层,受欢迎程度要大的多,某种程度上这东西满足了前端操控后端的梦想,但是对整个 web 请求链条的过度干预注定了这东西在后端流行不起来的。 |
![]() | 4 sagaxu 2019-04-12 09:41:56 +08:00 via Android ![]() jdbcTemplate 真香 |
5 cyhulk 2019-04-12 11:01:43 +08:00 我不管,我就喜欢写 xml |
![]() | 6 unique 2019-04-12 11:20:17 +08:00 via iPhone 非常棒的框架,后排支持 |
7 colinzhang 2019-05-22 13:21:13 +08:00 @zeromake 哈哈哈哈 |