博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MP实战系列(十二)之封装方法详解(续二)
阅读量:7111 次
发布时间:2019-06-28

本文共 7345 字,大约阅读时间需要 24 分钟。

继续这篇文章之后。

此次要讲的是关于查询。

查询是用的比较多的,查询很重要,好的查询,加上索引如鱼得水,不好的查询加再多索引也是无济于事。

 

1.selectById()方法

演示示例:

UserEntity user = ud.selectById(33);        System.out.println(user.getEmail());

 

简单的说明:

如果是在MyBatis中,需要再对应的xml编写这样的sql select column1,column2... from table where id=#{id}

这里的id指的是主键。根据主键获取对应的信息。

selectById的源码如下:

/**     * 

* 根据 ID 查询 *

* * @param id 主键ID * @return T */ T selectById(Serializable id);

2.selectOne()

演示示例:

EntityWrapper
wrapper = new EntityWrapper
(); wrapper.eq("user_id", 4); UserEntity user = ud.selectOne(wrapper); System.out.println(user.getEmail());

对应的sql 是 select * from user where user_id=#{userId}

如果你想指定需要的字段,而不全部查出来,当然这有助于sql优化,可以通过wrapper调用,上面代码就变成这样

EntityWrapper
wrapper = new EntityWrapper
(); wrapper.setSqlSelect("email","username"); wrapper.eq("user_id", 4); UserEntity user = ud.selectOne(wrapper); System.out.println(user.getEmail());

wrapper.setSqlSelect()中的必须要写数据表中的列名,而不是对应JavaBean的属性名。这个是要注意的地方。

3.selectByMap()

这个方法主要是针对集合的,而不是单个数据查询。

演示代码如下:

    Map
columnMap = new HashMap
(); columnMap.put("username", "test"); List
list =ud.selectByMap(columnMap); for (UserEntity userEntity : list) { System.out.println(userEntity.getCreateTime()); }

相当于的sql是 select * from user where username=#{username}

put中的和相当于#{username}占位符。

源代码如下:

/**     * 

* 查询(根据 columnMap 条件) *

* * @param columnMap 表字段 map 对象 * @return List
*/ List
selectByMap(Map
columnMap);

 

4.selectList()

顾名思义,也是查询集合数据

演示代码如下:

EntityWrapper
wrapper = new EntityWrapper
(); wrapper.eq("username", "test"); List
list =ud.selectList(wrapper); for (UserEntity userEntity : list) { System.out.println(userEntity.getCreateTime()); }

不过不同的是,如果selectList(null),参数值为null,那么就意味着查询所有不含条件。wrappper就相当于条件。

wrapper可以指定很多条件,如下所示:

wrapper.between(column, val1, val2)        wrapper.groupBy(columns)  //对应sql中分组        wrapper.eq(column, params) //相当于where条件        wrapper.in(column, value) //sql中in        wrapper.notIn(column, value) //sql中 not in        wrapper.orderBy(columns, isAsc) //排序        wrapper.exists(value) //相对于sql中exists查询        wrapper.notExists(value) //相当于sql中not exists查询        wrapper.notBetween(column, val1, val2) //相当于sql中在某个范围内使用的between        wrapper.ge(column, params) //大于等于        wrapper.le(column, params) //小于等于        wrapper.like(column, value) //模糊查询        wrapper.having(sqlHaving, params) //条件过滤

 只要符合你的业务需要,都能使用。

方法名很容易理解。

源码如下:

/**     * 

* 查询列表 *

* * @param wrapper 实体包装类 {
@link Wrapper} * @return */ List
selectList(Wrapper
wrapper);

 

5.selectCount()

演示代码如下:

EntityWrapper
wrapper = new EntityWrapper
(); wrapper.eq("username", "test"); int lines =ud.selectCount(wrapper); System.out.println(lines);

查询符合条件的数量,通常情况下用于分页查询总数。

源代码如下:

/**     * 

* 根据 Wrapper 条件,查询总记录数 *

* * @param wrapper 实体对象 * @return int */ int selectCount(Wrapper
wrapper);

 

6.selectMap

演示代码如下:

EntityWrapper
wrapper = new EntityWrapper
(); wrapper.eq("username", "test"); UserEntity user = new UserEntity(); Map
map= ud.selectMap(wrapper); map.put("user", user); for (String u : map.keySet()) { System.out.println(map.get(u)); }

这是通过Map的形式遍历,不过只能获取一条数据。

 

源代码如下:

/**     * 

* 根据 Wrapper,查询一条记录 *

* * @param wrapper {
@link Wrapper} * @return Map
*/ Map
selectMap(Wrapper
wrapper);

 

这种使用场景的话,就目前我而言,没有用到过。

当然,我也一再强调,没有用到,并不代表没用。

7.selectMaps

演示代码如下:

EntityWrapper
wrapper = new EntityWrapper
(); wrapper.eq("username", "test"); UserEntity user = new UserEntity(); Map
map = new HashMap
(); map.put("user", user); List
> list= ud.selectMaps(wrapper); list.add(map); for (Map
maps : list) { System.out.println(maps.keySet()+"||"+maps.values()); }

 

主要用于查询集合数据

源码如下:

/**     * 

* 查询列表 *

* * @param wrapper {
@link Wrapper} * @return */ List
> selectMaps(Wrapper
wrapper);

关于Map相关的一系列源码,我会再后续章节详细讲解。

此次主要讲的是MyBatis Plus的常用和包含的方法

 

8.selectPage

演示示例1:

List
records = ud.selectList(null); int lines = ud.selectCount(null); Page
page = new Page
(); page.setLimit(0); page.setSize(10); page.setRecords(records); page.setCurrent(1); page.setTotal(lines); System.out.println(ud.selectPage(page));

演示示例2:

List
records = ud.selectList(null); int lines = ud.selectCount(null); EntityWrapper
wrapper = new EntityWrapper
(); wrapper.eq("username", "test"); Page
page = new Page
(); page.setLimit(0); page.setSize(10); page.setRecords(records); page.setCurrent(1); page.setTotal(lines); System.out.println(ud.selectPage(page, wrapper));

 

 

主要是用于翻页查询,可以理解为分页查询

非常易懂

limit索引从几开始

size每页显示多少条数据

record集合数据放置

current当前页

total总数

源码如下:

/**     * 

* 翻页查询 *

* * @param page 翻页对象 * @return */ Page
selectPage(Page
page);

 

/**     * 

* 翻页查询 *

* * @param page 翻页对象 * @param wrapper 实体包装类 {
@link Wrapper} * @return */ Page
selectPage(Page
page, Wrapper
wrapper);

 

9.selectObj

演示代码如下:

EntityWrapper
wrapper = new EntityWrapper
(); wrapper.eq("username", "test"); Object obj = ud.selectObj(wrapper); System.out.println(obj);

返回的结果是该用户对应的ID

源码如下:

/**     * 

* 根据 Wrapper,查询一条记录 *

* * @param wrapper {
@link Wrapper} * @return Object */ Object selectObj(Wrapper
wrapper);

10.selectObjs

演示代码如下:

EntityWrapper
wrapper = new EntityWrapper
(); wrapper.eq("username", "test"); List
obj = ud.selectObjs(wrapper); for (Object object : obj) { System.out.println(object); }

selectObj返回符合条件的一条数据,该selectObjs返回全部符合条件的数据

源码如下:

/**     * 

* 根据 Wrapper 条件,查询全部记录 *

* * @param wrapper 实体对象封装操作类(可以为 null) * @return List */ List selectObjs(Wrapper
wrapper);

 

小结:

其实查询还有几个,不过那几个我不是特别理解,所有就没有列出来了,上述列出的除了倒数两个不常用,其他或多或少十分常用。

如果你项目最初开发,使用的持久层为MyBatis Plus,你可以参考我的这篇文章

直接通过代码生成器开发,一次性生成所有实体、DAO、Service及其实现类和XML文件。绝对比MyBatis的逆向工程要简洁好用的多。

通过MyBatis Plus,你的开发效率,我相信可以提高70%或者80%。我公司目前采用这个,同事们的开发效率提高了很多。项目进展也比较快。

当然,我希望我以后能更深入的掌握MyBatis Plus的原理或者MyBatis也行。因为MyBatis Plus就是从MyBatis衍生出来的。

转载地址:http://momhl.baihongyu.com/

你可能感兴趣的文章
简单工厂模式 & 工厂方法模式 & 抽象工厂模式
查看>>
如何关闭visual studio2005实时调试器
查看>>
DotNetBar for Windows Forms 12.2.0.7_冰河之刃重打包版原创发布-带官方示例程序版
查看>>
oracle存储过程
查看>>
HTTP协议详解
查看>>
svn的搭建与使用
查看>>
大型网站技术架构(五)网站高可用架构
查看>>
RabbitMQ学习总结(7)——Spring整合RabbitMQ实例
查看>>
大表改造成分区表
查看>>
Maven学习总结(一)——Maven入门
查看>>
[9-13]Shell系列8——数组
查看>>
Java核心技术之10诀窍 广州疯狂JAVA培训
查看>>
web.xml配置详解
查看>>
Git Tool Part 1
查看>>
Dubbo学习总结(4)——Dubbo基于Zookeeper实现分布式实例
查看>>
程序员会被淘汰吗?
查看>>
【小项目 日程表程序】最近frank我想到一个好项目(好吧,我同意不是我想的)...
查看>>
mysql字符集 乱码问题
查看>>
RabbitMQ学习总结(2)——安装、配置与监控
查看>>
JavaScript学习总结(2)——JavaScript数据类型判断
查看>>