运维开发网

包装器条件结构的应用,最后选择分析

运维开发网 https://www.qedev.com 2022-05-22 16:56 出处:网络
这篇文章主要介绍了mybatisQueryWrapper的条件构造之apply、last、select,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

这篇文章主要介绍了mybatisQueryWrapper的条件构造之apply、last、select,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


QueryWrapper条件构造之apply、last、select

场景:查询数据库中受限文章的数量时


mysql上的limit使用QueryWrapper needSyn = new QueryWrapper();needSyn.ge("ModifyDate",lmtSynRec.getLatestDate());needSyn.last("limit 200");Listlt;CusCarInfogt; needData = cusCarInfoMapper.selectList(needSyn);

如果是oracle,可以使用apply

needSyn.apply("rownum lt; {0}" , 200);


如果是sqlserver

建议自己写sql查询语句。

lt;select id="getSynList" resultType="com.xmeport.project.model.entity.CusCarInfo"gt;? ? select top ${top} ?* ?from CUS_CAR_INFO t where t.ModifyDate gt; cast(#{latestDate} as datetime) orderBy??t.ModifyDate asclt;/selectgt;Listlt;CusCarInfogt; getSynList(int top, Date latestDate);

或者选择使用QueryWrapper。

QueryWrapperlt;CusCarInfogt; wrapper ?= new QueryWrapper();wrapper.select("top 200 *");return this.list(wrapper);

以上是根据最晚时间查询top数据。

传入字段属于时间类型,因此接收时带有# {}占位符。如果是特定的数字或字符,可以用$ {}接收。


条件构造器QueryWrapper实例

让我们再举几个例子来深入理解条件构造函数QueryWrapper的用法:


案例一

查询姓李,出生日期为1993年2月9日至1994年4月9日的员工。

Sql实现:

SELECT * FROM t_employee WHERE DATE_FORMAT(birthday,'%Y-%m-%d')gt;='1993-02-09' AND DATE_FORMAT(birthday,'%Y-%m-%d')lt;='1994-04-09' AND NAME LIKE '李%'

Mp实施:

/**?* 查询姓李的,并且出生日期范围是1993-02-09到1994-04-09的员工?* sql:SELECT * FROM t_employee WHERE DATE_FORMAT(birthday,'%Y-%m-%d')gt;='1993-02-09' AND DATE_FORMAT(birthday,'%Y-%m-%d')lt;='1994-04-09' AND NAME LIKE '李%'?*/@Testpublic void selectByQueryWrapper3(){? QueryWrapperlt;Employeegt; queryWrapper=new QueryWrapper();? // QueryWrapperlt;Employeegt; queryWrapper2=Wrappers.lt;Employeegt;query();? queryWrapper.apply("DATE_FORMAT(birthday,'%Y-%m-%d')gt;={0} and DATE_FORMAT(birthday,'%Y-%m-%d')lt;={1}","1993-02-09","1994-04-09").likeRight("name","李");? Listlt;Employeegt; employeeList = employeeMapper.selectList(queryWrapper);? System.out.println(employeeList);}


案例二

查询姓李或邮箱不是空且是女性的员工。

Sql实现:

SELECT * FROM t_employee WHERE NAME LIKE '李%' OR (email IS NOT NULL AND gender ='女')

Mp实施:

/**?* 查询姓李的或者邮箱不为空并且是女性的员工?* sql:SELECT * FROM t_employee WHERE NAME LIKE '李%' OR (email IS NOT NULL AND gender ='女')?*/@Testpublic void selectByQueryWrapper4(){? QueryWrapperlt;Employeegt; queryWrapper=new QueryWrapper();? // QueryWrapperlt;Employeegt; queryWrapper2=Wrappers.lt;Employeegt;query();? queryWrapper.likeRight("name","李").or(wq-gt;wq.isNotNull("email").eq("gender","女"));? Listlt;Employeegt; employeeList = employeeMapper.selectList(queryWrapper);? System.out.println(employeeList);}


案例三

查询姓李,邮箱不是空或者是女的员工。

Sql实现:

SELECT * FROM t_employee WHERE NAME LIKE '李%' AND (email IS NOT NULL OR gender ='女')

Mp实施:

/**?* 查询姓李的并且邮箱不为空或者是女性的员工?* sql:SELECT * FROM t_employee WHERE NAME LIKE '李%' AND (email IS NOT NULL OR gender ='女')?*/@Testpublic void selectByQueryWrapper5(){? QueryWrapperlt;Employeegt; queryWrapper=new QueryWrapper();? // QueryWrapperlt;Employeegt; queryWrapper2=Wrappers.lt;Employeegt;query();? queryWrapper.likeRight("name","李").and(wq-gt;wq.isNotNull("email").or().eq("gender","女"));? Listlt;Employeegt; employeeList = employeeMapper.selectList(queryWrapper);? System.out.println(employeeList);}


案例四

属于1号、2号、3号部门且工资小于等于3500的员工按年龄顺序显示。

Sql实现:

SELECT * FROM t_employee WHERE salarylt;=3500 AND departmentId IN (1,2,3) ORDER BY birthday ASC

Mp实施:

/**?* 查询属于编号1,2,3部门的并且薪水小于等于3500的员工 根据年龄从大到小排序显示?* sql:SELECT * FROM t_employee WHERE salarylt;=3500 AND departmentId IN (1,2,3) ORDER BY birthday ASC?*/@Testpublic void selectByQueryWrapper6(){? QueryWrapperlt;Employeegt; queryWrapper=new QueryWrapper();? // QueryWrapperlt;Employeegt; queryWrapper2=Wrappers.lt;Employeegt;query();? queryWrapper.likeRight("name","李").and(wq-gt;wq.isNotNull("email").or().eq("gender","女"));? Listlt;Employeegt; employeeList = employeeMapper.selectList(queryWrapper);? System.out.println(employeeList);}

以上个人经验,希望能给你一个参考,

0

精彩评论

暂无评论...
验证码 换一张
取 消