目录
一、<resultMap> 标签:映射数据库字段名与实体类属性名关系
前言:
MyBatis映射文件中除了 <insert> 、 <delete> 、 <update> 、 <select> 外,还有一些标签可以使用,如<resultMap>、<sql><include>、特殊字符处理:
一、<resultMap> 标签:映射数据库字段名与实体类属性名关系
标签的作用是自定义映射关系。
MyBatis可以将数据库结果集封装到对象中,是因为结果集的列名和对象属性名相同:
当POJO属性名和数据库列名不一致时,MyBatis无法自动完成映射关系。如:
1.两种解决方案:
1.1 Sql语句的查询字段起与POJO属性相同的别名。
<!--解决数据库字段名与mybatis实体类字段名不一致--> <!--方式一:通过为数据库字段名设置别名的方式来解决--> <select id="findAll" resultType="com.itbaizhan.pojo.Teacher"> select tid as id,tname as teacherName from teacher; </select>
1.2.自定义映射关系
在映射文件中,使用 <resultMap> 自定义映射关系:
<!--方式二:通过resultMap映射字段名与实体类属性名的一一对应关系来解决--> <!--id:自定义映射名(自己定义) type:自定义映射的对象类型--> <resultMap id="teacherMapper" type="com.itbaizhan.pojo.Teacher"> <!--id:定义主键列 property:POJO属性名 column:数据库列名--> <id property="id" column="tid"></id> <!--result:定义普通列 property:POJO属性名 column:数据库列名--> <result property="teacherName" column="tname"></result> </resultMap>
在 <select> 标签中,使用 resultMap 属性代替 resultType 属性,使用自定义映射关系。
<!--注意:返回结果是resultMap,不是resultType--> <select id="findAll" resultMap="teacherMapper"> select * from teacher; </select>
2.知识点整理:
1.在MyBatis映射文件中,<resultMap>的作用是“自定义映射关系”
2. 在MyBatis映射文件中,配置属性可以使用自定义映射 “resultMap”
二、<sql><include>标签:提取可重用SQL语句
1.介绍:
<sql> 用来定义可重用的Sql片段,通过 <include> 引入该片段。如:Sql 语句的查询字段与POJO属性相同的别名,该Sql片段就可以重用
<!--<sql>标签:将可重用的sql语句封装并起一个名字,需要的地方直接调用语句块的名字即可 id:自定义语句块的名字--> <sql id="selectAllField"> select tid as id,tname as teacherName </sql> <!--<include>标签:引入可重用的sql语句块,refid:填入重用语句的名字 如下:--> <select id="findById" resultType="com.itbaizhan.pojo.Teacher"> <include refid="selectAllField"></include> from teacher where tid = #{id}; </select>
2.知识点整理:
在MyBatis映射文件中,使用<include>可以引入 <sql> 定义的Sql片段。
三、特殊字符处理:
1.介绍:
在Mybatis映射文件中尽量不要使用一些特殊字符,如: < , > 等。
我们可以使用符号的实体来表示:
2.特殊字符处理符号替换
符号 实体 < < > > & & ' ' " " 3.例如:
<!-->相当于>,在sql语句中,我们要尽可能地避免使用一些特殊字符如(>、<、'、"、&),用其他方式代替;如下:--> <!--当然使用特殊字符也能编译成功,因为IDEA自动帮助转换了符号,但在开发过程中还是要尽可能地避免使用特殊字符--> <select id="findById2" resultType="com.itbaizhan.pojo.Teacher"> <include refid="selectAllField"></include> from teacher where tid > #{id}; </select>