在xml中写sql语句有很多的规范、标准,有时候想要找对应的例子还得翻一翻以前的代码,这里干脆对遇到的情况做个记录。
一,新建XML文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.web"><!-- 命名空间,用来找到对应的xml文件 -->
</mapper>
- mapper:映射文件的根节点,只有一个属性namespace(命名空间),作用如下 : 用于区分不同的mapper,全局唯一。绑定DAO接口,即面向接口编程,当绑定一个接口,就不用写此接口的实现类,会通过接口的完全限定名找到对应的mapper配置来执行语句,所以,namespace的命名必须要写接口的完全限定名。
- cache:配置给定命名空间的缓存。
- cache-ref:从其他命名空间引用缓存配置。
- resultMap:用来描述数据库结果集和对象的对应关系。
- sql:可以重用的块,也可以被其他语句引用。通常时存放一些公用性的。
- insert:映射插入语句。update:更新映射语句。delete:删除映射语句。select:映射查询语句。
- XML中特殊符号需要转义
< |
< | 小于 |
---|---|---|
> |
> | 大于 |
& |
& | 和号 |
' |
’ | 省略号 |
" |
" | 引号 |
二,SQL语句
-
SELECT(if标签,foreach标签)
<select id="select_b01byb00" parameterType="string" resultType="java.util.LinkedHashMap"> SELECT * FROM A WHERE A00 = #{A00} <if test="A01 != null and A01 != ''"> AND <foreach collection="A01" item="item" open="(" close=")" separator="or"> regexp_replace(A.A01,'\s+','') LIKE '%'||regexp_replace(#{item},'\s+','')||'%' </foreach> </if> </select>
id
: sql语句的身份证号,parameterType
: 参数类型,可以写实体类的路径,resultType
: 返回类型。if test = ""
: xml中用来判断是否走下面语句的操作。foreach
: 用来拼接循环参数collection
: 用来循环的数组或集合item
: 集合中的单个元素open
: foreach语句开始前拼接的sqlclose
: foreach语句结束后拼接的sqlseparator
: foreach中的语句用什么来连接起来
'\s+'
: 空格||
: 合并符
-
UPDATE(set标签)
<update id="UpdateTableA" parameterType="string"> UPDATE A <set> <if test="A01!=null "><!-- <if test="A01!=null and NA64P02!='' ">这样写会导致如果表单填的值为空值,那就不会作为空值传进去 --> A01 = #{A01}, </if> <if test="A02!=null"> UPDATETIME = SYSDATE, </if> <if test="A03!=null"> A03 = #{A03,jdbcType=TIMESTAMP}, </if> </set> WHERE RECORDID = #{RECORDID} </update>
SYSDATE
: 系统时间TO_DATE()
: 把前台组件传过来的时间转成数据库能识别的Date类型set
: 如果set标签中有值,则会在前面拼接一个set,若没值则不会拼接,自动去掉最后多余的逗号
-
INSERT(trim标签)