一.动态查询语句
1.StudentMapper.xml
<select id="findAll" parameterType="com.mybatis.dynamic.Student" resultMap="studentMap" >
select id,name,age from student
<where>
<if test="id!=null" >
and id =
</if >
<if test="name!=null" >
and name =
</if >
<if test="age!=null" >
and age =
</if >
</where>
</select>
2.dao类
public List<Student> findAll(Student student){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
try {
List<Student> students = sqlSession.selectList("studentDynamic.findAll" ,student);
sqlSession.commit();
return students;
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
sqlSession.rollback();
}finally {
MyBatisUtil.closeSqlSession();
}
return null;
}
3.测试
/**
* @param args
*/
public static void main(String[] args) {
StudentDao dao = new StudentDao();
System.out.println("-----------3------------" );
List<Student> students3 = dao.findAll(new Student(null, "hehe" , 10 ));
for (Student student : students3) {
System.out.println(student.getName()+":" +student.getAge());
}
}
二.动态更新语句
1.StudentMapper.xml
<update id="update" parameterType="com.mybatis.dynamic.Student" >
update student
<set>
<if test="name!=null" >
name =
</if >
<if test="age!=null" >
age =
</if >
</set>
<where>
<if test="id!=null" >
and id =
</if >
</where>
</update>
2.dao类
public void update(Student student){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
try {
sqlSession.update("studentDynamic.update" ,student);
sqlSession.commit();
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
sqlSession.rollback();
}finally {
MyBatisUtil.closeSqlSession();
}
}
3.测试
StudentDao dao = new StudentDao();
dao.update(new Student("0002" ,"xiaoNiao" ,100 ));
三.动态删除
1.StudentMapper.xml
<!--
foreach:迭代数组元素
open:表示开始符号
close:表示结束符号
separator:表示分割符号
item:表示迭代的数组
-->
<delete id="delete" >
delete from student where id in
<foreach collection="array" open="(" close=")" separator="," item="ids" >
${ids}
</foreach>
</delete>
<!--
foreach:迭代list元素
open:表示开始符号
close:表示结束符号
separator:表示分割符号
item:表示迭代的list元素
-->
<delete id="deleteList" >
delete from student where id in
<foreach collection="list" open="(" close=")" separator="," item="ids" >
${ids}
</foreach>
</delete>
2.dao类
public void delete(String[] ids){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
try {
sqlSession.delete("studentDynamic.delete" ,ids);
sqlSession.commit();
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
sqlSession.rollback();
}finally {
MyBatisUtil.closeSqlSession();
}
}
3.测试类
StudentDao dao = new StudentDao();
dao.delete(new String[]{"0001" ,"0003" });
四.动态添加
1.StudentMapper.xml
<sql id="key" >
<trim suffixOverrides="," >
<if test="id!=null" >
id,
</if >
<if test="name!=null" >
name,
</if >
<if test="age!=null" >
age,
</if >
</trim>
</sql>
<sql id="value" >
<!-- 去掉最后的逗号 -->
<trim suffixOverrides="," >
<if test="id!=null" >
</if >
<if test="name!=null" >
</if >
<if test="age!=null" >
</if >
</trim>
</sql>
<insert id="addStudent" parameterType="com.mybatis.dynamic.Student" >
insert into student(<include refid="key" />) values(<include refid="value" />);
</insert>
2.dao类
public void insert(Student student){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
try {
sqlSession.insert("studentDynamic.addStudent" ,student);
sqlSession.commit();
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
sqlSession.rollback();
}finally {
MyBatisUtil.closeSqlSession();
}
}
3.测试
dao.insert(new Student("0001" ,"1111" , 20 ));
dao.insert(new Student("0003" ,null, 20 ));