/**
* 1.傳遞的參數如果是實體類
* <p>
* 注:這種情況傳遞過來的參數是等值的也就是=
* 如果不想等值,例如:like '條件'
* 在實體類中,需要處理屬性的上面添加@TableField(condition ="%s<#{%s}")
* <p>
* 裏面的condition,可以採用已經有的栗子,如果沒有符合你需求的,
* 可以參考SqlCondition(比較條件常量定義類)它的形式,仿寫除符合自己需求的condition
* <p>
* 例如:age 小於 條件
* age < '傳過來的條件'
*
* @TableField(condition ="%s<,#{%s}")
* age
*/
@Test
public void selectByWrapperEntity() {
User whereUser = new User();
whereUser.setName("劉雨紅");
whereUser.setAge(32);
QueryWrapper<User> queryWrapper = new QueryWrapper<User>(whereUser);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/*
sql形式:SELECT id,name,age,email,manager_id,create_time FROM user WHERE name=? AND age=?
不等值的sql:SELECT id,name,age,email,manager_id,create_time FROM user WHERE name LIKE CONCAT('%',?,'%') AND age<?
*/
/**
* 2.傳遞的參數如果是實體類和參數條件同時存在,這種情況互不影響,條件都會拼接在where後邊
* <p>
* 注意:不要重複了
*/
@Test
public void selectByWrapperEntity2() {
User whereUser = new User();
whereUser.setName("劉雨紅");
whereUser.setAge(32);
QueryWrapper<User> queryWrapper = new QueryWrapper<>(whereUser);
queryWrapper.like("name", "雨").lt("age", 40);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/*
sql形式:SELECT id,name,age,email,manager_id,create_time FROM user
WHERE name=? AND age=? AND name LIKE ? AND age < ?
*/
@Data
public class User {
// 主鍵
private Long id;
//姓名
@TableField(condition = SqlCondition.LIKE)
private String name;
//年齡
@TableField(condition ="%s<#{%s}")
private Integer age;
//郵箱
private String email;
// 上級id
private Long manager_id;
//創建時間
private LocalDateTime createTime;
}