在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

详解Mybatis动态sql

2016-7-29 15:37| 发布者: zhangjf| 查看: 732| 评论: 0

摘要: 1.什么是mybatis动态sql 看到动态,我们就应该想到,这是一个可以变化的sql语句 MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑 2.mybatis动态sql使用前准备 a.数据库表 b.创建 ...

1.什么是mybatis动态sql

看到动态,我们就应该想到,这是一个可以变化的sql语句

MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑

2.mybatis动态sql使用前准备

a.数据库表

b.创建类

3.使用mybatis动态sql,得先知道一些属性值

一,插入

selectKey:在sql语句前后或后执行的sql语句

keyColumn:对应字段名或别名

keyProperty:对应实体类的属性名或map的key值

order:在执行语句前或后执行

resultType:返回结果的类型

第一种方式:最简单的动态sql 插入

  1. insert into course values(seq_course.nextval,#{courseCode},#{courseName})
  2. select max(id) currId from course
复制代码

测试

测试结果

第二种方式:如果我不想插入这么多的字段,courseName这个字段我不想插入,那么第一种这种方式,肯定是不行的

  1. insert into course(id,
  2. courseCode,
  3. courseName
  4. )
  5. values(seq_course.nextval,
  6. #{courseCode},
  7. #{courseName}
  8. )
复制代码

测试及结果


由此可见,这种方式,在我不想插入courseCode这个字段的时候,我们是可以实现的

现在为题又来了,如果我们想把最后一个字段变为空,或者两个字段都变为空的时候,会出现什么情况

最后一个字段变为空

控制台第一个问号后面好像多了一个逗号

两个字段都变为空试试

还是多了一个逗号

出现上面这种情况的原因是,在不想插入字段的时候,我们并没有把逗号去掉,所有现在介绍第三种方式

第三种方式,去掉多余的逗号

这种方式要引入trim

trim也有几种属性

prefix:添加前缀

prefixOverrides:覆盖前缀

suffix:添加后缀

suffixOverrides:覆盖后缀

  1. id,
  2. courseCode,
  3. courseName
  4. seq_course.nextval,
  5. #{courseCode},
  6. #{courseName}
复制代码

看,问题解决了

在做项目的时候,我们经常对数据库进行插入数据,有时候我们会想同时插入多条,那么,在使用mybatis我们该怎么样插入多条数据呢

在这里,我们要解决几个问题

1.我们怎么样复制表结构

  1. create table course02 as select * from COURSE
复制代码

这个语句是不是很熟悉,对的,course02这个表不仅复制了course表的表结构,把course表的内容也复制进来了

2.我们怎么样只复制course的表结构,而不复制course表的内容呢

  1. create table course03 as select * from COURSE where 1!=1;
复制代码

3.那么进行插入的时候,是不是也是和这个一样呢

  1. insert into course03 select * from course;
复制代码

答案是一样的

4.怎么进行多条语句的插入

  1. insert into course03
  2. select '6', 'yc06', '数据结构06' from dual union
  3. select '7', 'yc07', '数据结构07' from dual union
  4. select '8', 'yc08', '数据结构08' from dual
复制代码

现在sql语句有了,我们就可以在配置文件中进行插入操作了

  1. insert into course
  2. select #{courses.id},#{courses.courseCode},
  3. #{courses.courseName} from dual
复制代码

二,修改

1.使用trim,前面也已经介绍,使用trim可以去前缀,是因为有suffixOverrides这个属性

  1. update course set
  2. courseCode=#{courseCode},
  3. courseName=#{courseName}
  4. where id=#{id}
复制代码

2.使用set,可以代替语句中的set,还可以去掉后缀

  1. update course
  2. courseCode=#{courseCode},
  3. courseName=#{courseName}
  4. where id=#{id}
复制代码

3.在修改的时候我们也会有选择性的修改,有时候我们不想修改的值,让其和没有修改的值一致

choose相当于多重if

第一个when相当于if,第二个when相当于else if

otherwise相当于else

  1. update course
  2. courseCode=#{courseCode},
  3. courseCode=courseCode,
  4. courseName=#{courseName},
  5. courseName=courseName,
  6. where id=#{id}
复制代码

以上所述是小编给大家介绍的Mybatis动态sql的全部内容,希望对大家有所帮助!

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-5-7 04:19

Copyright 2015-2025 djqfx

返回顶部