Spring MyBatis配置扫描
mybatis:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.project.**.domain
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath*:mybatis/**/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
结果映射
xml
写sql语句,含有<select><update><insert><delete>
几种标签,常使用resultType
、resultMap
表示映射从数据库对象到POJO
resultType:严格按照名称相同进行映射
resultMap:可以设置coloum和property进行映射
参数
mybatis参数传递规则是Map
- 参数可以使用
#{}
,${}
,建议使用#{}
占位符,可以防止sql注入攻击,${}
为原封替换值进去 - 使用
paramType
可以对参数属性进行说明,该说明可选 - 如果是多参数,可以使用
#{0....n}
进行代表下标为n的参数,也可以在mapper
中使用@Param(value)
进行别名设置,或者包装成Map使用#{key}
取key值进行 - 单参数,<if>取
_parameter
拿参数,#{value}
value随便写 - 多参数,
_parameter.get(0)
,#{0.key}
等
遍历foreach
使用foreach可以遍历参数,如果是List
,colleaction
为list
,如果是Array
,colleaction
为array
,如果是Map
,colleaction
为对应的key
值
一对一(一对多)映射
支持联表设置包装Object或者List,在resultMap中设置对应属性association
和 collection
构造器映射
使用构造器映射,POJO使用构造方法,不提供set方法注入,更安全
<constructor>
<idArg column="id" javaType="int"/>
<arg column="username" javaType="String"/>
</constructor>
public class User {
//...
public User(int id, String username) {
//...
}
//...
}
鉴别器
MyBatis之级联——鉴别器
鉴别器使用于相关表分成多张表,比如按性别分,分成多张表
<discriminator javaType="int" column="vehicle_type">
<case value="1" resultMap="carResult"/>
<case value="2" resultMap="truckResult"/>
<case value="3" resultMap="vanResult"/>
<case value="4" resultMap="suvResult"/>
</discriminator>
使用columnPrefix
在colleaction中使用columnPrefix,记得在select中加上as别名设置
动态Sql
- if :判断条件
- choose (when, otherwise):choose相当于java的Switch,when相当于case有break的那种,otherwise相当于default
- trim (where, set):where和set都可以通过trim修改得到同效果,用于规范“and” ,“or”,“,”在sql中的应用
- foreach:遍历,常用于in