今天讲的是数据库操作的动态查询,即根据前台传来的值,动态拼接SQL语句。对于传入参数有两种方法:
- 封装成对象进行操作
- 封装成Map进行操作
封装成对象操作方法
定义传入的参数类型为CollectionMap,并封装成类,使用时创建对象,往里传值就好。
使用的是标签,常用的有以下四个:
- if
- choose(when,otherwise)
- trim(where,set)
- foreach
使用时将以上标签放在SQL语句中:
<select id="getEmployees" parameterType="CollectionMap" resultType="employee">
select * from employee
-- 相当于在employee后追加了where
<where>
-- 如果empno的值不为0,执行empno=传进来的值
<if test="empno!=0">
empno=#{empno}
</if>
-- 如果ename不为空,执行模糊查询:ename like 传进来的值
-- 如果上一个if没有执行到,and会自动去掉
<if test="ename!=null">
and ename like #{ename}
</if>
<if test="deptno!=0">
deptno=#{deptno}
</if>
</where>
</select>
main方法,
public static void main(String[] args) throws IOException{
SqlSession session= MybatisUtils.openSession();
String statement="com.neusoft.dao.emplInfoMapper.getEmployees";
//以POJO方式查询员工
CollectionMap cm=new CollectionMap();
//cm.setEmpno(1);
cm.setEname("%o%");
List<employee> users=session.selectList(statement, cm);
for(employee u:users)
{
System.out.println(u.toString());
}
session.close();
}
附上源码:链接:https://pan.baidu.com/s/1e8-wG5kNIcRlFk4hsoWdEQ 密码:46ep