1) 查询条件不确定,需要根据情况产生SQL语法,这种情况叫动态SQL
/*** 持久层* @author AdminTC*/ public class StudentDao {/*** 动态SQL--查询*/public List<Student> dynaSQLwithSelect(String name,Double sal) throws Exception{SqlSession sqlSession = MyBatisUtil.getSqlSession();try{Map<String,Object> map = new LinkedHashMap<String, Object>();map.put("pname",name);map.put("psal",sal);return sqlSession.selectList("mynamespace.dynaSQLwithSelect",map);}catch(Exception e){e.printStackTrace();sqlSession.rollback();throw e;}finally{sqlSession.commit();MyBatisUtil.closeSqlSession();}}public static void main(String[] args) throws Exception{StudentDao dao = new StudentDao();List<Student> studentList1 = dao.dynaSQLwithSelect("哈哈",null);for(Student student : studentList1){System.out.println(student.getId()+":"+student.getName()+":"+student.getSal());}System.out.println("--------------");List<Student> studentList2 = dao.dynaSQLwithSelect(null,7000D);for(Student student : studentList2){System.out.println(student.getId()+":"+student.getName()+":"+student.getSal());}System.out.println("--------------");List<Student> studentList3 = dao.dynaSQLwithSelect("哈哈",7000D);for(Student student : studentList3){System.out.println(student.getId()+":"+student.getName()+":"+student.getSal());}System.out.println("--------------");List<Student> studentList4 = dao.dynaSQLwithSelect(null,null);for(Student student : studentList4){System.out.println(student.getId()+":"+student.getName()+":"+student.getSal());}System.out.println("--------------");} }
StudentMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="mynamespace"><select id="dynaSQLwithSelect" parameterType="map" resultType="loaderman.Student">select id,name,sal from students<where><if test="pname!=null">and name=#{pname}</if><if test="psal!=null">and sal=#{psal}</if></where> </select> </mapper>