Mybatis的Mapper映射文件中常用标签

Mapper文件标签

Mapper 中提供了 9 个顶层标签,其中 1 个已经过期,我们不做了解,另外 8 个都是必须要掌握的

<cache>:该命名空间的缓存配置

<cache-ref>:引用其他命名空间的缓存配置

<resultMap>:用于解决实体类属性名与数据库表中字段名不一致的情况,可以将查询结果映射成实体对象

<parameterMap>式风格的参数映射,已被废弃

<sql>:可被其他语句引用的可复用的语句块

<insert>:用来映射插入语句

<update>:用来映射更新语句

<delete>:用来映射删除语句

<select>:用来映射查询语句

select

用来映射查询语句

<select id="listUserByUserName" parameterType="String" resultType="User">
  select user_id,user_name from user where user_name=#{userName}
</select>

常用的二级标签

<select
            id="selectPerson"
            parameterType="int"
            parameterMap="deprecated"
            resultType="hashmap"
            resultMap="personResultMap">
</select>

insert

<insert
  id="insertLwUser"
  parameterType="User"
  parameterMap="deprecated"
  keyProperty=""
  useGeneratedKeys=""
</insert>

useGeneratedKeys

可选属性。配置为true时,MyBatis会使用JDBC的getGeneratedKeys方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值为false。

keyProperty

可选属性。唯一标记一个属性,MyBatis会将通过getGeneratedKeys 的返回值或者通过insert 语句的selectKey 子元素设置它的键值,默认值是unset 。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表

注意:高版本的mybatis支持批量插入数据的时候返回多条数据的主键ID,低版本的只支持插入一条数据的时候返回该条数据的主键ID

通过selectKey获取自定义列

<insert id="insert" useGeneratedKeys="true" keyProperty="userid">
  <selectKey keyProperty="userId" resultType="string" order="BEFORE">
    SELECT LAST_INSERT_ID()
  </selectKey>
  insert into user(user_id,user_name) values (#{userId},#{userName})
</insert>

selectKey中的order属性有2个选择:BEFORE和AFTER。

  • BEFORE:表示先执行selectKey的语句,然后将查询到的值设置到JavaBean对应属性上,然后再执行insert语句。
  • AFTER:表示先执行AFTER语句,然后再执行selectKey语句,并将selectKey得到的值设置到JavaBean中的属性。上面示例中如果改成AFTER,那么插入的address就会是空值,但是返回的JavaBean属性内会有值。

PS:selectKey中返回的值只能有一条数据,如果满足条件的数据有多条会报错,所以一般都是用于生成主键,确保唯一,或者在selectKey后面的语句加上条件,确保唯一

update

和insert基本一致

delete

除了少了useGeneratedKeys,keyProperty标签之外,其余的和insert,update一样

sql

用来封装可复用的 sql 语句,可以包含在其他语句中

这时候select语句就可以引用:

<sql id="myCloumn" >
  id,address
</sql>
<select id="selectUserAddress" resultType="org.yqiang.mybatis.entity.UserAddress">
  select <include refid="myCloumn"></include>
  from user_address
</select>

resultMap

用于解决实体类属性名与数据库表中字段名不一致的情况,可以将查询结果映射成实体对象

定义一个 resultMap:

<resultMap id="JobResultMap" type="User">
  <result column="user_id" property="userId" jdbcType="VARCHAR" />
  <result column="user_name" property="userName" jdbcType="VARCHAR" />
</resultMap>

这时候select语句就可以引用:

<select id="selectUserAndJob" resultMap="JobResultMap">
  select * from user
</select>
posted @ 2024-10-14 23:30  YQiang  阅读(17)  评论(0编辑  收藏  举报