博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis06--动态sql
阅读量:4326 次
发布时间:2019-06-06

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

1.if标签

public interface StudentDao {    /**     *动态sql的查询   参数是Student对象  不确定  用户输入几个属性值     */    List
selectStudentsByIf(Student student);}

xml文件中的内容

测试类

public class StudentTest {    StudentDao dao;    SqlSession session;    @Before    public void before() {        // 因为需要关闭session 需要把session提取出去        session = SessionUtil.getSession();        dao = session.getMapper(StudentDao.class);    }    @After    public void after() {        if (session != null) {            session.close();        }    }    // 01.动态查询    @Test    public void test1() {                Student stu=new Student();        //01.属性都不赋值  会查询所有        //02.只给年龄赋值stu.setAge(10);        //03.只给姓名赋值stu.setName("小");        //04.同时给两个属性都赋值        stu.setAge(10);        stu.setName("小");        List
list = dao.selectStudentsByIf(stu); for (Student student : list) { System.out.println(student); } }}

 

2.where标签

上面的代码有点问题,就是在xml文件中的sql语句有where  1=1,如果查询条件多的话,性能是很低的,因为每次查询都需要判断一次!这时候 我们就需要使用 where 标签来代替!

 

public interface StudentDao {    List
selectStudentsByWhere(Student student);}

 

xml文件的配置  省略了  where  1=1

测试类中新增

// 02.动态查询 where    @Test    public void test2() {        Student stu=new Student();        //01.属性都不赋值  会查询所有        //02.只给年龄赋值stu.setAge(10);        //03.只给姓名赋值stu.setName("小");        //04.同时给两个属性都赋值        stu.setAge(10);        stu.setName("小");        List
list = dao.selectStudentsByWhere(stu); for (Student student : list) { System.out.println(student); } }

运行即可得到相同的结果!

 

2.choose标签

比如说当姓名不为空的时候,按照姓名来查询,年龄不为空的时候按照年龄来查询!如果都为空则返回空!

 

public interface StudentDao {    /**     *动态sql的查询   参数是Student对象     */        List
selectStudentsByChoose(Student student);}

 

xml文件中配置

测试类代码

// 03.动态查询 choose    @Test    public void test3() {        Student stu=new Student();        stu.setName("小");  //name 不会空  则会按照name来查询  其他的条件无效        stu.setAge(10);          //如果都没有赋值 则没有返回结果        List
list = dao.selectStudentsByChoose(stu); for (Student student : list) { System.out.println(student); } }

 4.foreach标签 遍历数组

 

public interface StudentDao {        List
selectStudentsByForeach(int [] ids);}

 

xml文件中的配置

测试代码

// 04.动态查询 foreach 遍历数组    @Test    public void test4() {        int [] ids={1,13,15};        List
list = dao.selectStudentsByForeach(ids); for (Student student : list) { System.out.println(student); } }

 4.foreach标签 遍历list集合

public interface StudentDao {        List
selectStudentsByForeachArray(List
ids);}

xml文件中的配置

测试代码

// 05.动态查询 foreach 遍历list集合    @Test    public void test5() {        List
ids=new ArrayList
(); ids.add(1); ids.add(13); ids.add(14); List
list = dao.selectStudentsByForeachArray(ids); for (Student student : list) { System.out.println(student); } }

4.foreach标签 遍历自定义类型集合

public interface StudentDao {    List
selectStudentsByForeachStudent(List
stus);}

xml文件中的配置

测试代码

// 06.动态查询 foreach 遍历自定义集合    @Test    public void test6() {        Student stu1 = new Student();        stu1.setId(1);        Student stu2 = new Student();        stu2.setId(13);        Student stu3 = new Student();        stu3.setId(15);        List
stus=new ArrayList
(); stus.add(stu1); stus.add(stu2); stus.add(stu3); List
list = dao.selectStudentsByForeachStudent(stus); for (Student student : list) { System.out.println(student); } }

 5.sql片段

如果一个xml文件中的sql语句有很多相同的地方,则可以使用sql片段来替换!如:

 

public interface StudentDao {    List
selectStudentsBySql(List
stus);}

 

xml文件中的配置

select id,name,age from student

测试代码

// 07.sql片段    @Test    public void test7() {        Student stu1 = new Student();        stu1.setId(1);        Student stu2 = new Student();        stu2.setId(13);        Student stu3 = new Student();        stu3.setId(15);        List
stus=new ArrayList
(); stus.add(stu1); stus.add(stu2); stus.add(stu3); List
list = dao.selectStudentsBySql(stus); for (Student student : list) { System.out.println(student); } }

 

转载于:https://www.cnblogs.com/999-/p/6380250.html

你可能感兴趣的文章
UIView详解
查看>>
MSSQL如何将查询结果拼接成字符串
查看>>
20169217 《Linux内核原理与分析》 第十周作业
查看>>
20169217 2016-2017-2 《网络攻防实践》第四周学习总结
查看>>
MemCache在Windows下环境的搭建及启动
查看>>
<nginx.conf> nginx设置用户权限
查看>>
python实现redis三种cas事务操作
查看>>
同步异步与阻塞非阻塞
查看>>
C++ 安全单例模式总结
查看>>
bzoj4754: [Jsoi2016]独特的树叶
查看>>
toj 4069 简易统计
查看>>
【Unity】Update()和FixedUpdate()
查看>>
UNITY中有Timer
查看>>
[JSOI2010] 连通数
查看>>
二分和三分
查看>>
支付宝新漏洞引发恐慌,那如何关闭小额免密支付呢
查看>>
Mac OS 快捷键
查看>>
java 下载文件
查看>>
The King’s Problem 强连通
查看>>
Lambda 表达式
查看>>