经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
mybatis动态拼接实现有条件的插入
来源:jb51  时间:2022/2/28 19:36:02  对本文有异议

动态拼接实现有条件的插入

最近在做项目的时候遇到了一个很现实的问题

那就是根据场景不同,然后实现有条件的插入,说穿了就是当这列有数据的时候进行数据的插入,没有数据的时候自动忽略这列。

其实这些在mybatis的api中有涉及到,但是之前一直没有好好看,直到最近用到了才认真的看了看这块的内容。

  1. <!-- 新增部门人员 -->
  2. ? ? <insert id="addStaffForApp" parameterType="com.hivescm.org.dto.StaffForAppDto" >
  3. ? ? ? ? insert into base_department_staff
  4. ? ? ? ? <trim prefix="(" suffix=")" suffixOverrides="," >
  5. ? ? ? ? ? ? status,
  6. ? ? ? ? ? ? group_id,
  7. ? ? ? ? ? ? staff_code,
  8. ? ? ? ? ? ? realname,
  9. ? ? ? ? ? ? create_time,
  10. ? ? ? ? ? ? phone,
  11. ? ? ? ? ? ? is_temporary
  12. ? ? ? ? ? ? <if test="param.email !=null">
  13. ? ? ? ? ? ? ? ? email,
  14. ? ? ? ? ? ? </if>
  15. ? ? ? ? ? ? <if test="param.userId !=null">
  16. ? ? ? ? ? ? ? ? user_id,
  17. ? ? ? ? ? ? </if>
  18. ? ? ? ? ? ? <if test="param.sex !=null">
  19. ? ? ? ? ? ? ? ? sex,
  20. ? ? ? ? ? ? </if>
  21. ? ? ? ? </trim>
  22. ?
  23. ? ? ? ? <trim prefix="values (" suffix=")" suffixOverrides="," >
  24. ? ? ? ? ? ? #{param.status},
  25. ? ? ? ? ? ? #{param.groupId},
  26. ? ? ? ? ? ? #{param.staffCode},
  27. ? ? ? ? ? ? #{param.realname},
  28. ? ? ? ? ? ? #{param.phone},
  29. ? ? ? ? ? ? #{param.temporary}
  30. ? ? ? ? ? ? <if test="param.email !=null">#{param.email},
  31. ? ? ? ? ? ? </if>
  32. ? ? ? ? ? ? <if test="param.userId !=null">#{param.userId},
  33. ? ? ? ? ? ? </if>
  34. ? ? ? ? ? ? <if test="param.sex !=null">#{param.sex},
  35. ? ? ? ? ? ? </if>
  36. ? ? ? ?</trim>
  37. ? ? </insert>

这里头的trim相信就不用多说了,经常用来去空格。这个trim标签中有三个属性,prefix这个是表明了你要拼接sql的前缀,suffix这个则是表明了动态sql的后缀,suffixOverrides这个会帮助我去掉最后一个多出来的逗号。

mybatis插入语句

mybatis插入语句一般都是这样写 

<!-- useGeneratedKeys="true"把新增加的主键赋值到自己定义的keyProperty(id)中 -->

  1. <insert id="insert" parameterType="xxx.xxx.xxx.xxx" keyProperty="id" useGeneratedKeys="true">
  • useGeneratedKeys 取值范围true|false 默认值是:false。
  • 含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。

之前一直以为useGeneratedKeys="true"是让mysql数据库主键新增,其实是,插入语句后将id赋值给实体bean,即使用insert后,使用bean.getId()可以获得值,若是false,bean.getId()=null。

不管true还是false,数据库插入的数据,都会自动生成主键(前提是设置自动增长主键)。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号