一、动态sql
动态sql: sql的内容是变化的,可以根据条件获取到不同的sql语句。
主要是where都分发生变化-
动态sql的实现,使用的是mybatis提供的标签,<if> ,<where>,<foreach>
1)<if>是判断条件的,
语法<if test-"判断java对象的属性值">
部分sql语句
</if>
<select id="selectStudentIf" resultType="com.edu.domain.Student"> select id,name,age from student where <if test="name !=null and name!= ''"> name = #{name} </if> <if test="age >0"> and age > #{age} </if> </select>
2)<where>用来包含多个<if>的,当多个if有一个成立的,<where>会自动增加一个where关键字,
│并去掉if中多余的and , or等。
<select id="selectStudentWhere" resultType="com.edu.domain.Student"> select id,name,age from student <where> <if test="name !=null and name!= ''"> name = #{name} </if> <if test="age >0"> and age > #{age} </if> </where> </select>
控制台输出:select id,name,age from student WHERE age > ?
3) <foreach>循环java中的数组,list集合的。主要用在sql的in语句中.
学生id是1001,10o2,1003的三个学生
select * from student where id in (1001,1002,1003)
public List<student> selectFor (List<Integer> idlist)
List<Integer> list - new ...
list.add (1001) ;
list.add ( 1002) ;
list.add (1003);
dao.selectFor ( list)
<foreach collection="" item="" open="" close="" separator=""></foreach>
collection:表示接口中的方法参数的类型,如果是数组使用array,如果是list集合使用listitem:自定义的,表示数组和集合成员的变量
open:循坏开始是的字符
ciose:循环结束时的字符
separator:集合成员之间的分隔符
---xml文件----
<select id="selectStudentForEachStu" resultType="com.edu.domain.Student"> select * from student where id in <foreach collection="list" item="stu" open="(" close=")" separator=","> #{stu.id} </foreach> </select>
----测试方法---
List<Student> stuList = new ArrayList<Student>(); Student student = new Student(); student.setId(1); stuList.add(student);
student = new Student(); student.setId(3); stuList.add(student);
二、mapper
<mappers> <!--第一种方式:指定多个mapper文件 <mapper resource="com/edu/dao/studentDao.xml" /> <mapper resource="com/edu/dao/orderDao.xml"/>--> <!--第二种方式:使用包名 name: xml文件( mapper文件)所在的包名,这个包中所有xml文件一次都能加载给mybatis
使用package的要求: 1. mapper文件名称需要和接口名称一样,区分大小写的一样 2. mapper文件和dao接口需要在同一目录 <package name="com.edu.dao" /> <package name="com.edu.domain" />-->
三、分页
PageHelper