Top

JAVA SPRINGMYBATIS02UNIT02

  1. if元素使用案例
  2. choose元素使用案例
  3. where元素使用案例
  4. set元素使用案例
  5. trim元素使用案例
  6. foreach元素使用案例

1 if元素使用案例

1.1 问题

使用MyBatis动态SQL的if元素,按部门做条件查询EMP员工信息表。

1.2 方案

if元素使用语法如下:

<select …>

SQL语句1

<if test=“条件表达式”>

SQL语句2

</if>

</select>

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:创建项目

复制项目SpringUnit01,创建项目SpringUnit02。

步骤二:增加根据部门查询员工的方法

创建封装查询条件的类Condition,代码如下:

package com.tarena.entity;

import java.util.List;

public class Condition {

	private Integer deptno;

	private Double salary;

	private List<Integer> empnos;

	public Integer getDeptno() {
		return deptno;
	}

	public void setDeptno(Integer deptno) {
		this.deptno = deptno;
	}

	public Double getSalary() {
		return salary;
	}

	public void setSalary(Double salary) {
		this.salary = salary;
	}

	public List<Integer> getEmpnos() {
		return empnos;
	}

	public void setEmpnos(List<Integer> empnos) {
		this.empnos = empnos;
	}

}

在EmpDao接口中增加方法findByDept,代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

#cold_bold	List<Emp> findByDept(Condition cond);

}

步骤三:实现根据部门查询员工

在EmpMapper.xml中增加根据部门查询员工的SQL,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

<!-- 其他配置略 -->
#cold_bold	<!-- if -->
#cold_bold	<!-- 查询部门下的所有员工 -->
#cold_bold	<select id="findByDept" 
#cold_bold		parameterType="com.tarena.entity.Condition"
#cold_bold		resultType="com.tarena.entity.Emp">
#cold_bold		select * from t_emp
#cold_bold		<if test="deptno != null">
#cold_bold			where deptno=#{deptno}
#cold_bold		</if>
#cold_bold	</select>
	
</mapper>

步骤四:测试根据部门查询员工的方法

在TestEmpDao中,增加测试方法testFindByDept,代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
//其他方法略
#cold_bold	/**
#cold_bold	 * 根据部门查询员工
#cold_bold	 */
#cold_bold	@Test
#cold_bold	public void testFindByDept() {
#cold_bold		ApplicationContext ctx = 
#cold_bold			new ClassPathXmlApplicationContext("applicationContext.xml");
#cold_bold		EmpDao dao = ctx.getBean(EmpDao.class);
#cold_bold		Condition cond = new Condition();
#cold_bold		cond.setDeptno(10);
#cold_bold		List<Emp> list = dao.findByDept(cond);
#cold_bold		for(Emp e : list) {
#cold_bold			System.out.println(
#cold_bold				e.getEmpno() + " " +
#cold_bold				e.getEname() + " " +
#cold_bold				e.getJob()
#cold_bold			);
#cold_bold		}
#cold_bold	}

}

1.4 完整代码

Condition完整代码如下:

package com.tarena.entity;

import java.util.List;

public class Condition {

	private Integer deptno;

	private Double salary;

	private List<Integer> empnos;

	public Integer getDeptno() {
		return deptno;
	}

	public void setDeptno(Integer deptno) {
		this.deptno = deptno;
	}

	public Double getSalary() {
		return salary;
	}

	public void setSalary(Double salary) {
		this.salary = salary;
	}

	public List<Integer> getEmpnos() {
		return empnos;
	}

	public void setEmpnos(List<Integer> empnos) {
		this.empnos = empnos;
	}

}

EmpDao完整代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

}

EmpMapper.xml完整代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

	<!-- 查询全部的员工 -->
	<select id="findAll" 
		resultType="com.tarena.entity.Emp">
		select * from t_emp
	</select>

	<!-- if -->
	<!-- 查询部门下的所有员工 -->
	<select id="findByDept" 
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<if test="deptno != null">
			where deptno=#{deptno}
		</if>
	</select>
	
</mapper>

TestEmpDao完整代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
	/**
	 * 测试查询全部员工
	 */
	@Test
	public void testFindAll() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext(
					"applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		List<Emp> list = dao.findAll();
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 根据部门查询员工
	 */
	@Test
	public void testFindByDept() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(10);
		List<Emp> list = dao.findByDept(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}

}

2 choose元素使用案例

2.1 问题

使用MyBatis动态SQL的choose元素,按工资做条件查询EMP员工信息表。

2.2 方案

choose元素使用语法如下:

<select …>

SQL语句1

<choose>

<when test=”条件表达式”>

SQL语句2

</when>

<otherwise>

SQL语句3

</otherwise>

</choose>

</select>

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:增加根据工资查询员工的方法

在EmpDao中增加方法findBySalary,代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

#cold_bold	List<Emp> findBySalary(Condition cond);

}

步骤二:实现根据工资查询员工

在EmpMapper.xml中增加根据工资查询员工的SQL,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

<!-- 其他配置略 -->
	
#cold_bold	<!-- choose -->
#cold_bold	<!-- 查询大于当前收入的员工 -->
#cold_bold	<select id="findBySalary"
#cold_bold		parameterType="com.tarena.entity.Condition"
#cold_bold		resultType="com.tarena.entity.Emp">
#cold_bold		select * from t_emp
#cold_bold		<choose>
#cold_bold			<when test="salary > 3000">
#cold_bold				where sal>#{salary}
#cold_bold			</when>
#cold_bold			<otherwise>
#cold_bold				where sal>=3000
#cold_bold			</otherwise>
#cold_bold		</choose>
#cold_bold	</select>
	
</mapper>

步骤三:测试根据工资查询员工的方法

在TestEmpDao中增加方法testFindBySalary,代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
	//其他方法略
	
#cold_bold	/**
#cold_bold	 * 查询大于当前收入的员工
#cold_bold	 */
#cold_bold	@Test
#cold_bold	public void testFindBySalary() {
#cold_bold		ApplicationContext ctx = 
#cold_bold			new ClassPathXmlApplicationContext("applicationContext.xml");
#cold_bold		EmpDao dao = ctx.getBean(EmpDao.class);
#cold_bold		Condition cond = new Condition();
#cold_bold		cond.setSalary(4000.0);
#cold_bold		List<Emp> list = dao.findBySalary(cond);
#cold_bold		for(Emp e : list) {
#cold_bold			System.out.println(
#cold_bold				e.getEmpno() + " " +
#cold_bold				e.getEname() + " " +
#cold_bold				e.getJob()
#cold_bold			);
#cold_bold		}
#cold_bold	}

}

2.4 完整代码

EmpDao完整代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

	List<Emp> findBySalary(Condition cond);

}

EmpMapper.xml完整代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

	<!-- 查询全部的员工 -->
	<select id="findAll" 
		resultType="com.tarena.entity.Emp">
		select * from t_emp
	</select>

	<!-- if -->
	<!-- 查询部门下的所有员工 -->
	<select id="findByDept" 
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<if test="deptno != null">
			where deptno=#{deptno}
		</if>
	</select>
	
	<!-- choose -->
	<!-- 查询大于当前收入的员工 -->
	<select id="findBySalary"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<choose>
			<when test="salary > 3000">
				where sal>#{salary}
			</when>
			<otherwise>
				where sal>=3000
			</otherwise>
		</choose>
	</select>
	
</mapper>

TestEmpDao完整代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
	/**
	 * 测试查询全部员工
	 */
	@Test
	public void testFindAll() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext(
					"applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		List<Emp> list = dao.findAll();
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 根据部门查询员工
	 */
	@Test
	public void testFindByDept() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(10);
		List<Emp> list = dao.findByDept(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 查询大于当前收入的员工
	 */
	@Test
	public void testFindBySalary() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setSalary(4000.0);
		List<Emp> list = dao.findBySalary(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}

}

3 where元素使用案例

3.1 问题

使用MyBatis动态SQL的where元素,查询当前部门下大于指定工资的员工。

3.2 方案

where元素的使用语法如下:

<select …>

select 字段 from 表

<where>

动态追加条件

</where>

</select>

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:增加根据部门和工资查询员工的方法

在EmpDao中增加方法findByDeptAndSalary,代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

	List<Emp> findBySalary(Condition cond);

#cold_bold	List<Emp> findByDeptAndSalary(Condition cond);

}

步骤二:实现根据部门和工资查询员工的方法

在EmpMapper.xml中增加根据部门和工资查询员工的SQL,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

	<!-- 其他配置略 -->
	
#cold_bold	<!-- where -->
#cold_bold	<!-- 查询当前部门下,大于当前收入的员工 -->
#cold_bold	<select id="findByDeptAndSalary"
#cold_bold		parameterType="com.tarena.entity.Condition"
#cold_bold		resultType="com.tarena.entity.Emp">
#cold_bold		select * from t_emp
#cold_bold		<where>
#cold_bold			<if test="deptno != null">
#cold_bold				and deptno=#{deptno}
#cold_bold			</if>
#cold_bold			<if test="salary != null">
#cold_bold				and sal>#{salary}
#cold_bold			</if>
#cold_bold		</where>
#cold_bold	</select>
	
</mapper>

步骤三:测试根据部门和工资查询员工的方法

在TestEmpDao中,增加测试方法testFindByDeptAndSalary,代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

//其他方法略
	
#cold_bold	/**
#cold_bold	 * 查询当前部门下,大于当前收入的员工
#cold_bold	 */
#cold_bold	@Test
#cold_bold	public void testFindByDeptAndSalary() {
#cold_bold		ApplicationContext ctx = 
#cold_bold			new ClassPathXmlApplicationContext("applicationContext.xml");
#cold_bold		EmpDao dao = ctx.getBean(EmpDao.class);
#cold_bold		Condition cond = new Condition();
#cold_bold		cond.setDeptno(20);
#cold_bold		cond.setSalary(2000.0);
#cold_bold		List<Emp> list = dao.findByDeptAndSalary(cond);
#cold_bold		for(Emp e : list) {
#cold_bold			System.out.println(
#cold_bold				e.getEmpno() + " " +
#cold_bold				e.getEname() + " " +
#cold_bold				e.getJob()
#cold_bold			);
#cold_bold		}
#cold_bold	}

}

3.4 完整代码

EmpDao完整代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

	List<Emp> findBySalary(Condition cond);

	List<Emp> findByDeptAndSalary(Condition cond);

}

EmpMapper.xml完整代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

	<!-- 查询全部的员工 -->
	<select id="findAll" 
		resultType="com.tarena.entity.Emp">
		select * from t_emp
	</select>

	<!-- if -->
	<!-- 查询部门下的所有员工 -->
	<select id="findByDept" 
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<if test="deptno != null">
			where deptno=#{deptno}
		</if>
	</select>
	
	<!-- choose -->
	<!-- 查询大于当前收入的员工 -->
	<select id="findBySalary"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<choose>
			<when test="salary > 3000">
				where sal>#{salary}
			</when>
			<otherwise>
				where sal>=3000
			</otherwise>
		</choose>
	</select>
	
	<!-- where -->
	<!-- 查询当前部门下,大于当前收入的员工 -->
	<select id="findByDeptAndSalary"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<where>
			<if test="deptno != null">
				and deptno=#{deptno}
			</if>
			<if test="salary != null">
				and sal>#{salary}
			</if>
		</where>
	</select>
	
</mapper>

TestEmpDao完整代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
	/**
	 * 测试查询全部员工
	 */
	@Test
	public void testFindAll() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext(
					"applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		List<Emp> list = dao.findAll();
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 根据部门查询员工
	 */
	@Test
	public void testFindByDept() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(10);
		List<Emp> list = dao.findByDept(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 查询大于当前收入的员工
	 */
	@Test
	public void testFindBySalary() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setSalary(4000.0);
		List<Emp> list = dao.findBySalary(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 查询当前部门下,大于当前收入的员工
	 */
	@Test
	public void testFindByDeptAndSalary() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(20);
		cond.setSalary(2000.0);
		List<Emp> list = dao.findByDeptAndSalary(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}

}

4 set元素使用案例

4.1 问题

使用MyBatis动态SQL的set元素,实现更新员工。

4.2 方案

set元素使用语法如下:

<update …>

update 表

<set>

动态追加更新字段

</set>

</update>

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:增加更新员工的方法

在EmpDao中增加更新员工的方法,代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

	List<Emp> findBySalary(Condition cond);

	List<Emp> findByDeptAndSalary(Condition cond);

#cold_bold	void update(Emp emp);

}

步骤二:实现更新员工的方法

在EmpMapper.xml中增加更新员工的SQL,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

	<!-- 其他配置略 -->

#cold_bold	<!-- set -->
#cold_bold	<!-- 更新员工 -->
#cold_bold	<update id="update"
#cold_bold		parameterType="com.tarena.entity.Emp">
#cold_bold		update t_emp
#cold_bold		<set>
#cold_bold			<if test="ename!=null">
#cold_bold				ename=#{ename},
#cold_bold			</if>
#cold_bold			<if test="job!=null">
#cold_bold				job=#{job},
#cold_bold			</if>
#cold_bold		</set>
#cold_bold		where empno=#{empno}
#cold_bold	</update>
	
</mapper>

步骤三:测试更新员工的方法

在TestEmpDao中增加测试更新员工的方法,代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
	//其他方法略
	
#cold_bold	/**
#cold_bold	 * 更新员工
#cold_bold	 */
#cold_bold	@Test
#cold_bold	public void testUpdate() {
#cold_bold		ApplicationContext ctx = 
#cold_bold			new ClassPathXmlApplicationContext("applicationContext.xml");
#cold_bold		EmpDao dao = ctx.getBean(EmpDao.class);
#cold_bold		Emp e = new Emp();
#cold_bold		e.setEmpno(14);
#cold_bold		e.setEname("Leo");
#cold_bold		dao.update(e);
#cold_bold	}

}

4.4 完整代码

EmpDao完整代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

	List<Emp> findBySalary(Condition cond);

	List<Emp> findByDeptAndSalary(Condition cond);

	void update(Emp emp);

}

EmpMapper.xml完整代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

	<!-- 查询全部的员工 -->
	<select id="findAll" 
		resultType="com.tarena.entity.Emp">
		select * from t_emp
	</select>

	<!-- if -->
	<!-- 查询部门下的所有员工 -->
	<select id="findByDept" 
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<if test="deptno != null">
			where deptno=#{deptno}
		</if>
	</select>
	
	<!-- choose -->
	<!-- 查询大于当前收入的员工 -->
	<select id="findBySalary"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<choose>
			<when test="salary > 3000">
				where sal>#{salary}
			</when>
			<otherwise>
				where sal>=3000
			</otherwise>
		</choose>
	</select>
	
	<!-- where -->
	<!-- 查询当前部门下,大于当前收入的员工 -->
	<select id="findByDeptAndSalary"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<where>
			<if test="deptno != null">
				and deptno=#{deptno}
			</if>
			<if test="salary != null">
				and sal>#{salary}
			</if>
		</where>
	</select>
	
	<!-- set -->
	<!-- 更新员工 -->
	<update id="update"
		parameterType="com.tarena.entity.Emp">
		update t_emp
		<set>
			<if test="ename!=null">
				ename=#{ename},
			</if>
			<if test="job!=null">
				job=#{job},
			</if>
		</set>
		where empno=#{empno}
	</update>
	
</mapper>

TestEmpDao完整代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
	/**
	 * 测试查询全部员工
	 */
	@Test
	public void testFindAll() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext(
					"applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		List<Emp> list = dao.findAll();
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 根据部门查询员工
	 */
	@Test
	public void testFindByDept() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(10);
		List<Emp> list = dao.findByDept(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 查询大于当前收入的员工
	 */
	@Test
	public void testFindBySalary() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setSalary(4000.0);
		List<Emp> list = dao.findBySalary(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 查询当前部门下,大于当前收入的员工
	 */
	@Test
	public void testFindByDeptAndSalary() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(20);
		cond.setSalary(2000.0);
		List<Emp> list = dao.findByDeptAndSalary(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 更新员工
	 */
	@Test
	public void testUpdate() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Emp e = new Emp();
		e.setEmpno(14);
		e.setEname("Leo");
		dao.update(e);
	}

}

5 trim元素使用案例

5.1 问题

使用MyBatis动态SQL的trim元素代替where和set,重写findByDeptAndSalary和update方法。

5.2 方案

trim元素使用语法如下:

<!– 等价于where元素 -->

<trim prefix="WHERE" prefixOverrides="AND |OR ">

</trim>

<!– 等价于set元素 -->

<trim prefix="SET" suffixOverrides=",">

</trim>

5.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:重新增加根据部门和工资查询员工的方法,以及更新员工的方法

在EmpDao中增加findByDeptAndSalary2和update2方法,代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

	List<Emp> findBySalary(Condition cond);

	List<Emp> findByDeptAndSalary(Condition cond);

	void update(Emp emp);

#cold_bold	List<Emp> findByDeptAndSalary2(Condition cond);
#cold_bold
#cold_bold	void update2(Emp emp);

}

步骤二:重新实现根据部门和工资查询员工的方法,以及更新员工的方法

在EmpMapper.xml中,实现findByDeptAndSalary2和update2,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

	<!-- 其他配置略 -->
	
#cold_bold	<!-- 使用trim代替where -->
#cold_bold	<!-- 查询当前部门下,大于当前收入的员工 -->
#cold_bold	<select id="findByDeptAndSalary2"
#cold_bold		parameterType="com.tarena.entity.Condition"
#cold_bold		resultType="com.tarena.entity.Emp">
#cold_bold		select * from t_emp
#cold_bold		<trim prefix="where" prefixOverrides="and">
#cold_bold			<if test="deptno != null">
#cold_bold				and deptno=#{deptno}
#cold_bold			</if>
#cold_bold			<if test="salary != null">
#cold_bold				and sal>#{salary}
#cold_bold			</if>
#cold_bold		</trim>
#cold_bold	</select>		
#cold_bold	
#cold_bold	<!-- 使用trim代替set -->
#cold_bold	<update id="update2"
#cold_bold		parameterType="com.tarena.entity.Emp">
#cold_bold		update t_emp
#cold_bold		<trim prefix="set" suffixOverrides=",">
#cold_bold			<if test="ename!=null">
#cold_bold				ename=#{ename},
#cold_bold			</if>
#cold_bold			<if test="job!=null">
#cold_bold				job=#{job},
#cold_bold			</if>
#cold_bold		</trim>
#cold_bold		where empno=#{empno}
#cold_bold	</update>
	
</mapper>

步骤三:重新测试根据部门和工资查询员工的方法,以及更新员工的方法

在TestEmpDao中,增加测试findByDeptAndSalary2和update2方法,代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
	//其他方法略

#cold_bold	/**
#cold_bold	 * 查询当前部门下,大于当前收入的员工
#cold_bold	 */
#cold_bold	@Test
#cold_bold	public void testFindByDeptAndSalary2() {
#cold_bold		ApplicationContext ctx = 
#cold_bold			new ClassPathXmlApplicationContext("applicationContext.xml");
#cold_bold		EmpDao dao = ctx.getBean(EmpDao.class);
#cold_bold		Condition cond = new Condition();
#cold_bold		cond.setDeptno(20);
#cold_bold		cond.setSalary(2000.0);
#cold_bold		List<Emp> list = dao.findByDeptAndSalary2(cond);
#cold_bold		for(Emp e : list) {
#cold_bold			System.out.println(
#cold_bold				e.getEmpno() + " " +
#cold_bold				e.getEname() + " " +
#cold_bold				e.getJob()
#cold_bold			);
#cold_bold		}
#cold_bold	}
#cold_bold	
#cold_bold	/**
#cold_bold	 * 更新员工
#cold_bold	 */
#cold_bold	@Test
#cold_bold	public void testUpdate2() {
#cold_bold		ApplicationContext ctx = 
#cold_bold			new ClassPathXmlApplicationContext("applicationContext.xml");
#cold_bold		EmpDao dao = ctx.getBean(EmpDao.class);
#cold_bold		Emp e = new Emp();
#cold_bold		e.setEmpno(14);
#cold_bold		e.setEname("Lee");
#cold_bold		dao.update2(e);
#cold_bold	}

}

5.4 完整代码

EmpDao完整代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

	List<Emp> findBySalary(Condition cond);

	List<Emp> findByDeptAndSalary(Condition cond);

	void update(Emp emp);

	List<Emp> findByDeptAndSalary2(Condition cond);

	void update2(Emp emp);

}

EmpMapper.xml完整代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

	<!-- 查询全部的员工 -->
	<select id="findAll" 
		resultType="com.tarena.entity.Emp">
		select * from t_emp
	</select>

	<!-- if -->
	<!-- 查询部门下的所有员工 -->
	<select id="findByDept" 
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<if test="deptno != null">
			where deptno=#{deptno}
		</if>
	</select>
	
	<!-- choose -->
	<!-- 查询大于当前收入的员工 -->
	<select id="findBySalary"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<choose>
			<when test="salary > 3000">
				where sal>#{salary}
			</when>
			<otherwise>
				where sal>=3000
			</otherwise>
		</choose>
	</select>
	
	<!-- where -->
	<!-- 查询当前部门下,大于当前收入的员工 -->
	<select id="findByDeptAndSalary"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<where>
			<if test="deptno != null">
				and deptno=#{deptno}
			</if>
			<if test="salary != null">
				and sal>#{salary}
			</if>
		</where>
	</select>
	
	<!-- set -->
	<!-- 更新员工 -->
	<update id="update"
		parameterType="com.tarena.entity.Emp">
		update t_emp
		<set>
			<if test="ename!=null">
				ename=#{ename},
			</if>
			<if test="job!=null">
				job=#{job},
			</if>
		</set>
		where empno=#{empno}
	</update>
	
	<!-- 使用trim代替where -->
	<!-- 查询当前部门下,大于当前收入的员工 -->
	<select id="findByDeptAndSalary2"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<trim prefix="where" prefixOverrides="and">
			<if test="deptno != null">
				and deptno=#{deptno}
			</if>
			<if test="salary != null">
				and sal>#{salary}
			</if>
		</trim>
	</select>		
	
	<!-- 使用trim代替set -->
	<update id="update2"
		parameterType="com.tarena.entity.Emp">
		update t_emp
		<trim prefix="set" suffixOverrides=",">
			<if test="ename!=null">
				ename=#{ename},
			</if>
			<if test="job!=null">
				job=#{job},
			</if>
		</trim>
		where empno=#{empno}
	</update>
	
</mapper>

TestEmpDao完整代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
	/**
	 * 测试查询全部员工
	 */
	@Test
	public void testFindAll() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext(
					"applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		List<Emp> list = dao.findAll();
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 根据部门查询员工
	 */
	@Test
	public void testFindByDept() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(10);
		List<Emp> list = dao.findByDept(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 查询大于当前收入的员工
	 */
	@Test
	public void testFindBySalary() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setSalary(4000.0);
		List<Emp> list = dao.findBySalary(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 查询当前部门下,大于当前收入的员工
	 */
	@Test
	public void testFindByDeptAndSalary() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(20);
		cond.setSalary(2000.0);
		List<Emp> list = dao.findByDeptAndSalary(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 更新员工
	 */
	@Test
	public void testUpdate() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Emp e = new Emp();
		e.setEmpno(14);
		e.setEname("Leo");
		dao.update(e);
	}
	
	/**
	 * 查询当前部门下,大于当前收入的员工
	 */
	@Test
	public void testFindByDeptAndSalary2() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(20);
		cond.setSalary(2000.0);
		List<Emp> list = dao.findByDeptAndSalary2(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 更新员工
	 */
	@Test
	public void testUpdate2() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Emp e = new Emp();
		e.setEmpno(14);
		e.setEname("Lee");
		dao.update2(e);
	}

}

6 foreach元素使用案例

6.1 问题

使用MyBatis动态SQL的foreach元素,实现根据一组员工ID查询员工。

6.2 方案

foreach元素使用语法如下:

<select …>

select 字段 from 表 where 字段 in

<foreach collection=“集合”  item=“迭代变量"

open="(" separator="," close=")">

#{迭代变量}

</foreach>

</select>

6.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:增加根据一组员工ID查询员工的方法

在EmpDao中增加根据一组员工ID查询员工的方法,代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

	List<Emp> findBySalary(Condition cond);

	List<Emp> findByDeptAndSalary(Condition cond);

	void update(Emp emp);

	List<Emp> findByDeptAndSalary2(Condition cond);

	void update2(Emp emp);

#cold_bold	List<Emp> findByIds(Condition cond);

}

步骤二:实现根据一组员工ID查询员工的方法

在EmpMapper.xml中增加根据一组员工ID查询员工的SQL,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

	<!-- 其他配置略 -->
	
#cold_bold	<!-- foreach -->
#cold_bold	<!-- 根据ID查询员工 -->
#cold_bold	<select id="findByIds"
#cold_bold		parameterType="com.tarena.entity.Condition"
#cold_bold		resultType="com.tarena.entity.Emp">
#cold_bold		select * from t_emp where empno in 
#cold_bold		<foreach collection="empnos" 
#cold_bold			open="(" close=")" separator="," item="id">
#cold_bold			#{id}
#cold_bold		</foreach>
#cold_bold	</select>
	
</mapper>

步骤三:测试根据一组员工ID查询员工的方法

在TestEmpDao中增加测试findByIds的方法,代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
	//其他方法略	

#cold_bold	/**
#cold_bold	 * 根据员工ID查询员工
#cold_bold	 */
#cold_bold	@Test
#cold_bold	public void testFindByIds() {
#cold_bold		ApplicationContext ctx = 
#cold_bold			new ClassPathXmlApplicationContext("applicationContext.xml");
#cold_bold		EmpDao dao = ctx.getBean(EmpDao.class);
#cold_bold		List<Integer> ids = new ArrayList<Integer>();
#cold_bold		ids.add(3);
#cold_bold		ids.add(7);
#cold_bold		ids.add(8);
#cold_bold		Condition cond = new Condition();
#cold_bold		cond.setEmpnos(ids);
#cold_bold		List<Emp> list = dao.findByIds(cond);
#cold_bold		for(Emp e : list) {
#cold_bold			System.out.println(
#cold_bold				e.getEmpno() + " " +
#cold_bold				e.getEname() + " " +
#cold_bold				e.getJob()
#cold_bold			);
#cold_bold		}
#cold_bold	}

}

6.4 完整代码

EmpDao完整代码如下:

package com.tarena.dao;

import java.util.List;

import com.tarena.annotation.MyBatisRepository;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 * 员工表的DAO组件
 */
@MyBatisRepository
public interface EmpDao {

	List<Emp> findAll();

	List<Emp> findByDept(Condition cond);

	List<Emp> findBySalary(Condition cond);

	List<Emp> findByDeptAndSalary(Condition cond);

	void update(Emp emp);

	List<Emp> findByDeptAndSalary2(Condition cond);

	void update2(Emp emp);

	List<Emp> findByIds(Condition cond);

}

EmpMapper.xml完整代码如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "/ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.tarena.dao.EmpDao">

	<!-- 查询全部的员工 -->
	<select id="findAll" 
		resultType="com.tarena.entity.Emp">
		select * from t_emp
	</select>

	<!-- if -->
	<!-- 查询部门下的所有员工 -->
	<select id="findByDept" 
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<if test="deptno != null">
			where deptno=#{deptno}
		</if>
	</select>
	
	<!-- choose -->
	<!-- 查询大于当前收入的员工 -->
	<select id="findBySalary"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<choose>
			<when test="salary > 3000">
				where sal>#{salary}
			</when>
			<otherwise>
				where sal>=3000
			</otherwise>
		</choose>
	</select>
	
	<!-- where -->
	<!-- 查询当前部门下,大于当前收入的员工 -->
	<select id="findByDeptAndSalary"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<where>
			<if test="deptno != null">
				and deptno=#{deptno}
			</if>
			<if test="salary != null">
				and sal>#{salary}
			</if>
		</where>
	</select>
	
	<!-- set -->
	<!-- 更新员工 -->
	<update id="update"
		parameterType="com.tarena.entity.Emp">
		update t_emp
		<set>
			<if test="ename!=null">
				ename=#{ename},
			</if>
			<if test="job!=null">
				job=#{job},
			</if>
		</set>
		where empno=#{empno}
	</update>
	
	<!-- 使用trim代替where -->
	<!-- 查询当前部门下,大于当前收入的员工 -->
	<select id="findByDeptAndSalary2"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp
		<trim prefix="where" prefixOverrides="and">
			<if test="deptno != null">
				and deptno=#{deptno}
			</if>
			<if test="salary != null">
				and sal>#{salary}
			</if>
		</trim>
	</select>		
	
	<!-- 使用trim代替set -->
	<update id="update2"
		parameterType="com.tarena.entity.Emp">
		update t_emp
		<trim prefix="set" suffixOverrides=",">
			<if test="ename!=null">
				ename=#{ename},
			</if>
			<if test="job!=null">
				job=#{job},
			</if>
		</trim>
		where empno=#{empno}
	</update>
	
	<!-- foreach -->
	<!-- 根据ID查询员工 -->
	<select id="findByIds"
		parameterType="com.tarena.entity.Condition"
		resultType="com.tarena.entity.Emp">
		select * from t_emp where empno in 
		<foreach collection="empnos" 
			open="(" close=")" separator="," item="id">
			#{id}
		</foreach>
	</select>
	
</mapper>

TestEmpDao完整代码如下:

package com.tarena.test;

import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.dao.EmpDao;
import com.tarena.entity.Condition;
import com.tarena.entity.Emp;

/**
 *	EmpDao测试类
 */
public class TestEmpDao {
	
	/**
	 * 测试查询全部员工
	 */
	@Test
	public void testFindAll() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext(
					"applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		List<Emp> list = dao.findAll();
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 根据部门查询员工
	 */
	@Test
	public void testFindByDept() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(10);
		List<Emp> list = dao.findByDept(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 查询大于当前收入的员工
	 */
	@Test
	public void testFindBySalary() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setSalary(4000.0);
		List<Emp> list = dao.findBySalary(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 查询当前部门下,大于当前收入的员工
	 */
	@Test
	public void testFindByDeptAndSalary() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(20);
		cond.setSalary(2000.0);
		List<Emp> list = dao.findByDeptAndSalary(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 更新员工
	 */
	@Test
	public void testUpdate() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Emp e = new Emp();
		e.setEmpno(14);
		e.setEname("Leo");
		dao.update(e);
	}
	
	/**
	 * 查询当前部门下,大于当前收入的员工
	 */
	@Test
	public void testFindByDeptAndSalary2() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Condition cond = new Condition();
		cond.setDeptno(20);
		cond.setSalary(2000.0);
		List<Emp> list = dao.findByDeptAndSalary2(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}
	
	/**
	 * 更新员工
	 */
	@Test
	public void testUpdate2() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		Emp e = new Emp();
		e.setEmpno(14);
		e.setEname("Lee");
		dao.update2(e);
	}
	
	/**
	 * 根据员工ID查询员工
	 */
	@Test
	public void testFindByIds() {
		ApplicationContext ctx = 
			new ClassPathXmlApplicationContext("applicationContext.xml");
		EmpDao dao = ctx.getBean(EmpDao.class);
		List<Integer> ids = new ArrayList<Integer>();
		ids.add(3);
		ids.add(7);
		ids.add(8);
		Condition cond = new Condition();
		cond.setEmpnos(ids);
		List<Emp> list = dao.findByIds(cond);
		for(Emp e : list) {
			System.out.println(
				e.getEmpno() + " " +
				e.getEname() + " " +
				e.getJob()
			);
		}
	}

}