mybatis的动态增删改查
1、动态SQL片段 通过SQL片段达到代码复用 <!-- 动态条件分页查询 --> <sql id="sql_count"> select count(*) </sql> <sql id="sql_select"> select * </sql> <sql id="sql_where"> from icp <dynamic prepend="where"> <isNotEmpty prepend="and" property="name"> name like '%$name$%' </isNotEmpty> <isNotEmpty prepend="and" property="path"> path like '%path$%' </isNotEmpty> <isNotEmpty prepend="and" property="area_id"> area_id = #area_id# </isNotEmpty> <isNotEmpty prepend="and" property="hided"> hided = #hided# </isNotEmpty> </dynamic> <dynamic prepend=""> <isNotNull property="_start"> <isNotNull property="_size"> limit #_start#, #_size# </isNotNull> </isNotNull> </dynamic> </sql> <select id="findByParamsForCount" parameterClass="map" resultClass="int"> <include refid="sql_count"/> <include refid="sql_where"/> </select> <select id="findByParams" parameterClass="map" resultMap="icp.result_base"> <include refid="sql_select"/> <include refid="sql_where"/> </select> 2、数字范围查询 所传参数名称是捏造所得,非数据库字段,比如_img_size_ge、_img_size_lt字段 <isNotEmpty prepend="and" property="_img_size_ge"> <![CDATA[ img_size >= #_img_size_ge# ]]> </isNotEmpty> <isNotEmpty prepend="and" property="_img_size_lt"> <![CDATA[ img_size < #_img_size_lt# ]]> </isNotEmpty> 多次使用一个参数也是允许的 <isNotEmpty prepend="and" property="_now"> <![CDATA[ execplantime >= #_now# ]]> </isNotEmpty> <isNotEmpty prepend="and" property="_now"> <![CDATA[ closeplantime <= #_now# ]]> </isNotEmpty> 3、时间范围查询 <isNotEmpty prepend="" property="_starttime"> <isNotEmpty prepend="and" property="_endtime"> <![CDATA[ createtime >= #_starttime# and createtime < #_endtime# ]]> </isNotEmpty> </isNotEmpty> 4、in查询 <isNotEmpty prepend="and" property="_in_state"> state in ('$_in_state$') </isNotEmpty> 5、like查询 <isNotEmpty prepend="and" property="chnameone"> (chnameone like '%$chnameone$%' or spellinitial like '%$chnameone$%') </isNotEmpty> <isNotEmpty prepend="and" property="chnametwo"> chnametwo like '%$chnametwo$%' </isNotEmpty> 6、or条件 <isEqual prepend="and" property="_exeable" compareValue="N"> <![CDATA[ (t.finished='11' or t.failure=3) ]]> </isEqual> <isEqual prepend="and" property="_exeable" compareValue="Y"> <![CDATA[ t.finished in ('10','19') and t.failure<3 ]]> </isEqual> 7、where子查询 <isNotEmpty prepend="" property="exprogramcode"> <isNotEmpty prepend="" property="isRational"> <isEqual prepend="and" property="isRational" compareValue="N"> code not in (select t.contentcode from cms_ccm_programcontent t where t.contenttype='MZNRLX_MA' and t.programcode = #exprogramcode#) </isEqual> </isNotEmpty> </isNotEmpty> <select id="findByProgramcode" parameterClass="string" resultMap="cms_ccm_material.result"> select * from cms_ccm_material where code in (select t.contentcode from cms_ccm_programcontent t where t.contenttype = 'MZNRLX_MA' and programcode = #value#) order by updatetime desc </select> 9、函数的使用 <!-- 添加 --> <insert id="insert" parameterClass="RuleMaster"> insert into rulemaster( name, createtime, updatetime, remark ) values ( #name#, now(), now(), #remark# ) <selectKey keyProperty="id" resultClass="long"> select LAST_INSERT_ID() </selectKey> </insert> <!-- 更新 --> <update id="update" parameterClass="RuleMaster"> update rulemaster set name = #name#, updatetime = now(), remark = #remark# where id = #id# </update> 10、map结果集 <!-- 动态条件分页查询 --> <sql id="sql_count"> select count(a.*) </sql> <sql id="sql_select"> select a.id vid, a.img imgurl, a.img_s imgfile, b.vfilename vfilename, b.name name, c.id sid, c.url url, c.filename filename, c.status status </sql> <sql id="sql_where"> From secfiles c, juji b, videoinfo a where a.id = b. videoid and b.id = c.segmentid and c.status = 0 order by a.id asc,b.id asc,c.sortnum asc <dynamic prepend=""> <isNotNull property="_start"> <isNotNull property="_size"> limit #_start#, #_size# </isNotNull> </isNotNull> </dynamic> </sql> <!-- 返回没有下载的记录总数 --> <select id="getUndownFilesForCount" parameterClass="map" resultClass="int"> <include refid="sql_count"/> <include refid="sql_where"/> </select> <!-- 返回没有下载的记录 --> <select id="getUndownFiles" parameterClass="map" resultClass="java.util.HashMap"> <include refid="sql_select"/> <include refid="sql_where"/> </select> 11、trim trim是更灵活的去处多余关键字的标签,他可以实践where和set的效果。 where例子的等效trim语句: Xml代码 <!-- 查询学生list,like姓名,=性别 --> <select id="getStudentListWhere" parameterType="StudentEntity" resultMap="studentResultMap"> SELECT * from STUDENT_TBL ST <trim prefix="WHERE" prefixOverrides="AND|OR"> <if test="studentName!=null and studentName!='' "> ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%') </if> <if test="studentSex!= null and studentSex!= '' "> AND ST.STUDENT_SEX = #{studentSex} </if> </trim> </select> set例子的等效trim语句: Xml代码 <!-- 更新学生信息 --> <update id="updateStudent" parameterType="StudentEntity"> UPDATE STUDENT_TBL <trim prefix="SET" suffixOverrides=","> <if test="studentName!=null and studentName!='' "> STUDENT_TBL.STUDENT_NAME = #{studentName}, </if> <if test="studentSex!=null and studentSex!='' "> STUDENT_TBL.STUDENT_SEX = #{studentSex}, </if> <if test="studentBirthday!=null "> STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday}, </if> <if test="classEntity!=null and classEntity.classID!=null and classEntity.classID!='' "> STUDENT_TBL.CLASS_ID = #{classEntity.classID} </if> </trim> WHERE STUDENT_TBL.STUDENT_ID = #{studentID}; </update> 12、choose (when, otherwise) 有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行 otherwise中的sql。类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。 if是与(and)的关系,而choose是或(or)的关系。 例如下面例子,同样把所有可以限制的条件都写上,方面使用。选择条件顺序,when标签的从上到下的书写顺序: Xml代码 <!-- 查询学生list,like姓名、或=性别、或=生日、或=班级,使用choose --> <select id="getStudentListChooseEntity" parameterType="StudentEntity" resultMap="studentResultMap"> SELECT * from STUDENT_TBL ST <where> <choose> <when test="studentName!=null and studentName!='' "> ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%') </when> <when test="studentSex!= null and studentSex!= '' "> AND ST.STUDENT_SEX = #{studentSex} </when> <when test="studentBirthday!=null"> AND ST.STUDENT_BIRTHDAY = #{studentBirthday} </when> <when test="classEntity!=null and classEntity.classID !=null and classEntity.classID!='' "> AND ST.CLASS_ID = #{classEntity.classID} </when> <otherwise> </otherwise> </choose> </where> </select>
mybatis的动态增删改查的更多相关文章
- MyBatis -- 对表进行增删改查(基于注解的实现)
1.MyBatis对数据库表进行增/删/改/查 前一篇使用基于XML的方式实现对数据库的增/删/改/查 以下我们来看怎么使用注解的方式实现对数据库表的增/删/改/查 1.1 首先须要定义映射sql的 ...
- MyBatis简单的增删改查以及简单的分页查询实现
MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...
- Mybatis入门之增删改查
Mybatis入门之增删改查 Mybatis如果操作成功,但是数据库没有更新那就是得添加事务了.(增删改都要添加)----- 浪费了我40多分钟怀疑人生后来去百度... 导入包: 引入配置文件: sq ...
- Spring Boot 使用Mybatis注解开发增删改查
使用逆向工程是遇到的错误 错误描述 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): c ...
- Mybatis实现简单增删改查
Mybatis的简单应用 学习内容: 需求 环境准备 代码 总结: 学习内容: 需求 使用Mybatis实现简单增删改查(以下是在IDEA中实现的,其他开发工具中,代码一样) jar 包下载:http ...
- SpringMVC,MyBatis商品的增删改查
一.需求 商品的增删改查 二.工程结构 三.代码 1.Mapper层 (1) ItemsMapperCustom.java package com.tony.ssm.mapper; import ja ...
- 基于SSM之Mybatis接口实现增删改查(CRUD)功能
国庆已过,要安心的学习了. SSM框架以前做过基本的了解,相比于ssh它更为优秀. 现基于JAVA应用程序用Mybatis接口简单的实现CRUD功能: 基本结构: (PS:其实这个就是用的Mapper ...
- mybatis中的增删改查操作
在这一个部分,主要进行增删改查的示例书写. 增删改查可以基于xml的,也可以基于注解的方式. 一:对单条数据的查询 1.目录结构 这个使得目录更加清晰 2.User.java 这个使用以前的user表 ...
- ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)
在springmvc+spring+mybatis里整合ztree实现增删改查,上一篇已经写了demo,以下就仅仅贴出各层实现功能的代码: Jsp页面实现功能的js代码例如以下: <script ...
随机推荐
- script 有哪个属性可以让它不立即执行 defer,async
.async 和 defer 属性 http://blog.csdn.net/qq_34986769/article/details/52155871 1. defer 属性<script sr ...
- C# 使用 Lotus notes 公共邮箱发送邮件
公司的邮件系统用的是反人类的 Lotus notes, 你敢信? 最近要实现一个功能,邮件提醒功能,就是通过自动发送提醒邮件 前前后后这个问题搞了2天,由于公司的诸多条件限制,无法直接调用到公司发送邮 ...
- OpenLayer3调用天地图示例
最近,工作中有需要用Openlayer3脚本库调用天地图的wmts服务接口,由于这两个都是刚开始接触,所以是摸着石头过河,遇到了地图显示不了的问题,虽然官网http://www.zjditu.cn/r ...
- phpstorm使用之——常用快捷键
phpstorm使用之--常用快捷键 使用IDE的根本所在乃是为了提高工作效率. windows下phpstorm的快捷键 ctrl+shift+n查找文件 ctrl+shift+f 在一个目录里查找 ...
- CentOS7 修改网卡名称为eth0
前言 无论是RHEL 7.还是CentOS 7都使用了NetworkManager.service来进行网络管理,当然network服务还是可以继续使用的,但也将会是过渡期的残留品了. 除此之外7版本 ...
- better-scroll 源码分析
我写该文章,主要是想结合代码探究 better-scroll 是如何处理下列操作的.该过程如下图,用文字描述为:手指触摸屏幕,向上快速滑动,最后在手指离开屏幕后,内容获得动量继续滚动,到头部后在移动一 ...
- 【ZOJ2760】How Many Shortest Path
How Many Shortest Path 标签: 网络流 描述 Given a weighted directed graph, we define the shortest path as th ...
- Dubbo广播模式下报错:Can't assign requested address解决办法
原因: 尝试使用Dubbo的multicast模式,发现一运行就报Can't assign requested address的错误,造成这种原因的主要是系统中开启了IPV6协议(比如window7) ...
- vue父子组件之间的通信
利用props在子组件接受父组件传过来的值1.父组件parentComp.vue <template> <childComp :fromParentToChild="fro ...
- Angular:利用内容投射向组件输入ngForOf模板
现在,我们写一个组件puppiesListCmp,用于显示小狗狗的列表: //puppies-list.component.ts @Component({ selector: 'puppies-lis ...