MyBatis 知识整理 (第二部分)
·
六、MyBatis 的 ${} 和 #{} 的区别
|
特性 |
#{} |
${} |
|---|---|---|
|
底层实现 |
使用 PreparedStatement |
使用 Statement |
|
类型转换 |
自动进行类型转换 |
不进行类型转换 |
|
单个简单类型参数 |
#{任意字符串} |
${value} |
|
防止 SQL 注入 |
有效防止 |
无法防止 |
应用场景建议:
-
绝大多数情况下使用 #{},安全且高效
-
只有在需要动态拼接 SQL 片段(如表名、列名等)时使用 ${},但需注意安全风险
七、MyBatis 的 ORM 映射
1. 字段起别名
-- 直接在 SQL 查询中为字段起别名
SELECT id, role_name roleName, role_desc roleDesc FROM role
2. 结果映射(ResultMap)【重点】
<!-- 定义结果映射 -->
<resultMap id="roleResultMap" type="com.example.pojo.Role">
<!-- 主键字段映射 -->
<id column="id" property="id"/>
<!-- 非主键字段映射 -->
<result column="role_name" property="roleName"/>
<result column="role_desc" property="roleDesc"/>
</resultMap>
<!-- 使用结果映射 -->
<select id="findAllRoles" resultMap="roleResultMap">
SELECT * FROM role
</select>
优点:
-
将数据库字段与Java对象属性解耦
-
支持复杂的关联关系映射
-
提高代码的可维护性
八、MyBatis 的别名配置
1. MyBatis 内置别名
-
Java 基本类型:_int, _integer, _long, _double, _float, _boolean
-
包装类型:int, integer, long, double, float, boolean, string
-
集合类型:list, arraylist, map, hashmap
-
注意:所有内置别名全部小写
2. 自定义别名
<typeAliases>
<!-- 方式1:单个定义别名 -->
<typeAlias type="com.example.pojo.User" alias="user"/>
<!-- 方式2:批量定义别名(推荐) -->
<!-- 默认将包下所有类的类名(首字母小写)作为别名 -->
<package name="com.example.pojo"/>
</typeAliases>
九、批量引入映射配置文件
<mappers>
<!-- 方式1:直接引入单个映射文件 -->
<mapper resource="com/example/mapper/UserMapper.xml"/>
<!-- 方式2:通过接口类引入单个映射文件 -->
<mapper class="com.example.mapper.UserMapper"/>
<!-- 方式3:批量引入映射文件(推荐) -->
<package name="com.example.mapper"/>
</mappers>
注意事项:
-
使用
package方式时,要求接口名与映射文件名相同且在同一目录下 -
批量引入可减少配置,提高开发效率
-
确保MyBatis能够找到对应的映射文件
更多推荐



所有评论(0)