首先我们学习一种新的mybits配置方案
把接口跟xml文件放在一个位置
这样在config文件里面也要更改设置
让我们的mapper接口可以找到对应的xml文件
而xml文件通过namespace找到对应的mapper接口
注意 接口跟 xml文件名字要一致 并且配置pom.xml 文件
让xml在java文件夹下可以编译
如下
<resources>
<resource>
<!-- directory:指定资源文件的位置 -->
<directory>src/main/java</directory>
<includes>
<!-- “**” 表示任意级目录 “*”表示任意任意文件 -->
<!-- mvn resources:resources :对资源做出处理,先于compile阶段 -->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!-- filtering:开启过滤,用指定的参数替换directory下的文件中的参数(eg. ${name}) -->
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
小编也为大家准备好了代码 直接收藏保存即可
配置完之后我们直接使用
#{} ${}的区别
#{} 相当于preparedStatement语句对象 没有sql注入风险
${} 相当于Statement语句对象 有sql注入风险
一般我们使用上面的
多变量问题
对于多变量我们一般把这些变量放到对象里面然后直接把对象作为参数
如果上面的方案不可行的话就穿多参数 此时 xml 文件的parameterType就不用写了
但是我们要养成一个习惯 对参数取名
这样更加安全
对于返回是集合类型的
传入多个参数查询操作
结果集类型为查询到的每一项的类型 而不是集合
重点
对于数据库很多字段有下划线 比如user_id 我们在实体类会对应userId
因此我们在查询的时候会使用
自定义查询规则
id 是给resultMap取得名字 type是对应的实体类
<id>标签 是主键 column是对应的数据库列名字 property是对应实体类属性的名字 这俩对应即可
当很多不需要改的时候就用 autoMapping=true
这个时候会把所有的查询出来
如果不用resultMap 用resultType 那么user_id 跟userId对应不上 查出来是null
接下来我们来运行动态sql
这个是动态sql
where标签作用
删除第一个and
当where没有内容的话自动删除where
这里使用的是resultMap 因为有一个字段user_id 跟我的是体力userId 要对应
if 标签判断使用
test 判断的内容
我们再看一个
set 标签
作用 自动删除最后一个逗号
但是当为空时候 会删除set带来问题
解决方案是前端传到后端有必填项等
批量操作 foreach
比如添加数据 添加多条
这里传入的数据类型可以使用list
添加跟删除批量传入的一般都是集合
collection 是你传入的集合的别名 item是对循环的每一项起个名 separator是分割符
对于删除操作
多了 open 相当于循环前的代码块
close 循环结束后的代码块