有时候要查询条件是多条件的,尤其是使用mybatis的时候如何创建sql语句呢?

这里mybatis有自己的办法,如下:

案例:通过传入map,根据map里面的数据来查询

mapper配置如下:

<select id="select04" parameterType="Emp1" resultType="Emp1">
select * from emp
<where>
<if test="empno != 0">
and empno = #{empno}
</if>
<if test="ename != null">
and ename = #{ename}
</if>
<if test = "deptno != null ">
and deptno = #{deptno}
</if>
</where>
</select>

测试类如下:

package com.yc.mybatis;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; public class TestTest01 {
InputStream is = null;
SqlSessionFactory factory = null;
SqlSession session = null; {
try {
is = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(is);
session = factory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
} @Test
public void TTest04(){
Emp1 emp = new Emp1();
emp.setDeptno(20);
List<Emp1> list = session.selectList("TTest.select04", emp);//TTest为mapper的命名空间
for(Emp1 e : list){
System.out.println(e);
}
}
}

实体类如下:

package com.yc.mybatis;

public class Emp1 {
private int empno;
private int deptno;
private String ename;
@Override
public String toString() {
return "Emp1 [empno=" + empno + ", deptno=" + deptno + ", ename=" + ename + "]";
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + deptno;
result = prime * result + empno;
result = prime * result + ((ename == null) ? 0 : ename.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Emp1 other = (Emp1) obj;
if (deptno != other.deptno)
return false;
if (empno != other.empno)
return false;
if (ename == null) {
if (other.ename != null)
return false;
} else if (!ename.equals(other.ename))
return false;
return true;
}
public Emp1(int empno, int deptno, String ename) {
super();
this.empno = empno;
this.deptno = deptno;
this.ename = ename;
}
public Emp1() {
super();
}
}

Emp1.java

结果截图如下:

多条件查询到此结束,但是相关的思想却非常重要,比如有多条件更新,多个值的赋值再插入数据等等,这里我就将配置项发一下,相关的测试类和实体类就不一 一列举了。

多数据更新:

<update id="update01" parameterType="Emp1">
update emp
<set>
<if test="ename != null ">
ename = #{ename},
</if>
<if test = "deptno != 0">
deptno = #{deptno},
</if>
</set>
where empno = #{empno}
</update>

多条件删除:

<delete id="delete01" parameterType="Emp">
delete emp
<where>
<if test="empno != 0">
and empno = #{empno}
</if>
<if test="ename != null">
and ename = #{ename}
</if>
<if test="deptno != 0">
and deptno = #{deptno}
</if>
</where>
</delete>

注意:关于添加、删除和修改必须要手动提交一次才行,要session.commit(),因为mybatis不会自动帮你提交。

基本的mybatis到此。

mybatis学习(五)(动态mybatis(多条件查询))的更多相关文章

  1. mybatis 学习五 动态SQL语句

    3.1 selectKey 标签 在insert语句中,在Oracle经常使用序列.在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键.使用myBatis的selectKey ...

  2. Mybatis中动态SQL多条件查询

    Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...

  3. MyBatis学习总结(七)——Mybatis缓存(转载)

      孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的 ...

  4. 【转】MyBatis学习总结(七)——Mybatis缓存

    [转]MyBatis学习总结(七)——Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualC ...

  5. 转:MyBatis学习总结(Mybatis总结精华文章)

    http://www.cnblogs.com/xdp-gacl/tag/MyBatis%E5%AD%A6%E4%B9%A0%E6%80%BB%E7%BB%93/ 当前标签: MyBatis学习总结   ...

  6. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  7. 【JAVAWEB学习笔记】21_多条件查询、attr和prop的区别和分页的实现

    今天主要学习了数据库的多条件查询.attr和prop的区别和分页的实现 一.实现多条件查询 public List<Product> findProductListByCondition( ...

  8. spring boot 学习(五)SpringBoot+MyBatis(XML)+Druid

    SpringBoot+MyBatis(xml)+Druid 前言 springboot集成了springJDBC与JPA,但是没有集成mybatis,所以想要使用mybatis就要自己去集成. 主要是 ...

  9. Mybatis plus中一个框多条件查询 SQL拼接

    遇到多条件查询时,只用框架自带的方法搞不定,只能自己写方法拼接 EntityWrapper<YcejShopEntity> wrapper = new EntityWrapper<& ...

  10. Mybatis学习笔记(一) —— mybatis介绍

    一.Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...

随机推荐

  1. Mac OS启动服务优化高级篇(launchd tuning)禁用某些服务

    http://kenwublog.com/mac-os-launchd-tuning Mac下的启动服务主要有三个地方可配置:1,系统偏好设置->帐户->登陆项2,/System/Libr ...

  2. TCP打洞和UDP打洞的区别 (相互直接访问)

    为什么网上讲到的P2P打洞基本上都是基于UDP协议的打洞?难道TCP不可能打洞?还是TCP打洞难于实现?     假设现在有内网客户端A和内网客户端B,有公网服务端S.     如果A和B想要进行UD ...

  3. libjingler-0.6.2在windows和ubuntu 10.04下的编译(Google Talk)

    Libjingle版本:0.6.2 所需的资源:         gtest-1.6.0.zip         http://download.csdn.net/detail/cl_gamer/48 ...

  4. 【Linux】Linux相关资料

    linux相关技术资料: linux技术资料大全: http://t.cn/zYNBwFs

  5. Java基础(四) StringBuffer、StringBuilder原理浅析

    StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 关于String的讲解请看Java基础 ...

  6. TCP使用注意事项总结

    目录 发送或者接受数据过程中对端可能发生的情况汇总 本端TCP发送数据时对端进程已经崩溃 本端TCP发送数据时对端主机已经崩溃 本端TCP发送数据时对端主机已经关机 某个连接长时间没有数据流动 TCP ...

  7. PDF Expert for Mac v2.4.22 中文破解版下载 PDF阅读编辑软件

    PDF Expert for Mac v2.4.22 中文破解版下载:http://h5ip.cn/CsRN PDF Expert for Mac, iOS 上最好用的 PDF 编辑器之一,现在终于打 ...

  8. 【数据结构】红黑树-Java实现

    WIKI:https://en.wikipedia.org/wiki/Red%E2%80%93black_tree 转:红黑树(五)之 Java的实现 总结的比较精炼的: http://www.cnb ...

  9. webpack中添加px2rem-loader

    在buid->util.js const px2remLoader = { loader: 'px2rem-loader', options: { remUnit: 75 } } // gene ...

  10. yii中find()指定条件

    find()查找指定的条件 $modelName::model->find(); 使用条件对象 $criteria = new CDbCriteria(); $criteria->sele ...