1,條件構造器的方法以及格式說明:
wapper介紹 :
1,Wrapper : 條件構造抽象類,最頂端父類,抽象類中提供4個方法西面貼源碼展示
2,AbstractWrapper : 用於查詢條件封裝,生成 sql 的 where 條件
3,AbstractLambdaWrapper : Lambda 語法使用 Wrapper統一處理解析 lambda 獲取 column。
4,LambdaQueryWrapper :看名稱也能明白就是用於Lambda語法使用的查詢Wrapper
5,LambdaUpdateWrapper : Lambda 更新封裝Wrapper
6,QueryWrapper : Entity 對象封裝操作類,不是用lambda語法
7,UpdateWrapper : Update 條件封裝,用於Entity對象更新操作
2,導入maven依賴
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
3,實體類映射
@TableName("t_test")
public class UserDTO {
@TableId(value = "id",type = IdType.AUTO)
private Integer id;
@TableField("name")
private String name;
@TableField("hobby")
private String hobby;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "UserDTO{" +
"id=" + id +
", name='" + name + '\'' +
", hobby='" + hobby + '\'' +
'}';
}
}
以實體類映射數據庫表,UserDTO–>t_test,當用實體類User DTO封裝作爲返回值的時候,會映射t_test的表作爲查詢,否則會找不到數據庫表,如果是沒有使用@Table(“t_test”)註解,那麼mybatis plus會把默認實體類類名轉換爲下劃線名作爲表名去查詢,UserDTO–>user_d_t_o,當然如果數據庫沒有這個表,那麼就會查詢失敗
4,Mapper接口類繼承BaseMapper
@Mapper
public interface UserMapper extends BaseMapper<UserDTO> {
}
讓我們康康BaseMapper裏面都有些啥:
/**
* Mapper 繼承該接口後,無需編寫 mapper.xml 文件,即可獲得CRUD功能
* <p>這個 Mapper 支持 id 泛型</p>
*
* @author hubin
* @since 2016-01-23
*/
public interface BaseMapper<T> {
/**
* 插入一條記錄
*
* @param entity 實體對象
*/
int insert(T entity);
/**
* 根據 ID 刪除
*
* @param id 主鍵ID
*/
int deleteById(Serializable id);
/**
* 根據 columnMap 條件,刪除記錄
*
* @param columnMap 表字段 map 對象
*/
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
/**
* 根據 entity 條件,刪除記錄
*
* @param wrapper 實體對象封裝操作類(可以爲 null)
*/
int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
/**
* 刪除(根據ID 批量刪除)
*
* @param idList 主鍵ID列表(不能爲 null 以及 empty)
*/
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
/**
* 根據 ID 修改
*
* @param entity 實體對象
*/
int updateById(@Param(Constants.ENTITY) T entity);
/**
* 根據 whereEntity 條件,更新記錄
*
* @param entity 實體對象 (set 條件值,可以爲 null)
* @param updateWrapper 實體對象封裝操作類(可以爲 null,裏面的 entity 用於生成 where 語句)
*/
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
/**
* 根據 ID 查詢
*
* @param id 主鍵ID
*/
T selectById(Serializable id);
/**
* 查詢(根據ID 批量查詢)
*
* @param idList 主鍵ID列表(不能爲 null 以及 empty)
*/
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
/**
* 查詢(根據 columnMap 條件)
*
* @param columnMap 表字段 map 對象
*/
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
/**
* 根據 entity 條件,查詢一條記錄
*
* @param queryWrapper 實體對象封裝操作類(可以爲 null)
*/
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* 根據 Wrapper 條件,查詢總記錄數
*
* @param queryWrapper 實體對象封裝操作類(可以爲 null)
*/
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* 根據 entity 條件,查詢全部記錄
*
* @param queryWrapper 實體對象封裝操作類(可以爲 null)
*/
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* 根據 Wrapper 條件,查詢全部記錄
*
* @param queryWrapper 實體對象封裝操作類(可以爲 null)
*/
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* 根據 Wrapper 條件,查詢全部記錄
* <p>注意: 只返回第一個字段的值</p>
*
* @param queryWrapper 實體對象封裝操作類(可以爲 null)
*/
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* 根據 entity 條件,查詢全部記錄(並翻頁)
*
* @param page 分頁查詢條件(可以爲 RowBounds.DEFAULT)
* @param queryWrapper 實體對象封裝操作類(可以爲 null)
*/
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
/**
* 根據 Wrapper 條件,查詢全部記錄(並翻頁)
*
* @param page 分頁查詢條件
* @param queryWrapper 實體對象封裝操作類
*/
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
}
BaseMapper裏面的方法基本是滿足查詢類,但是join是不支持的
5,測試類
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@RunWith(SpringRunner.class)
public class TestMain {
@Autowired
private UserMapper userMapper;
@Autowired
private UserMapper2 userMapper2;
@Test
public void fun1(){
UserDTO userDTO = userMapper.selectOne(new QueryWrapper<UserDTO>().eq("id", 1));
System.err.println(userDTO);
}
/**
* TTest是沒有用註解的,爲了能查詢成功,類名得和表名對應
*/
@Test
public void fun2(){
List<TTest> tTests = userMapper2.selectList(new QueryWrapper<TTest>());
for (TTest tTest : tTests) {
System.err.println(tTest);
}
}
@Test
public void fun3(){
UserDTO userDTO = new UserDTO();
userDTO.setHobby("拳擊");
int id = userMapper.update(userDTO, new UpdateWrapper<UserDTO>().eq("id", 2));
System.err.println(id);
}
}
查詢成功,沒有使用xml的配置