mybatis | 您所在的位置:网站首页 › mybatisplus返回map类型 › mybatis |
** mybaits-plus常用使用方法** 常用三层分别继承方法 1.1mapper层(接口定义层)可以用BaseMapper 例如:
2.1service层(接口方法)可以用IService 介绍: 使用 代码生成器 生成的 service 接口中,其继承了 IService 接口。 IService 内部进一步封装了 BaseMapper 接口的方法(当然也提供了更详细的方法)。 使用时,可以通过 生成的 mapper 类进行 CRUD 操作,也可以通过 生成的 service 的实现类进行 CRUD 操作。(当然,自定义代码执行也可) 此处简单介绍一下 IService 中封装的常用方法。
3.1条件构造器 上面介绍的 接口方法的参数中,会出现各种 wrapper,比如 queryWrapper、updateWrapper 等。wrapper 的作用就是用于定义各种各样的查询条件(where)。 Wrapper 条件构造抽象类 -- AbstractWrapper 查询条件封装,用于生成 sql 中的 where 语句。 -- QueryWrapper Entity 对象封装操作类,用于查询。 -- UpdateWrapper Update 条件封装操作类,用于更新。 -- AbstractLambdaWrapper 使用 Lambda 表达式封装 wrapper -- LambdaQueryWrapper 使用 Lambda 语法封装条件,用于查询。 -- LambdaUpdateWrapper 使用 Lambda 语法封装条件,用于更新。3.2常用条件 参考源码以及官方文档总结的,还是一句话,混个眼熟,多用用就熟练 【通用条件:】 【比较大小: ( =, , >, >=, name '老王' gt(R column, Object val); // 等价于 >,例: gt("name", "老王") ---> name > '老王' ge(R column, Object val); // 等价于 >=,例: ge("name", "老王") ---> name >= '老王' lt(R column, Object val); // 等价于 name < '老王' le(R column, Object val); // 等价于 name age between 18 and 30 notBetween(R column, Object val1, Object val2); // 等价于 not between a and b, 例: notBetween("age", 18, 30) ---> age not between 18 and 30 in(R column, Object... values); // 等价于 字段 IN (v0, v1, ...),例: in("age",{1,2,3}) ---> age in (1,2,3) notIn(R column, Object... values); // 等价于 字段 NOT IN (v0, v1, ...), 例: notIn("age",{1,2,3}) ---> age not in (1,2,3) inSql(R column, Object... values); // 等价于 字段 IN (sql 语句), 例: inSql("id", "select id from table where id < 3") ---> id in (select id from table where id < 3) notInSql(R column, Object... values); // 等价于 字段 NOT IN (sql 语句) 【模糊匹配:(like)】 like(R column, Object val); // 等价于 LIKE '%值%',例: like("name", "王") ---> name like '%王%' notLike(R column, Object val); // 等价于 NOT LIKE '%值%',例: notLike("name", "王") ---> name not like '%王%' likeLeft(R column, Object val); // 等价于 LIKE '%值',例: likeLeft("name", "王") ---> name like '%王' likeRight(R column, Object val); // 等价于 LIKE '值%',例: likeRight("name", "王") ---> name like '王%' 【空值比较:(isNull、isNotNull)】 isNull(R column); // 等价于 IS NULL,例: isNull("name") ---> name is null isNotNull(R column); // 等价于 IS NOT NULL,例: isNotNull("name") ---> name is not null 【分组、排序:(group、having、order)】 groupBy(R... columns); // 等价于 GROUP BY 字段, ..., 例: groupBy("id", "name") ---> group by id,name orderByAsc(R... columns); // 等价于 ORDER BY 字段, ... ASC, 例: orderByAsc("id", "name") ---> order by id ASC,name ASC orderByDesc(R... columns); // 等价于 ORDER BY 字段, ... DESC, 例: orderByDesc("id", "name") ---> order by id DESC,name DESC having(String sqlHaving, Object... params); // 等价于 HAVING ( sql语句 ), 例: having("sum(age) > {0}", 11) ---> having sum(age) > 11 【拼接、嵌套 sql:(or、and、nested、apply)】 or(); // 等价于 a or b, 例:eq("id",1).or().eq("name","老王") ---> id = 1 or name = '老王' or(Consumer consumer); // 等价于 or(a or/and b),or 嵌套。例: or(i -> i.eq("name", "李白").ne("status", "活着")) ---> or (name = '李白' and status '活着') and(Consumer consumer); // 等价于 and(a or/and b),and 嵌套。例: and(i -> i.eq("name", "李白").ne("status", "活着")) ---> and (name = '李白' and status '活着') nested(Consumer consumer); // 等价于 (a or/and b),普通嵌套。例: nested(i -> i.eq("name", "李白").ne("status", "活着")) ---> (name = '李白' and status '活着') apply(String applySql, Object... params); // 拼接sql(若不使用 params 参数,可能存在 sql 注入),例: apply("date_format(dateColumn,'%Y-%m-%d') = {0}", "2008-08-08") ---> date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'") last(String lastSql); // 无视优化规则直接拼接到 sql 的最后,可能存若在 sql 注入。 exists(String existsSql); // 拼接 exists 语句。例: exists("select id from table where age = 1") ---> exists (select id from table where age = 1) 【QueryWrapper 条件:】 select(String... sqlSelect); // 用于定义需要返回的字段。例: select("id", "name", "age") ---> select id, name, age select(Predicate predicate); // Lambda 表达式,过滤需要的字段。 lambda(); // 返回一个 LambdaQueryWrapper 【UpdateWrapper 条件:】 set(String column, Object val); // 用于设置 set 字段值。例: set("name", null) ---> set name = null etSql(String sql); // 用于设置 set 字段值。例: setSql("name = '老李头'") ---> set name = '老李头' lambda(); // 返回一个 LambdaUpdateWrapper```(3)简单使用,测试一下 QueryWrapper @Test public void testQueryWrapper() { // Step1:创建一个 QueryWrapper 对象 QueryWrapper queryWrapper = new QueryWrapper(); // Step2: 构造查询条件 queryWrapper .select("id", "name", "age") .eq("age", 20) .like("name", "j"); // Step3:执行查询 userService .list(queryWrapper) .forEach(System.out::println); }
常见使用方法查询: /** * 最简单的根据id查询 ** ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user WHERE id=? * ==> Parameters: 20(Integer) */ @Test public void selectById() { SysUser sysUser = sysUserMapper.selectById(20); System.out.println("sysUser=" + sysUser); } ------------------------------------------------------------------------- /** * 根据多个id批量查询 * * ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user WHERE id IN ( ? , ? , ? , ? ) * ==> Parameters: 17(Integer), 18(Integer), 19(Integer), 20(Integer) */ @Test public void selectBatchIds() { List asList = Arrays.asList(17, 18, 19, 20); List sysUsers = sysUserMapper.selectBatchIds(asList); System.out.println("list=" + sysUsers); } -------------------------------------------------------------------------- /** * 条件构造器 * * 1、名字中包含 东平 并且年龄小于等于30 * name like '%东平%' and age Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user * WHERE (name LIKE ? AND age Parameters: %东平%(String), 30(Integer) * * 备注: * 等于的英语单词是:equals * 小于的英文:less than * le表示小于等于 * ge 表示大于等于 >= */ @Test public void testQueryWrapper1() { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.like("name", "东平"); queryWrapper.le("age", 30); List sysUsers = sysUserMapper.selectList(queryWrapper); System.out.println("list=" + sysUsers); } ----------------------------------------------------------------------------- /** * map条件查询 * 注意:map条件中的key是用数据库中的字段对应,而不是与java中的实体对应 * ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user WHERE name = ? AND age = ? * ==> Parameters: 李东平(String), 18(String) */ @Test public void selectByMap() { Map columnMap = new HashMap(); columnMap.put("name", "李东平"); columnMap.put("age", "18"); // columnMap 拼接的条件为 WHERE name = ? AND age = ? List sysUsers = sysUserMapper.selectByMap(columnMap); System.out.println("list=" + sysUsers); } ---------------------------------------------------------------- /** * java实体作为条件 * ==> Preparing: SELECT id,version,age,gender,name,parent_id,position,account,password,status,type,create_time,update_time FROM sys_user WHERE age=? AND name=? * ==> Parameters: 18(Integer), 张无忌(String) */ @Test public void test2() { SysUser sysUser = new SysUser().setName("张无忌").setAge(18); QueryWrapper queryWrapper = new QueryWrapper(sysUser); //queryWrapper.setEntity(sysUser); List sysUsers = sysUserMapper.selectList(queryWrapper); System.out.println("list=" + sysUsers); } 常用使用方法连接: https://www.cnblogs.com/l-y-h/p/12859477.html |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |