我们要把realname、username、password插入到数据库中。现在我们来一步步的在mapper中实现。
一:语句块的头部 |
(1)id:和dao层的接口对应,表示我实现的是此接口
(2)parameterType:参数,即跳转到AuthUser文件中,复制其完整路径即可。
(3)flushCache:如果为true,则表示当语句被调用时,会清空缓存。
附上flushCache的用法:
- 当为select语句时:
flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。
- 当为insert、update、delete语句时:
flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。
(4)userGeneratedKeys和keyProperty:
这两个属性的意思是:把数据库表的主键id设置为自动增长
二:insert语句 |
这是基本的语法,就是将数据以字符串的形式存入相应字段中。有了#{},我们就能将123转换为"123"。
三:if语句 |
现在我们将上面的语句升级一下。试想,如果前端只传来了username、password的值,而没有realname的值,将他们插入的时候,系统会不会报异常?如果realname在数据库中设置的属性为非空,那肯定会报。
怎么解决呢?使用if语句。
<insert id="createSelectivity" parameterType="com.online.college.core.auth.domain.AuthUser"
flushCache="true" useGeneratedKeys="true" keyProperty="id">
INSERT INTO t_auth_user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="realname!=null">
realname,
</if>
<if test="username!=null">
username,
</if>
<if test="password!=null">
password,
</if>
values
<if test="password!=null">
password,
</if>
</trim>
<if test="realname!=null">
#{realname},
</if>
<if test="username!=null">
#{username},
</if>
<if test="password!=null">
#{password},
</if>
</insert>
我们先来说一下这句话的意思:
上面的红线是用来分割的,方便读者分析。
prefix:给trim标签内sql语句加上前缀,就是在realname前面加上(。
suffix:在trim标签内sql语句加上后缀,在password后面加上)。
suffixOverrides:指定去除多余的后缀内容,比如(realname,username,password)的password后面是没有逗号的,但是在if语句中有,suffix的作用就是去除掉它。
再来说说if语句的作用。
if语句就是说如果有realname的值,那我就插入,如果没有,就算了。
至此,一个完整的insert语句就完成了。