详解Mybatis动态sql

 更新时间:2016年04月19日 11:29:35   作者:xiaoerduo123x  
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。本文给大家介绍Mybatis动态sql小结,感兴趣的朋友参考下

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 插入

insert into course values(seq_course.nextval,#{courseCode},#{courseName})
select max(id) currId from course

测试

测试结果

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

insert into course(id,
courseCode,
courseName
)
values(seq_course.nextval,
#{courseCode},
#{courseName}
)

测试及结果


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

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

最后一个字段变为空

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

两个字段都变为空试试

还是多了一个逗号

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

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

这种方式要引入trim

trim也有几种属性

prefix:添加前缀

prefixOverrides:覆盖前缀

suffix:添加后缀

suffixOverrides:覆盖后缀

id,
courseCode,
courseName
seq_course.nextval,
#{courseCode},
#{courseName}

看,问题解决了

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

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

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

create table course02 as select * from COURSE

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

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

create table course03 as select * from COURSE where 1!=1;

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

insert into course03 select * from course;

答案是一样的

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

insert into course03
select '6', 'yc06', '数据结构06' from dual union
select '7', 'yc07', '数据结构07' from dual union
select '8', 'yc08', '数据结构08' from dual

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

insert into course
select #{courses.id},#{courses.courseCode},
#{courses.courseName} from dual

二,修改

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

update course set
courseCode=#{courseCode},
courseName=#{courseName} 
where id=#{id}

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

update course
courseCode=#{courseCode},
courseName=#{courseName} 
where id=#{id}

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

choose相当于多重if

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

otherwise相当于else

update course
courseCode=#{courseCode},
courseCode=courseCode,
courseName=#{courseName},
courseName=courseName,
where id=#{id}

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

相关文章

  • Java基于注解的Excel导出方式

    Java基于注解的Excel导出方式

    这篇文章主要介绍了Java基于注解的Excel导出方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Java语言中4种内部类的超详细讲解

    Java语言中4种内部类的超详细讲解

    这篇文章主要给大家介绍了关于Java语言中4种内部类的超详细讲解,内部类可以分为:实例内部类、静态内部类和成员内部类,每种内部类都有它特定的一些特点,文中介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Java设计实现一个针对各种类型的缓存

    Java设计实现一个针对各种类型的缓存

    这篇文章主要为大家详细介绍了Java如何设计实现一个针对各种类型的缓存,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-11-11
  • SpringBoot项目多层级多环境yml设计详解

    SpringBoot项目多层级多环境yml设计详解

    这篇文章主要为大家介绍了SpringBoot项目多层级多环境yml设计详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Spring Security跳转页面失败问题解决

    Spring Security跳转页面失败问题解决

    这篇文章主要介绍了Spring Security跳转页面失败问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • spring boot idea maven依赖找不到问题处理方法

    spring boot idea maven依赖找不到问题处理方法

    这篇文章主要介绍了spring boot idea 偶尔maven依赖找不到问题,这里总结了几种处理方法,方便尝试排查,对spring boot idea  maven依赖找不到问题感兴趣的朋友跟随小编一起看看吧
    2023-08-08
  • 浅谈HashMap、HashTable的key和value是否可为null

    浅谈HashMap、HashTable的key和value是否可为null

    这篇文章主要介绍了浅谈HashMap、HashTable的key和value是否可为null,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Spring AOP注解失效的坑及JDK动态代理

    Spring AOP注解失效的坑及JDK动态代理

    这篇文章主要介绍了Spring AOP注解失效的坑及JDK动态代理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 解决@Autowired注入static接口的问题

    解决@Autowired注入static接口的问题

    这篇文章主要介绍了解决@Autowired注入static接口的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java中final修饰符实例分析

    java中final修饰符实例分析

    本文通过实例向我们展示了java中final修饰符的概念,final修饰的基本变量和引用类型变量的区别。有需要的小伙伴可以参考下
    2014-11-11

最新评论