您当前的位置: 首页 >  sql

mybatis.5.动态SQL

发布时间:2017-02-10 15:47:41 ,浏览量:0

1.动态SQL,解决关联sql字符串的问题,mybatis的动态sql基于OGNL表达式

   if语句,在DeptMapper.xml增加如下语句;

select d.deptno,d.dname,d.loc from dept d where 1=1AND	dname like #{dname}

DeptMapper.java接口中增加如下代码

public Dept selectByLikeName(Dept dept);

测试类如下:

public class Test23 {
	public static void main(String[] args) {
		SqlSession session=SqlSessionFactoryUtil.getSqlSession();
		DeptMapper mapper=session.getMapper(DeptMapper.class);
		Dept d=new Dept();
		d.setDname("开发部");
		Dept dept=mapper.selectByLikeName(d);
		System.out.println(dept.getDname());
	}
}

如果查询雇员的姓名,查询出雇员并且找到一些部门呢?

EmpMapper.xml增加如下代码

select d.deptno,d.dname,d.loc,e.empno,e.ename 
 		from Dept d  join emp e  on d.deptno=e.deptno where 1=1AND ename like #{ename}AND dname like #{dept.dname}

EmpMapper.java增加如下代码:

public ListselectByLike(Emp e);

测试类:

public class Test24 {
	public static void main(String[] args) {
		SqlSession session=SqlSessionFactoryUtil.getSqlSession();
		EmpMapper mapper=session.getMapper(EmpMapper.class);
		Emp e=new Emp();
		e.setEname("张%");
		ListempList=mapper.selectByLike(e);
		for(Emp emp:empList){
			System.out.println("所有名字首字母为张的员工是:"+emp.getEname());
		}
	}
}

3 choose when  otherwise语句

有时候针对,有多重选择的情况,可以使用choose语句

select d.deptno,d.dname,d.loc,e.empno,e.ename,e.sal 
 		from Dept d  join emp e  on d.deptno=e.deptno where 1=1AND ename like #{ename}AND dname=#{dept.dname}AND sal >5000

EmpMapper.java增加接口

public ListselectByLikeTwo(Emp e);

public class Test25 {
	public static void main(String[] args) {
		SqlSession session=SqlSessionFactoryUtil.getSqlSession();
		EmpMapper mapper=session.getMapper(EmpMapper.class);
		Emp e=new Emp();
		Dept d=new Dept();
		d.setDname("开发部");
		e.setDept(d);
		ListempList=mapper.selectByLikeTwo(e);
		for(Emp emp:empList){
			System.out.println("所有开发部的员工:"+emp.getEname());
		}
	}
}

4.

select d.deptno,d.dname,d.loc from dept d where1=1AND	dname like #{dname}

测试类

public static void main(String[] args) {
		SqlSession session=SqlSessionFactoryUtil.getSqlSession();
		DeptMapper mapper=session.getMapper(DeptMapper.class);
		Dept d=new Dept(); //或者设置为null
		d.setDname("开发部");//设置为null的时候注释
		ListdeptList=mapper.selectByLikeName(d);
		System.out.println(deptList.get(0).getDname());
	}

5. foreach

    动态SQL迭代一个集合,通常放在In条件语句中,foreach允许指定一个集合,声明集合项和索引变量,他们可以用在元素体内,也允许指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是智能的,不会偶然地附加多余的分隔符。

   在EmpMapper.xml中增加代码段

select * from dept d where deptno in#{item}

在接口EmpMapper.java中增加代码

public ListselectDeptIn(Listlist);

测试类代码段

public class Test26 {
	public static void main(String[] args) {
		SqlSession session=SqlSessionFactoryUtil.getSqlSession();
		DeptMapper mapper=session.getMapper(DeptMapper.class);
		ListidList=new ArrayList();
		idList.add(5);
		idList.add(6);
		ListdeptList=mapper.selectDeptIn(idList);
		System.out.println(deptList.get(0).getDname());
		System.out.println(deptList.get(1).getDname());
	}
}

对于在Mybatis中出现的TooManyResultsException异常,需要将接口的方法返回类型修改为List泛型类型即可。

foreach元素的属性主要有 item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名.

index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.

open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符.

close表示以什么结束.

  select * from t_news n where    

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0823s