总结
1.可以在映射中设置 select \ insert \update \delete 方法
2.方法传参,直接指定 parameterType 指定参数类型。是否可以定义多个参数???按实体类,其他方法?
3.关联外键,可以使用association\collection 进行关联配置
4.为了编码方便、简化逻辑,可以将mapper转成接口,然后要使用时,直接调用接口中方法。session.getMapper(类,比如 PersonMapper.class)
1、常用元素:select \insert \update \delete \sql(语句重用块) \cache \cache-ref \ resultMap
元素上的属性主要:id \ parameterType \ resultType ,关于参数采用 #{参数名} 来确定。如下
<select id="selectUser" parameterType="int" resultType="hashmap">
SELECT * FROM USER WHERE ID = #{id}
</select>
select元素上除上述属性外,还有 serultMap \ flushCache \ userCache \timeout \ fetchSzie \ statementType(STATEMENT|PREPARED|CALLABLE,默认PREPARED) \resultSetType(FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE ,默认未设置),databaseId,resultOrdered ,resultSets 。
insert \update\delete 属性大多与select 一致,还有特有属性。 userGeneratedKeys \ keyProperty \ keyColumn ,以下示例
<insert id="insertUser" userGeneratedKeys="true" keyProperty="id">
insert into USER(username)
values (#{username})
</insert>
<insert id="insertUser">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select SEQUENCE_USER.nextval as id from dual
</selectKey>
insert into USER(id,username)
values (#{id},#{username})
</insert>
2.sql元素 SQL片段
<sql id="userCols"> ${alias}.id,${alias}.name </sql>
<select id="selectUsers" resultType="map">
select
<include refid="userCols"><property name="alias" value="ti"/></include>
from some_table t1
</select>
3.参数 parameters
parameterType 可以设置成一个类 如:parameterType="User"
4.ResultMaps 定义返回结构
<resultMap id="userResultMap" type="org.test.domain.User">
<id property="id" column="user_id"/>
<result property="name" column="uesr_name">
</resultMap>
<select id="selectUser" resultMap="userResultMap">
SELECT * FROM USER
</select>
type指明实际返回的类型;id明确返回集中的key。
5.引用映射,比如学生属于哪个班级的,学生实体中会引用到班级。
a.一个中包含一个外部引用
<resultMap id="studetnResultMap" type="org.test.domain.Student">
<id property="id" column="id">
<result property="name" column="name">
<association property="classid" column="class_id" javaType="org.test.domain.Class" select="selectClassWithId" />
</resultMap>
<select id="selectClassWithId" resultType="org.test.domain.Class">
select * from Class where id = #{id}
</select>
<select id="selectStudent" resultMap="studentResultMap">
select * from Student
</select>
b.一个包含了引用的集合,类似association
<collection property="students" javaType="ArrayList" column="id" ofType="org.test.domain.Student" select="selectStudentWithId" fetchType="lazy">
<id property="id" column="id"/>
<result property="code" column="code"/>
</collection>
ofType 表示集合中的数据类型,column标识使用 指定列作为关联查询的参数
另外,为了简化、清晰代码逻辑,可以将mapper 与 接口进行关联。关联方法:在同包下,建立相应的接口。比如
<mapper namespace="org.test.mapper.PersonMapper">
<select id="selectPerson" parameterType="int" resultType="Person">
select * from Person where id=#{id}
</select>
</mapper>
在org.test.mapper包下,建立
public interface PersonMapper{
Person selectPerson(Integer id);
}