个人主页:Ali,S
最近更新:2022年7月2日
⛽ Java框架学习系列:Mybatis框架
⛳ Java基础学习系列:面向对象飞机大战
通信仿真学习系列:【硬件】【通信】【MATLAB】
个人简介:通信工程本硕、Java程序员。目前只会CURD
点赞 收藏 留言 都是我最大的动力
- 前言
- 一、OGNL表达式
- 二、动态SQL
- 1.动态标签if
- 2.动态标签set
- 3.动态标签choose
- 三、测试案例
- 1.测试标签if
- 2.测试标签set
- 3.测试标签choose
- 四、测试结果
- 1.if标签测试结果
- 2.set标签测试结果
- 3.choose标签测试结果
- 总结
前言
Mybatis的强大特性之一就是使用了动态SQL,使用JDBC或者其他框架时,需要根据不同的查询条件拼接SQL语句进行多字段的数据操作,操作十分繁琐,为解决这种复杂的SQL语句的编写,Mybatis提供了强大的动态SQL进行完善系列操作。
一、OGNL表达式
| 关系 | OGNL |
|---|---|
| 与关系 | m1 and m2 |
| 或关系 | m1 or m2 |
| 相等关系 | m1 == m2或者m1 eq m2 |
| 不等关系 | m1 != m2或者m2 neq m2 |
| 大于关系 | m1>m2或者m1 gt m2 |
| 小于关系 | m1 |
| 大于等于关系 | m1>=m2或者m1 gte m2 |
| 小于等于关系 | m1<=m2或者m1 lte m2 |
| 取反 | !m1或者not m1 |
if标签是最常用的标签之一,在查询、删除、更新操作时经常被被使用到,必须是和test属性联合使用。
select from Student and name like concat('%',#{name},'%') and address like concat('%',#{address},'%')
在实体类映射文件中,写上述查询操作,使用动态SQL语句中的if标签,配合test属性进行联合操作,判断name、address属性值非空并不为‘’,使用like关键字进行模糊匹配。需要注意的是在select语句中的条件可以改为下面的代码,并且不使用where关键字而是使用
类似于
3.动态标签chooseupdate student name=#{name}, address=#{address} where id=#{id}
有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。 choose标签就非常适合了,它有点像 Java 中的 switch 语句类似于java中的if-else if else结构。通常是与when和otherwise标签配合使用。
三、测试案例 1.测试标签if
@Test
public void testSelectDynamic1(){
SqlSession sqlSession=null;
try {
sqlSession=MybatisUtil.createSqlSession();
Student student = new Student();
student.setName("水");
List students=sqlSession.selectList("com.dao.StudentDao.selectDynamic1",student);
for (Student student1 : students) {
System.out.println(student1);
}
}catch (Exception e){
e.printStackTrace();
}finally {
MybatisUtil.closeSqlSession(sqlSession);
}
}
2.测试标签set
public void testSelectDynamic2(){
SqlSession sqlSession=null;
try {
sqlSession=MybatisUtil.createSqlSession();
Student student = new Student();
student.setName("水");
List students=sqlSession.selectList("com.dao.StudentDao.selectDynamic2",student);
for (Student student1 : students) {
System.out.println(student1);
}
}catch (Exception e){
e.printStackTrace();
}finally {
MybatisUtil.closeSqlSession(sqlSession);
}
}
3.测试标签choose
@Test
public void testUpdateDynamic2(){
SqlSession sqlSession=null;
try {
sqlSession=MybatisUtil.createSqlSession();
Student student = new Student();
student.setId(7);
student.setName("阿水");
student.setAddress("安徽阜阳升学至陕西西安");
int upNum = sqlSession.update("com.dao.StudentDao.updateDynamic1", student);
System.out.println("被修改了"+upNum+"条数据");
sqlSession.commit();
}catch (Exception e){
sqlSession.rollback();
e.printStackTrace();
}finally {
MybatisUtil.closeSqlSession(sqlSession);
}
}
四、测试结果
1.if标签测试结果
2.set标签测试结果
3.choose标签测试结果
总结
以上就是今天要讲的内容,本文完整的介绍了Mybatis的动态SQL操作。使用动态SQL,更快的完成数据的一系列操作。特别是在操作大量数据的时候效果更加明显,不用写复杂的SQL语句。



