mybatis系列(一) mybatis动态代理
映射文件的配置参数中:parameterType 参数都可以不写
默认规则
- dao接口名称通常命名为XxxMapper.
- 映射文件:Xxxmapper.xml, statementid与接口的方法名保持一致.
mybatis-config.xml配置(以下按该顺序写)
- 导入jdbc配置文件(使用$):
<properties resource="jdbc.properties"></properties>
- 开启驼峰匹配:经典的数据库列名(多个单词下划线连接)映射到经典的java属性名(多个单词驼峰连接)
<settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
- 在映射文件中的参数使用别名(就可不用全路径,但开启了也可以全路径),方式2种,只写一种
<typeAliases>
//自动将类名转换为别名,大小写不敏感
<package name="包名">
</typeAliases>
- environments,可以配置多个environment(环境),选中环境的方式
①
<environments default="环境id名">...<environments>
②
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader,"环境id名");
- 映入映射文件4种,只写一种
<mappers>
<mapper resource="映射文件名">
</mappers>
映射文件Xxxmapper.xml
- 将id回写到user对象
useGeneratedKeys="true" keyProperty="id" keyColumn="id"
- 接收参数方式(两种)
①$ 非预编译直接拼接不能防止注入通常用于表名注意如果语句中只用了一个参数且接口文件没有使用注解则只能固定使用 {}: 非预编译, 直接拼接, 不能防止 sql 注入, 通常用于表名,
注意, 如果 sql 语句中只用了一个参数, 且接口文件没有使用 @param 注解, 则只能固定使用 $获取参数的值;
②#{}: 预编译, 只是表示占位,与参数的名字无关,如果只有一个参数,可以使用 #{ 任意参数名} 接收参数值,会自动对应
获取多个参数
${}: 接口使用 @param 注解
{}:默认规则{0,1,param1,param2},即可以#{0} #{1},或者# #; 使用#param注解
如果在接口文件中使用了 @param 注释, 则如果参数是 pojo 或者 HashMap, 则需要 #{参数名. 属性名}/${参数名. 属性名}
$You can't use'macro parameter character #'in math mode{}/#{} 在使用过程中空格对其的影响, 例如当其为 like 等的一部分参数, 需要在 % 前后加空格, 如'%'${}'%',== 什么时候加空格?==>> 当 ${}/#{} 和其他符号组合成为某个关键字的一个参数时, 需要加.( 课上说的就是 %, 具体待验证)