寫在前面
MyBatis的增強(qiáng)方案確實(shí)有不少昧辽,甚至有種感覺是現(xiàn)在如果只用 “裸MyBatis”奴迅,不來點(diǎn)增強(qiáng)插件都不好意思了取具。這不暇检,在上一篇文章《Spring Boot項(xiàng)目利用MyBatis Generator進(jìn)行數(shù)據(jù)層代碼自動(dòng)生成》 中嘗試了一下 MyBatis Generator。這次來點(diǎn)更加先進(jìn)的 Mybatis-Plus婉称,SQL語句都不用寫了块仆,分頁也是自動(dòng)完成构蹬,嗯,真香悔据!
數(shù)據(jù)庫準(zhǔn)備
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加持
工程搭建 (不贅述了)
依賴引入
com.baomidou
mybatis-plus-boot-starter
3.1.0
org.projectlombok
lombok
com.alibaba
druid-spring-boot-starter
1.1.9
mysql
mysql-connector-java
runtime
8.0.12
主要是 Mybatis Plus庄敛、Lombok(不知道Lombok干嘛的?可以看這里)科汗、Druid連接池 等依賴藻烤。
MyBatis Plus配置
項(xiàng)目配置
mybatis-plus:
mapper-locations: classpath:/mapper/*Mapper.xml
新增 MyBatis Plus配置類
@Configuration
@MapperScan("cn.codesheep.springbtmybatisplus.mapper")
public class MyBatisConfig {
}
看到?jīng)],幾乎零配置啊头滔,下面就可以寫業(yè)務(wù)邏輯了
業(yè)務(wù)編寫
實(shí)體類
@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 {
}
這里啥接口方法也不用寫兴猩,就可以實(shí)現(xiàn)增刪改查了!
Service類
Service接口:
public interface UserService extends IService {
int insertUser( User user );
int updateUser( User user );
int deleteUser( User user );
User findUserByName( String userName );
IPage getUserPage( Page page, User user );
}
Service實(shí)現(xiàn):
@Service
@AllArgsConstructor
public class UserServiceImpl extends ServiceImpl 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 );
}
}
通過以上幾個(gè)簡單的步驟,我們就實(shí)現(xiàn)了 tbl_user表的增刪改查,傳統(tǒng) MyBatis的 XML文件一個(gè)都不需要寫奶躯!
實(shí)際實(shí)驗(yàn)【《鄉(xiāng)愛》加持】
啟動(dòng)項(xiàng)目
很牛批的 logo就會(huì)出現(xiàn)
接下來通過 Postman來發(fā)送增刪改查的請求
插入記錄
通過 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"}
修改記錄
修改記錄時(shí)需要帶用戶ID疼邀,比如我們修改 趙四 那條記錄的名字為 趙四(Zhao Four)
刪除記錄
修改記錄時(shí)同樣需要帶用戶ID吉嚣,比如刪除ID=6 那條 劉大腦袋的記錄
查詢記錄(普通查詢较解,下文講分頁查詢)
比如啡捶,按照名字來查詢:GET localhost:8089/user/getUserByName?userName=劉能
最關(guān)心的分頁問題
首先裝配分頁插件
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
Mapper類
public interface UserMapper extends BaseMapper {
// 普通查詢
User getUserByName( String userName );
// 分頁查詢
IPage> getUsersPage( Page page, @Param("query") User user );
}
Service類
@Service
@AllArgsConstructor
public class UserServiceImpl extends ServiceImpl 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 );
}
實(shí)際實(shí)驗(yàn)一下了赌,我們分頁查詢 年齡 = 58 的多條記錄:
可以看到結(jié)果數(shù)據(jù)中逢并,除了給到當(dāng)前頁數(shù)據(jù),還把總記錄條數(shù)玻蝌,總頁數(shù)等一并返回了,很是優(yōu)雅呢 !