MyBatis映射器学习二

一.映射器的主要元素学习

1.4使用resultMap映射结果集
我们在前面学习了自动映射,但是在某些时候,我们需要处理更为复杂的映射,resultMap为我们提供了这样的模式,我们需要在映射器中定义resultMap
例如:

<resultMap id="roleResultMap" type="com.Role">
  <id property="id" column="id" />
  <result property="roleName" column="role_name" />
  <result property="note" column="note" />
</resultMap>

<select parameterType="Long" id="getRole" resultMap="roleResultMap">
  select id, role_name, note from t_role where id= #{id}
</select>

下面我们学习上面的resultMap的配置:
1)定义了一个唯一标识为roleResultMap的resultMap,用type属性去定义它对应的是那个javaBean。

2)其中的通过id元素定义roleResultMap,这个对象代表着使用哪个属性作为其主键。

3)result元素定义不同列的映射关系,例如把SQL结果返回的列role_name和type属性定义javaBean的属性roleName等做一一对应。

4)这样select语句就不再需要使用自动映射的规则,直接用resultMap属性指定roleResultMap即可,这样MyBatis就会使用我们的自定义映射规则。

resultMap其实很复杂,上面的只能算是简单的了解,深入学习还需我们努力学习。

2.insert元素

insert元素相对于select元素而言要简单许多。MyBatis会在执行插入之后返回一个整数,以表示你进行操作后插入的记录数。

其配置表如下:
MyBatis映射器学习二_第1张图片
使用实例:

<insert parameterType="role" id="insertRole">
  insert into t_role(role_name,note) values(#{roleName},#{note})
</insert>

2.1主键回填和自定义
1.例如,主键自增字段,MySQL里面的主键需要根据一些特殊的规则去生成,再插入后我们往往需要获得这个主键,以便于未来的操作,二MyBatis提供了实现的方法。

1)首先我们可以使用keyProperty属性指定哪个是主键字段,同时useGeneratedKeys属性告诉MyBatis这个主键是否使用数据库内置策略生成。

例子:

<insert id="insertRole" parameterType="role" useGeneratedKeys="true" keyProperty="id">
    insert into t_role(role_name,note) values (#{roleName},#{note})
</insert>

上面的id列为自增字段,这样我们传入的role对象就无需设置id的值,MyBatis会用数据库的设置进行处理。这样做的好处是在MyBatis插入的时候他会回填JavaBean的id值。

2.假设我们取消表t_role的id自增的规则,我们的要求是:如果表t_role没有记录,则我们需要设置id=1,否则我们就取最大id加2,来设置新的主键,对于一些特殊要求,MyBatis也会提供了对应方法。
这时我们可以使用selectKey元素进行处理

<insert id="insertRole" parameterType="role" useGeneratedKeys="true" keyProperty="id">
  <selectKey keyProperty="id" resultType="int" order="BEFORE">
    select if(max(id) is null,1,max(id)+2) as newId from t_role
  </selectKey>
   insert into t_role(id,role_name,note) values (#{id},#{roleName}.#{note})
</insert>

这样我们就能定义自己的规则来生成主键了。

3.update元素和delete元素
和insert元素一样,MyBatis执行完update元素和delete元素后返回一个整数,标出执行后影响的条数记录。

配置例子如下:

<update parameterType="role" id="updateRole">
 update t_role set role_name= # {roleName},note =#{note} Where id= #{id}
</update>

<delete id="delete" parameterType="long">
  delete from t_role where id =# {id}
</delete>

插入和删除执行完成MyBatis会返回一个整数显示更新或删除了几条记录。

你可能感兴趣的:(MyBatis学习)