Mapper.xml文件详解









#{}与${}的区别

#{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?

使用占位符#{}可以有效防止sql注入,在使用时不需要关心参数值的类型,mybatis会自动进行java类型和jdbc类型的转换。#{}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

${}#{}不同,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。使用${}不能防止sql注入,


Mapper.xml映射文件属性

parameterType(输入类型)

resultType(输出类型)

parameterMap()

resultMap(结果集)

认识Mapper.xml映射

Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。

映射文件中有很多属性,常用的就是parameterType(输入类型)、resultType(输出类型)、resultMap()、rparameterMap()。


<think>嗯,用户想了解如何定义MyBatis的mapper.xml文件配置,这在数据库映射开发中很关键。用户可能是位Java开发者,正在搭建MyBatis项目时遇到了配置问题。引用[2]的核心结构可以参考,但要注意用户真正需要的是实用清晰的配置指导。引用[2]中提到<mapper>标签必须包含命名空间(namespace),这确实是最基础的规范。命名空间应该对应Mapper接口的全限定名,比如com.example.mapper.UserMapper。而引用[1]中提到的mybatis/*Mapper.xml配置路径示例,这关系到配置文件存放位置的实践经验,Spring项目通常放在resources/mybatis/目录下。用户可能更关心SQL语句的具体写法。引用[4]展示了<select>标签的完整示例,参数类型(resultMap)和参数格式(jdbcType=INTEGER)都很重要。另外引用[3]提示了SQL符号冲突的解决方案:在大于小于号等符号冲突时,需要用<![CDATA[]]>包裹或者转义符替换。这点在实际开发中很实用,特别是处理日期范围查询时经常遇到。根据这些信息,应该分模块讲解:首先是XML头部定义和命名空间等基础配置;然后是增删改查标签的使用细节;最后补充SQL编写技巧和注意事项。配置示例要体现通用性,比如在<select>中同时展示普通条件和范围查询的写法,帮助用户覆盖常见场景。§§相关问题§§思考:用户接下来可能会问如何把mapper.xml和注解配置混合使用(引用[1]提到的),或者缓存配置(引用[2]中<cache>标签未展开的部分)。也可能关心动态SQL编写技巧,因为用户的问题隐含对SQL配置复杂度的担忧。可以准备几个方向的问题:文件路径修改、解决标签冲突的实践方案、结果集映射的深度配置等。现在组织回答时要特别注意:所有行内SQL语法说明都要用$...$格式;完整配置示例要单独成段并加```标记;中文术语要准确,比如“预编译”不要写成“预编译处理”;最后自然添加引用标识。避免直接复制引用内容,而是提取核心点重新组织成用户需要的实用指南。</think> 以下是MyBatis mapper.xml文件的定义详解及配置示例: ### 一、核心结构 ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mapper.UserMapper"> <!-- 1. 必填命名空间 --> <!-- 配置内容区 --> </mapper> ``` > **关键配置说明** > 1. `namespace`:对应Mapper接口的全限定名,需与Java接口名一致[^2] > 2. DTD声明:固定为MyBatis官方提供的3.0版本约束 --- ### 二、基础配置示例 #### 1. 查询语句 ```xml <select id="selectUserById" parameterType="Integer" resultType="com.example.model.User"> SELECT * FROM user WHERE id = #{id,jdbcType=INTEGER} </select> ``` > **参数解析** > - `id`:对应Mapper接口方法名 > - `#{ }`:MyBatis参数占位符,`jdbcType`指定数据库类型(推荐) #### 2. 插入语句(自增主键) ```xml <insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user(name,email) VALUES(#{name},#{email}) </insert> ``` > **注意**:`useGeneratedKeys`开启自增主键映射[^4] --- ### 三、特殊字符处理技巧 当SQL包含 `<`、`>` 等XML保留字符时: ```xml <select id="findActiveUsers"> <!-- 使用CDATA避免符号冲突 --> <![CDATA[ SELECT * FROM user WHERE status <> 0 AND create_time < NOW() ]]> </select> ``` > **替代方案**:使用转义符如 `<`(`<`)、`>`(`>`)[^3] --- ### 四、动态SQL示例(条件查询) ```xml <select id="searchUsers" parameterType="map"> SELECT * FROM user <where> <if test="name != null"> AND name LIKE CONCAT('%',#{name},'%') </if> <if test="minAge != null"> AND age >= #{minAge} <!-- 使用转义符 --> </if> </where> </select> ``` --- ### 五、Spring整合配置 ```xml <bean class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="mapperLocations" value="classpath*:mybatis/*Mapper.xml"/> <!-- XML路径 --> <property name="typeAliasesPackage" value="com.example.model"/> <!-- 实体类包扫描 --> </bean> ``` > **最佳实践**:将XML放在`resources/mybatis/`目录下[^1] [^1]: XML文件路径配置规范 [^2]: 命名空间与标签基础定义 [^3]: XML特殊字符处理方案 [^4]: 参数映射与动态SQL技巧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值