文章目录
九、映射文件
9.1 MyBatis初始化
9.2 mapper根标签
mapper文件相当于DAO接口的‘实现类’,namespace属性要指定
实现
DAO接口的全限定名
如StudentMapper.xml
:
<mapper namespace="com.wyl.dao.StudentDAO">
</mapper>
9.3 insert标签
声明添加操作(sql:insert …)
常用属性:
id属性,绑定对应DAO接口中的方法
parameterType属性,用以指定接口中对应方法的参数类型(可省略)
useGeneratedKeys属性,设置添加操作是否需要回填生成的主键
keyProperty属性,指定回填的id设置到参数对象中的哪个属性
timeout属性,设置此操作的超时时间,如果不设置,则一直等待
主键回填
两种不同的方式:
<insert id="insertStudent" useGeneratedKeys="true" keyProperty="stuId">
insert into tb_students(stu_num,stu_name,stu_gender,stu_age)
values(#{stuNum},#{stuName},#{stuGender},#{stuAge})
</insert>
<insert id="insertStudent">
<selectKey keyProperty="stuId" resultType="java.lang.Integer">
select last_insert_id()
</selectKey>
insert into tb_students(stu_num,stu_name,stu_gender,stu_age)
values(#{stuNum},#{stuName},#{stuGender},#{stuAge})
</insert>
9.4 delete标签
声明删除操作
9.5 update标签
声明修改操作
9.6 select标签
声明查询操作
- id属性,指定绑定方法的方法名
- parameterType属性,设置参数类型
- resultType属性,指定当前sql返回数据封装的对象类型(实体类)(可以通过typeAlias标签取别名)
- resultMap属性,指定从数据表到实体类的字段和属性的对应关系
- useCache属性,指定此查询操作是否需要缓存
- timeout属性,设置超时时间
9.7 resultMap标签
resultMap标签用于定义实体类与数据表的映射关系(ORM)
<resultMap id="studentMap" type="Student"> //用alias取的别名
<id column="sid" property="stuId"/>
<result column="stu_num" property="stuNum"/>
<result column="stu_name" property="stuName"/>
<result column="stu_gender" property="stuGender"/>
<result column="stu_age" property="stuAge"/>
</resultMap>
9.8 cache标签
设置当前DAO进行数据库操作时的缓存属性设置
<cache type="" size="" readOnly="false" />
9.9 SQL片段—sql和include标签
SQL片段
<select id="listStudents" resultMap="studentMap">
select sid ,stu_num ,stu_name ,stu_gender ,stu_age
from tb_students
</select>
<select id="queryStudent" resultMap="studentMap">
select sid ,stu_num ,stu_name ,stu_gender ,stu_age
from tb_students
where stu_num=#{aaa}
</select>
<select id="listStudentsByPage" resultMap="studentMap">
select sid ,stu_num ,stu_name ,stu_gender ,stu_age
from tb_students
limit #{start},#{pageSize}
</select>
我们发现,不同的查询操作(全部查询、按学号查询、分页查询),它们包含有相同的字段名。如果类似的操作过多,不仅反复写起来麻烦,而且容易出错。
可以使用sql
和include
标签来实现对相同字段名的复用。
<sql id="wanglaoji">sid ,stu_num ,stu_name ,stu_gender ,stu_age</sql>
<select id="listStudents" resultMap="studentMap">
select <include refid="wanglaoji"/>
from tb_students
</select>
<select id="queryStudent" resultMap="studentMap">
select <include refid="wanglaoji"/>
from tb_students
where stu_num=#{aaa}
</select>
<select id="listStudentsByPage" resultMap="studentMap">
select <include refid="wanglaoji"/>
from tb_students
limit #{start},#{pageSize}
</select>