Mapper層的創建
如果想使用Mybatis-Plus的CRUD接口,我們必須要創建Mapper層,原理如下圖所示:
我們繼承 BaseMapper后,就可以使用MP為我們提供的各種 CRUD方法。具體如何調用可以直接參考官方網站給出的示例,下面展示UsersMapper接口,這個接口用於人員管理的各種CRUD。
@Mapper public interface UsersMapper extends BaseMapper<Users> { }
可以看到,我們並沒有實現BaseMapper中的任何方法,這是因為BaseMapper里的方法都是已經實現好的,只要添加泛型就可以對某個Entity進行操作。@Mapper注解表明這是一個Mapper接口,可以讓主程序進行MapperScan的時候,把該接口視為一個Mapper攔截下來。
當然我們也可以不繼承BaseMapper,自己寫SQL語句,比如下面這個例子:
@Mapper public interface Inter { @select("select * from sysuser where userid=#{id} and uanme=#{userName}") int queryUserByid(@param("id") int id,@param("userName") String uname);
//param注解里寫上sql語句中的占位符,表面把對應參數傳給sql語句中
@Select("select * from sysuser where userid=#{userid} or username=#{username}")
List<Sysuser> selectUser(Sysuser u);
//通過實體類里的屬性,注入到sql語句中的 userid 和 username }
寫一下 Mapper 常用的方法:
1. insert 插入方法
int affectRows = trainMapper.insert(train);
向數據庫中插入一個對象,返回值是影響的行數(也就是1)
2. updateById方法
int affectRows = trainMapper.updateById(train);
這個方法可以根據傳入對象的id,來找到數據庫中對應的行,然后把傳入的信息覆蓋到原先的信息上。好處就是能根據id自動尋找到對應的行,返回值是影響的行數。
3. selectOne方法
companyQueryWrapper.eq("id", train.getCompanyId()) .eq("status", CompanyResult.STATUS_EXIST); Company company = companyMapper.selectOne(companyQueryWrapper);
根據傳入的QueryWrapper,在數據庫中找出一個符合的對象並返回,如果沒有則返回null。
4. selectList方法
QueryWrapper<Train> trainQueryWrapper = new QueryWrapper<>(); trainQueryWrapper.eq("company_id", users.getCompanyId()) .eq("status", TrainResult.STATUS_EXIST) .ge("end_time", System.currentTimeMillis()); //trainList為空不報錯 List<Train> trainList = trainMapper.selectList(trainQueryWrapper);
根據傳入的QueryWrapper,在數據庫中找出多個符合的對象,並返回一個List,如果沒有則返回一個空的List ( [] ),而不是null。
5. selectCount方法
trainRecordsQueryWrapper.eq("train_id", train.getId()) .eq("status", TrainRecordsResult.SIGN_UP); Long signUpNums = trainRecordsMapper.selectCount(trainRecordsQueryWrapper); trainDto.setSignUpNums(signUpNums);
根據傳入的QueryWrapper,統計數據庫中有多少條數據符合,返回這些數據的數量。