0-前言
mybatis plus是對mybatis的增強,集成mybatis plus后,簡單的CRUD和分頁就不用寫了,非常方便,五星推薦;
1-集成
1-1、添加依賴
<!-- 9、集成mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency>
1-2、配置文件增加配置
#mybatis-plus mybatis-plus.mapper-locations=classpath:mapper/*Mapper.xml mybatis-plus.type-aliases-package=com.anson.model mybatis-plus.configuration.map-underscore-to-camel-case=true
1-3、配置類中增加分頁bean
@Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); }
1-4、model(工具生成即可)
package com.anson.model; import java.io.Serializable; public class User implements Serializable { //---------------------------- private Integer id; private String username; private String password; private String realname; //--------------------------- public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username == null ? null : username.trim(); } public String getPassword() { return password; } public void setPassword(String password) { this.password = password == null ? null : password.trim(); } public String getRealname() { return realname; } public void setRealname(String realname) { this.realname = realname == null ? null : realname.trim(); } }
1-5、mapper(XML)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.anson.dao.UserMapper"> <resultMap id="BaseResultMap" type="com.anson.model.User"> <id column="id" jdbcType="INTEGER" property="id" /> <result column="userName" jdbcType="VARCHAR" property="username" /> <result column="passWord" jdbcType="VARCHAR" property="password" /> <result column="realName" jdbcType="VARCHAR" property="realname" /> </resultMap> <sql id="Base_Column_List"> id, userName, passWord, realName </sql> </mapper>
1-6、dao(mapper類),繼承 BaseMapper
package com.anson.dao; import com.anson.model.User; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import javafx.scene.control.Pagination; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import java.util.List; @Repository public interface UserMapper extends BaseMapper<User> { }
1-7、service 繼承 ServiceImpl
package com.anson.service; import com.anson.dao.UserMapper; import com.anson.model.User; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService extends ServiceImpl<UserMapper, User> { @Autowired UserMapper usermapper; }
1-8、controller
看見沒,以上基本沒有一行代碼,但是在controller我們已經可以直接使用增刪查改和分頁了
//-----------mybatis plus-------------------- //1、增 User user= new User(); user.setId(6); user.setUsername("anson"); user.setPassword("1236216"); user.setRealname("王琪琪"); userservice.save(user); } //2、刪
userservice.removeById(id); //3、查 User b =userservice.getById(id); //4、改 User update = new User(); update.setId(6); update.setUsername("alex2266"); userservice.updateById(update); } //5、分頁 IPage<User> page=new Page(1,3); page = userservice.page(page);
怎么樣,是不是很爽,項目中,只有少部分特殊的操作需要單獨寫SQL和方法,大部分CRUD都不需要寫了
2、注意的地方
mybatis中,對於下划線“_”,默認是轉換成大寫字母處理的,比如我們數據庫表字段“update_time”,mybatis會轉換成“updateTime”;
所以,為了避坑,直接給出強制建議(或者說結論):
1、數據庫表設計,不要采用大小寫,一律小寫,多個單詞組合采用下划線連接,如字段“update_time”、“edit_by”
2、model中,所有采用下划線的字段,轉換成駝峰大小寫,如:
“update_time” 在實體類中為:“updateTime”,
“edit_by” 在實體類中為: “editBy”
3、mybatis plus強大的條件構造器queryWrapper、updateWrapper
muybatis plus 可以通過條件構造器增加各種查詢和更新條件,有以下四種條件構造器(主要用后兩種,Lambda則看個人喜好):
LambdaQueryWrapper :看名稱也能明白就是用於Lambda語法使用的查詢Wrapper
LambdaUpdateWrapper : Lambda 更新封裝Wrapper
QueryWrapper : Entity 對象封裝操作類,不是用lambda語法
UpdateWrapper : Update 條件封裝,用於Entity對象更新操作
先貼張常用條件構造器函數圖(圖片來源於網絡):
例子:
//1、根據條件刪除 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper .isNull("username") .ge("id", 12) .isNotNull("realname"); boolean delete = userservice.remove(queryWrapper); //2、根據條件查詢 QueryWrapper<User> queryWrapper2 = new QueryWrapper<>(); queryWrapper2.eq("username", "eee"); User user = userservice.getOne(queryWrapper2); //3、根據條件查詢並分頁 Page<User> page2 = new Page<>(1, 5); QueryWrapper<User> queryWrapper3 = new QueryWrapper<>(); queryWrapper3.like("username", "a"); IPage<User> userIPage = userservice.page(page2, queryWrapper3); //4、根據條件更新 User user2 = new User(); user2.setRealname("zhangsan"); UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>(); userUpdateWrapper.eq("username", "eee"); boolean update = userservice.update(user, userUpdateWrapper);