-
刪除操作
public class MyBatisPlusDeleteTest{
@Autowired
private UserMapper userMapper;
@Test
public void deleteById(){
Integer rows = userMapper.deleteById(10001);
System.out.println("刪除條數(shù):" + rows);
}
@Test
public void deleteByMap(){
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("name", "張無忌");
columnMap.put("age", 31);
? ? ? ? //DELETE FROM user WHERE name = '張無忌' AND age = 31
Integer rows = userMapper.deleteByMap(columnMap);
System.out.println("刪除條數(shù):" + rows);
}
? ? //帶條件構(gòu)造器的刪除方法
@Test
public void deleteByWrapper(){
LambdaQueryWrapper<User> wrapper = Wrappers.<User>lambdaQuery();
wrapper.eq(User::getAge, 27).or().gt(User::getAge, 41);
? ? ? ? //刪除多條
? ? ? ? //DELETE FROM user WHERE age = 27 or age > 41
Integer rows = userMapper.delete(deleteByWrapper);
System.out.println("刪除條數(shù):" + rows);
}
}
查看全部 -
MyBatisPlus 的更新方法
public class MyBatisPlusUpdateTest{
@Autowired
private UserMapper userMapper;
? ? //根據(jù)updateById方法進行更新
? ? @Test
? ? public void updateByIds(){
? ? User user = new User();
? ? user.setId(10001);
? ? ? ? user.setAge(23);
? ? ? ? user.setName("龍在天涯");
? ? ? ? user.setEmail("37635636756@163.com");
? ? ? ? Integer rows = userMapper.updateById(user);
? ? ? ? System.out.println("影響記錄數(shù):" + rows);
? ? }
? ? @Test
? ? public void updateByWrapper(){
? ? UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>();
? ? updateWrapper.eq("name", "張無忌").eq("age", 28);? ?//where 表達式
? ? ? ??
? ? ? ? // UPDATE user SET age = 25 , email = 'uyddhjdhgg@163.com' WHERE name = '張無忌' and age = 28
? ? User user = new User();
? ? user.setEmail("uyddhjdhgg@163.com");
? ? user.setAge(25);
? ? Integer rows = userMapper.update(user, updateWrapper);
? ? ? ? System.out.println("影響記錄數(shù):" + rows);
? ? }
? ? @Test
? ? public void updateByWrapper1(){
? ? ? ? User whereUser = new User();
? ? whereUser.setId(10002);
? ? UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>(whereUser);? //將實體傳遞給條件構(gòu)造器
? ? updateWrapper.eq("name", "張無忌").eq("age", 28);? ?//where 表達式
? ? ? ??
? ? ? ? // UPDATE user SET age = 25 , email = 'uyddhjdhgg@163.com' WHERE name = '張無忌' and age = 28
? ? User user = new User();
? ? user.setEmail("uyddhjdhgg@163.com");
? ? user.setAge(25);
? ? Integer rows = userMapper.update(user, updateWrapper);
? ? ? ? System.out.println("影響記錄數(shù):" + rows);
? ? }
? ? ?@Test
? ? public void updateByWrapper2(){
? ? UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>();
? ? updateWrapper.eq("name", "張無忌").eq("age", 28).set("age", 30);? ?//UPDATE user SET age = 30 WHERE name = '張無忌' and age 28
? ?
? ? Integer rows = userMapper.update(null, updateWrapper);? //省略實體,設(shè)置為null
? ? ? ? System.out.println("影響記錄數(shù):" + rows);
? ? }
? ? ?@Test
? ? public void updateByWrapperLambda(){
? ? LambdaUpdateWrapper<User> lambdaUpdate = Wrappers.<User>lambdaUpdate();
? ? //UPDATE user SET age = 31 , email = 'uywyeiu@126.com' WHERE name = '張無忌' and age = 30
? ? lambdaUpdate.eq(User::getName, "張無忌").eq(User::getAge, 30)
? ? ? ? ? ? ? ? .set(User::getAge, 31).set(User::getEmail, "uywyeiu@126.com");
? ?
? ? Integer rows = userMapper.update(null, lambdaUpdate);
? ? ? ? System.out.println("影響記錄數(shù):" + rows);
? ? }
? ? ?@Test
? ? public void updateByWrapperLambdaChain(){
? ? boolean updateBool = new LambdaUpdateChainWrapper<User>(userMapper)
? ? ? ? ? ? ? ? ?.eq(User::getName, "張無忌").eq(User::getAge, 31)
? ? ? ? ? ? ? ? ?.set(User::getAge, 34).set(User::getEmail, "434444322@qq.com")
? ? ? ? ? ? ? ? ? ? ?.update();
? ? ? ? System.out.println(updateBool);? //成功:true? ?失敗:false
? ?
? ? }
}
查看全部 -
?/**
? ? ?* TODO 分頁插件的用法
? ? ?* 實現(xiàn)分頁,方法1
? ? ?*/
? ? @Test
? ? public void selectPage() {
? ? ? ? QueryWrapper<User> queryWrapper = new QueryWrapper<>();
? ? ?
? ? ? ? //SELECT COUNT(1) FROM user WHERE age >= 26? ? ?
? ? ? ? queryWrapper.ge("age", 26);
? ? ? ? //SELECT * FROM user WHERE age >= ? LIMIT ?,?
? ? ? ? Page<User> page = new Page<User>(1, 2);
? ? ? ? IPage<User> iPage = userMapper.selectPage(page, queryWrapper);
? ? ? ? System.out.println("總頁數(shù):" + iPage.getPages());
? ? ? ? System.out.println("總記錄數(shù):" + iPage.getTotal());
? ? ? ? List<User> userList = iPage.getRecords();
? ? ? ? userList.forEach(System.out::println);
? ? }
? ? ?/**
? ? ?* TODO 分頁插件的用法
? ? ?* 實現(xiàn)分頁,方法2
? ? ?*/
? ? @Test
? ? public void selectPage2() {
? ? ? ? QueryWrapper<User> queryWrapper = new QueryWrapper<>();
? ? ?
? ? ? ? //SELECT COUNT(1) FROM user WHERE age >= 26? ? ?
? ? ? ? queryWrapper.ge("age", 26);
? ? ? ? //SELECT * FROM user WHERE age >= ? LIMIT ?,?
? ? ? ? Page<User> page = new Page<User>(1, 2);
? ? ? ? IPage<Map<String, Object>> selectMapsPage =? userMapper.selectMapsPage(page, queryWrapper);
? ? ? ? System.out.println("總頁數(shù):" + selectMapsPage.getPages());
? ? ? ? System.out.println("總記錄數(shù):" + selectMapsPage.getTotal());
? ? ? ? List<Map<String, Object>> userList = selectMapsPage.getRecords();
? ? ? ? userList.forEach(System.out::println);
? ? }
查看全部 -
分頁的方法
查看全部 -
public interface UserMapper extends BaseMapper<User> {
? ??
? ? //注解的方式實現(xiàn)自定義SQL
? ? @Select("select * from user ${ew.customeSqlSegment}")
? ? List<User> selectAll(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
? ? /**
? ? //對應(yīng)的XML寫法
? ? <select id="selectAll" resultType="com.entity.User">
? ? select * from user ${ew.customeSqlSegment}
? ? </select>
?
? ? */
}
查看全部 -
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.mp.dao.UserMapper;
import com.mp.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
?* @Description
?* @auther mohuani
?* @create 2019-12-25 11:37
?*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class RetrieveTest {
? ? @Autowired
? ? private UserMapper userMapper;
? ? @Test
? ? public void selectById() {
? ? ? ? User user = userMapper.selectById(1088250446457389058L);
? ? ? ? System.out.println(user);
? ? }
? ? @Test
? ? public void selectBatchIds() {
? ? ? ? List<Long> list = Arrays.asList(1088248166370832385L, 1094590409767661570L, 1209509417456001025L);
? ? ? ? List<User> userList = userMapper.selectBatchIds(list);
? ? ? ? userList.forEach(System.out::println);
? ? }
? ? @Test
? ? public void selectByMap() {
? ? //where name='李藝偉' and age = 28
? ? ? ? Map<String, Object> columnMap = new HashMap<>();
? ? ? ? columnMap.put("name", "李藝偉");
? ? ? ? columnMap.put("age", 28);
? ? ? ? List<User> userList = userMapper.selectByMap(columnMap);
? ? ? ? userList.forEach(System.out::println);
? ? }
? ? /**
? ? ?* 1、名字中包含雨并且年齡小于40
? ? ?*? ? ?name like '%雨%' and age<40
? ? ?*/
? ? @Test
? ? public void selectByWrapper() {
? ? ? ? QueryWrapper<User> queryWrapper = new QueryWrapper<>();
? ? ? ? //QueryWrapper<User> queryWrapper = Wrappers.<User>query();
? ? ? ? queryWrapper.like("name", "雨").lt("age", 40);
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
? ? ? ? userList.forEach(System.out::println);
? ? }
? ? /**
? ? ?* 2、名字中包含雨年并且齡大于等于20且小于等于40并且email不為空
? ? ?*? ? name like '%雨%' and age between 20 and 40 and email is not null
? ? ?*/
? ? @Test
? ? public void selectByWrapper2() {
? ? ? ? QueryWrapper<User> queryWrapper = new QueryWrapper<>();
? ? ? ? queryWrapper.like("name", "雨").between("age" ,20 ,40).isNotNull("email");
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
? ? ? ? userList.forEach(System.out::println);
? ? }
? ? /**
? ? ?* 3、名字為王姓或者年齡大于等于25,按照年齡降序排列,年齡相同按照id升序排列
? ? ?*? ? name like '王%' or age>=25 order by age desc,id asc
? ? ?*/
? ? @Test
? ? public void selectByWrapper3() {
? ? ? ? QueryWrapper<User> queryWrapper = new QueryWrapper<>();
? ? ? ? queryWrapper.likeRight("name", "王").or().gt("age", 25).orderByDesc("age").orderByAsc("id");
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
? ? ? ? userList.forEach(System.out::println);
? ? }
? ? /**
? ? *
? ? * 創(chuàng)建時間為2019年2月14日并且直屬上級為名字為王姓:
? ? * date_format(create_time,'%Y-%m-%d') and manager_id in (select id from user where name like '王%')
? ? *
? ? */
? ? @Test
public void selectByWrapper4(){
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
? ? ? ? //動態(tài)條件構(gòu)造器:apply。范圍條件構(gòu)造器:insql。
? ? ? ? //注意:如果{0}替換為實際值,可能會造成sql注入。
queryWrapper.apply("date_format(create_time,'%Y-%m-%d') = {0}","2019-02-14").inSql("manager_id","select id from user where name like '王%' ");
//queryWrapper.apply("date_format(create_time,'%Y-%m-%d') = '2019-02-14'").inSql("manager_id","select id from user where name like '王%' ");? //此種寫法存在SQL注入的風(fēng)險
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
? ?
? ? /**
? ? * 5.名字為王姓并且(年齡小于40或郵箱不為空)
? ? * name like '王%' and (age < 40 or email is not null)
? ? *
? ? */
@Test
public void selectByWrapper5(){
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.likeRight("name","王").and(wq->wq.lt("age", 40).or().isNotNull("email"));
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
? ? /**
? ? * 6. 名字為王姓或者(年齡小于40并且年齡大于20并且郵箱不為空)
? ? * name like '王%' or (age < 40 and ang > 20 and email is not null)
? ? *
? ? */
@Test
public void selectByWrapper6(){
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.likeRight("name", "王").or(wq -> wq.lt("age", 40).gt("age", 20).isNotNull("email"));
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
? ??
? ?
? ? ?/**
? ? * 7. (年齡小于40或郵箱不為空)并且名字為王姓
? ? * (age < 40 or email is not null) and name like '王%'
? ? *
? ? */
@Test
public void selectByWrapper7(){
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.nested(wq -> wq.lt("age", 40).or().isNotNull("email")).likeRight("name", "王");
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
? ? * 8. 年齡為30,31,34,35
? ? * age in (30,31,34,35)
? ? *
? ? */
@Test
public void selectByWrapper8(){
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.in("age". Arrays.asList(30,31,34,35));
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
? ? * 9. 值返回滿足條件的其中一條語句即可
? ? * limit 1
? ? *
? ? */
@Test
public void selectByWrapper9(){
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
//last函數(shù) 無視優(yōu)化規(guī)則直接拼接到sql的最后,只能調(diào)用一次,調(diào)用多次以最后一次為準(zhǔn),有sql注入風(fēng)險
queryWrapper.in("age". Arrays.asList(30,31,34,35)).last("limit 1");
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
/**
* select中字段不全部出現(xiàn)的查詢
? ? * 10. 名字中包含雨且年齡小于40
? ? * (1)select id,name from user where name like '%雨%' and age < 40
? ? * (2)select id,name,age, email from user where name like '%雨%' and age < 40
? ? */
@Test
public void selectByWrapper10(){
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
//在select函數(shù)中指定需要查詢的字段
//select id,name from user where name like '%雨%' and age < 40
//queryWrapper.select("id", "name").like("name", "雨")lt("age", 40);
? ? ? ? //在select函數(shù)中排除不需要的字段
//select id,name,age, email from user where name like '%雨%' and age < 40
queryWrapper.like("name", "雨")lt("age", 40).select(User.class, info -> !info.getColumn().equals("create_time") && !info.getColumn().equals("manager_id"));
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
? ? /**
? ? * 實體對象作為條件構(gòu)造器方法的參數(shù)
? ? */
@Test
public void selectByWrapperEntity(){
? ? ? ? User user = new User();
? ? ? ? user.setName("李藝偉");
? ? ? ? user.setAge(28)
QueryWrapper<User> queryWrapper = new QueryWrapper<User>(user);
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
? ? ?
? ? /*
? ? * condition 條件判斷,當(dāng)條件為true則查詢條件加入where
? ? * 作用:該條件是否加入最后生成的sql中。
? ? * 使用方法:如果為true就加入,如果false就不加入。
? ? * 使用場景:類似于動態(tài)的sql拼接。
? ? */
@Test
public void testCondition(){
String name = "王";
String email = "";
condition(name, email);
}
private void condition(String name, String email){
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
//第一種寫法
/*if(StringUtils.isNotEmpty(name)){
queryWrapper.like("name", name);
}
if(StringUtils.isNotEmpty(email)){
queryWrapper.like("email", email);
}*/
//第二種寫法
queryWrapper.like(StringUtils.isNotEmpty(name), "name", name)
? ? ? ? ? ? .like(StringUtils.isNotEmpty(email), "email", email);
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
? ? /**
? ? * allEq函數(shù)用法
? ? */
@Test
public void selectByWrapperAllEq(){
? ? ? ??
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
Map<String, Object> columnMap = new HashMap<>();
? ? ? ? columnMap.put("name", "李藝偉");
? ? ? ? columnMap.put("age", 28);
? ? ? ? //columnMap.put("age", null);
? ? ? ? //queryWrapper.allEq(columnMap, false);? ?//忽略一個值
? ? ? ? //queryWrapper.allEq(columnMap);
? ? ? ? queryWrapper.allEq((k,v) -> !k.equals("name"), columnMap);? //不等于name值的就加入條件
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
? ??
? ? /**
? ? *? selectMaps()用法
? ? *? selectMap:List集合的泛型不再是實體,而是map集合。其中key表示字段名,value表示字段值。
? ? *??
? ? *? 使用場景1:當(dāng)實體類屬性非常多時,不易查看。如果返回的是一個實體類,那么即使我們設(shè)定了返回字段,那么它的值為null,但是屬性仍然存在。如果返回的是Map類型,當(dāng)指定了返回字段時,那么沒返回的就不會存在。
? ? *? 使用場景2:當(dāng)返回的不是一條一條記錄時,也就是返回的字段不在實體類屬性中,比如一些統(tǒng)計,像平均值,最大值,最小值這樣的。
? ? */
@Test
public void selectByWrapperMaps(){
? ? ??
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
//queryWrapper.like("name","雨").lt("age", 40);
queryWrapper.select("id", "name").like("name", "雨").lt("age", 40);
? ? ? ? List<Map<String, Object>> userList = userMapper.selectMaps(queryWrapper);
userList.forEach(System.out::println);
}
/**
selectMaps用于返回自定義字段和查詢特定字段時避免其他字段為null
selectObjs用于返回結(jié)果的第一個字段
selectCount不能帶select,因為它查詢的時記錄數(shù)量,對應(yīng)于sql中的count(1)
selectOne用于輸出一條結(jié)果,如果多與一條報錯
? ? */
? ? /**
? ? ?按照直屬上級分組,查詢每組的平均年齡,最大年齡,最小年齡并且只取年齡總和小于500的組
? ? ?select avg(age) AS avg_age, min(age) AS min_age,max(age) AS max_age
? ? ?from user group by manager_id
? ? ?having sum(age)? < 500
? ? */
@Test
public void selectByWrapperMaps2(){
? ? ??
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.select("avg(age) avg_age", "min(age) min_age", "max(age) max_age")
? ? ? ? ? ? .groupBy("manager_id").having("sum(age) < {0}", 500);
? ? ? ? List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
? ? /**
? ? selectObject:List集合的泛型不再是實體,而是Object,只返回第一個字段的值。其他的會被舍棄。
? ? 使用場景:只返回一列時可以使用它。
? ? */
@Test
public void selectByWrapperObjs(){
? ? ??
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.select("id", "name").like("name", "雨").lt("age", 40);
? ? ? ? List<Object> userList = userMapper.selectObjs(queryWrapper);
userList.forEach(System.out::println);
}
? ? /**
? ? selectCount:查詢符合條件的總記錄數(shù)的。
? ? 注意:使用它時,就不能指定返回的列了,因為它會在后面拼接COUNT(1)。
? ? */
@Test
public void selectByWrapperCount(){
? ? ??
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name", "雨").lt("age", 40);
? ? ? ? Integer count = userMapper.selectCount(queryWrapper);
System.out.println("總記錄數(shù) = " + count);
}
? ??
? ? /**
? ? selectOne:查詢符合條件的數(shù)據(jù),只會返回一條數(shù)據(jù)。
? ? 注意:查詢的結(jié)果必須是一條或者查不到(多于1條就會報錯)。
? ? */
? ? @Test
public void selectByWrapperOne(){
? ? ??
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.like("name", "雨").lt("age", 40);
User user = userMapper.selectOne(queryWrapper);
? ? ? ? System.out.println(user);
? ? ? ??
}
? ? /**
? ? ?lambda條件構(gòu)造器
? ? ?lambda條件構(gòu)造器的創(chuàng)建有3種方式
1、通過查詢構(gòu)造器QueryWrapper創(chuàng)建
2、通過new直接創(chuàng)建lambda條件構(gòu)造器
3、通過構(gòu)造器工具類Wrappers創(chuàng)建(此時需要泛型)
? ? */
@Test
public void selectLambda(){
? ? //方式1
//LambdaQueryWrapper<User> lambda = new QueryWrapper<User>().lambda();
? ? //方式二
? ? //LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<User>();
//方式三
? ? LambdaQueryWrapper<User> lambdaQuery = Wrappers.<User>lambdaQuery();
? ? //where name like '%雨%' and age < 40
? ? lambdaQuery.like(User::getName, "雨").lt(User::getAge, 40);
? ? List<User> userList = userMapper.selectList(lambdaQuery);
? ? userList.forEach(System.out::println);
? ? ? ??
}
? ??
? ? /**
? ? * 5.名字為王姓并且(年齡小于40或郵箱不為空)
? ? * name like '王%' and (age < 40 or email is not null)
? ? */
@Test
public void selectLambda2(){
? ? //方式1
//LambdaQueryWrapper<User> lambda = new QueryWrapper<User>().lambda();
? ? //方式二
? ? //LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<User>();
//方式三
? ? LambdaQueryWrapper<User> lambdaQuery = Wrappers.<User>lambdaQuery();
? ? //where name like '%雨%' and age < 40
? ? lambdaQuery.likeRight(User::getName, "王").and(lqw -> lqw.lt(User::getAge, 40)
? ? .or().isNotNull(User::getEmail));
? ? List<User> userList = userMapper.selectList(lambdaQuery);
? ? userList.forEach(System.out::println);
? ? ? ??
}
@Test
public void selectLambda3(){
? ? //新版本
? ? List<User> userList = new LambdaQueryChainWrapper<User>(userMapper).like(User::getName, "雨")
? ? ? ? ? ? ? ? ? ? ? ? ? .ge(User::getAge, 20).list();
? ? userList.forEach(System.out::println);
? ? ? ??
}
}
查看全部 -
lambda條件構(gòu)造器
查看全部 -
通用Mapper
Map<String,Object> params = new HashMap<String,Object>();
params.put("name","王天風(fēng)");
params.put("age",null);
queryWrapper.allEq((k,v)->!k.equals("name"),params);
List<User> userList = userMapper.selectList(queryWrapper);
查看全部 -
這樣查詢條件即為傳入實體中的屬性值。
若查詢條件需要模糊查詢,可在實體字段上加注解:@TableFiled(condition=SqlCondition.LIKE) 表示該字段使用模糊查詢?
若查詢條件要求不等值,可在實體字段上加注解:例如在age上加注解@TableFiled(condition="%s<#{%s}"),表示age<#{age}
查看全部 -
通用Mapper
查看全部 -
代碼
package?com.mp; import?com.baomidou.mybatisplus.core.conditions.Wrapper; import?com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import?com.baomidou.mybatisplus.core.toolkit.Wrappers; import?com.mp.dao.UserMapper; import?com.mp.entity.User; import?org.junit.Test; import?org.junit.runner.RunWith; import?org.springframework.beans.factory.annotation.Autowired; import?org.springframework.boot.test.context.SpringBootTest; import?org.springframework.test.context.junit4.SpringRunner; import?java.util.Arrays; import?java.util.HashMap; import?java.util.List; import?java.util.Map; /** ?*?@Description ?*?@auther?mohuani ?*?@create?2019-12-25?11:37 ?*/ @RunWith(SpringRunner.class) @SpringBootTest public?class?RetrieveTest?{ ????@Autowired ????private?UserMapper?userMapper; ????@Test ????public?void?selectById()?{ ????????User?user?=?userMapper.selectById(1088250446457389058L); ????????System.out.println(user); ????} ????@Test ????public?void?selectBatchIds()?{ ????????List<Long>?list?=?Arrays.asList(1088248166370832385L,?1094590409767661570L,?1209509417456001025L); ????????List<User>?userList?=?userMapper.selectBatchIds(list); ????????userList.forEach(System.out::println); ????} ????@Test ????public?void?selectByMap()?{ ????????Map<String,?Object>?columnMap?=?new?HashMap<>(); ????????columnMap.put("name",?"李藝偉"); ????????columnMap.put("age",?28); ????????List<User>?userList?=?userMapper.selectByMap(columnMap); ????????userList.forEach(System.out::println); ????} ????/** ?????*?1、名字中包含雨并且年齡小于40 ?????*?????name?like?'%雨%'?and?age<40 ?????*/ ????@Test ????public?void?selectByWrapper()?{ ????????QueryWrapper<User>?queryWrapper?=?new?QueryWrapper<>(); ????????queryWrapper.like("name",?"雨").lt("age",?40); ????????List<User>?userList?=?userMapper.selectList(queryWrapper); ????????userList.forEach(System.out::println); ????} ????/** ?????*?2、名字中包含雨年并且齡大于等于20且小于等于40并且email不為空 ?????*????name?like?'%雨%'?and?age?between?20?and?40?and?email?is?not?null ?????*/ ????@Test ????public?void?selectByWrapper2()?{ ????????QueryWrapper<User>?queryWrapper?=?new?QueryWrapper<>(); ????????queryWrapper.like("name",?"雨").between("age"?,20?,40).isNotNull("email"); ????????List<User>?userList?=?userMapper.selectList(queryWrapper); ????????userList.forEach(System.out::println); ????} ????/** ?????*?3、名字為王姓或者年齡大于等于25,按照年齡降序排列,年齡相同按照id升序排列 ?????*????name?like?'王%'?or?age>=25?order?by?age?desc,id?asc ?????*/ ????@Test ????public?void?selectByWrapper3()?{ ????????QueryWrapper<User>?queryWrapper?=?new?QueryWrapper<>(); ????????queryWrapper.likeRight("name",?"王").or().gt("age",?25).orderByDesc("age").orderByAsc("id"); ????????List<User>?userList?=?userMapper.selectList(queryWrapper); ????????userList.forEach(System.out::println); ????} }
查看全部 -
QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
//QueryWrapper<User> query=Wrappers<User>query();
queryWrapper.like("name","雨").lt("age",40);
查看全部 -
mapper查詢用法
查看全部 -
普通查詢:使用方式為實現(xiàn)BaseMapper<T>接口對象調(diào)用該方法。
T?selectById(Serializable id):使用場景為通過主鍵查詢,只要該主鍵類型實現(xiàn)了Serialzable接口即可。
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList):使用場景為通過主鍵的集合去批量查詢,前提主鍵的類型實現(xiàn)了Serializable接口。傳入array
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String,Object> columnMap):使用場景為傳入一個Map集合,key為表字段,value為表字段值。注意:Map的key為數(shù)據(jù)表的字段名,不是實體類屬性名。
查看全部 -
mybatis-plus:主鍵采用雪花算法生成值的前提是實體類的主鍵屬性名稱必須為id。
mybatis-plus:數(shù)據(jù)表字段帶有_的可以自動映射到駝峰式命名的屬性上(t_user 映射為 tUser)。
注解:
@TableName(“數(shù)據(jù)庫表名”):使用場景實體類名稱和數(shù)據(jù)表名不一致時,通過它指定表名,此時就可以使用mp的單表操作。
@TableId(“主鍵名”):使用場景實體類屬性名稱和數(shù)據(jù)表主鍵不是id時,通過它聲明該屬性為主鍵,就可以采用雪花算法生成主鍵值操作。
@TableField(“字段名”):使用場景實體類屬性名稱和數(shù)據(jù)表字段名不一致時,通過它指定數(shù)據(jù)表字段名稱,就可以和實體類屬性一起使用。
排除非表字段的三種方式
使用場景:實體類中的某個屬性不對應(yīng)表中的任何字段,只是用于保存臨時數(shù)據(jù),或者臨時組裝的數(shù)據(jù)。
使用方式
1、transient修飾實體類屬性(修飾的屬性不會被序列化)。缺陷:有些需求需要序列化該字段。
2、static修飾屬性(前提手動實現(xiàn)get、set方法,Lombok對靜態(tài)屬性不會提供get、set方法)。缺陷:每個對象的屬性值一致。
3、@TableField(exist=false),這個注解用來表示數(shù)據(jù)表中不存在該字段,默認是true。推薦
查看全部
舉報