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>