JAVA mybatis:mapper XML映射文件

总结

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);

}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值