Mybatis Plus條件構造器QueryWrapper,UpdateWrapper

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的配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章