MyBatis基础知识之映射器

作者: singworld 分类: MyBatis 发布时间: 2019-05-01 15:49

screenshot.jpeg

select 查询

1.简单的select元素应用

<select id="queryName" parameter="string" resultType="int">
select count(*) total from t_user
where user_name like concat(#{firstName},'%')
</select>

public Integer queryName(String firstName)

2.自动映射和驼峰映射

自动映射autoMappingBehavior 三个参数
1. NONE 不进行自动映射
2. PARTIAL 默认值,只对没有嵌套结果集进行自动映射
3. FULL 对所有结果集进行映射
驼峰映射
mapUnderscoreToCameCase = true

3.传递多个参数

  1. 使用map接口传递参数 一般不用
  2. 使用注解传递参数 用的也不多,适合参数小于5个 有些公司会要求面向对象开发 一个参数也要用实体传参
public List<Role> findRole(@Param("roleName" String roleName @Param("note") String note);)
  1. 通过实体传参
public List<Role> findRole (RoleParams roleparam);
<select id="queryName" parameterType="com.xxx.yyy.RoleParams" resultType="role">
select xxxxx
</select>

使用resultMap映射结果集

<mapper namespaces ="com.xxx.yyy.RoleMapper">
    <resultMap id="roleMap" type="role">
        <id property="id" column="id">
        <result property="roleName" column="role_name">
        <result property="note" column="note">
    </resuleMap>

    <select id="getRole" parameteTyper="long"  resultMap="roleMap">
    select id ,role_name,note xxxx
    </select>
</mapper>

分页参数RowBounds \<\select>中无需配置

public List<Role> findRole(@Param("roleName" String roleName @Param("note") String note,RowBounds RowBound);)

insert插入语句

简单插入

<insert id="insertRole" parameterType="role">
    insert into t_role()xxxxx
</insert>

主键回填 useGeneratedKeys

<insert id="insertRole" arameterType="role" useGeneratedKeys=“true” KeyProperty="id">
    insert into t_role()xxxxx
</insert>

自定义主键 selectKey

order=”BEFFORE” 表示执行插入语句之前生成执行

<insert id="insertRole" arameterType="role" >
<selectKey KeyProperty = "id" resultType="long" order="BEFFORE">
    select if(max(id) = null,1,max(id)+3) from t_role
</selectKey>
    insert into t_role()xxxxx
</insert>

更新和删除

<update id="insertRole" parameterType="role">
    update t_role xxx where id =#{id}
</update>
<delete id="insertRole" parameterType="role">
    deletet_role xxx where id =#{id}
</delete

sql元素

<sql id="roleCols">
id,role_name,note
</sql>

select <include refid="roleCols"/> form xxxx

<sql id="roleCols">
${alias}.id, ${alias}.irole_name, ${alias}.inote
</sql>

select
<include>
    <propery name="alias" value="r">
</include>
from t_role r where xxx

参数

#{age,javaType=int jdbcType=NUMERIC,typeHandler=MyTypeHandler}
#{width,javaType=double,jdbcType="NUMERIC",numerScale=2}

存储过程

#{id mode=IN}
#{roleName,mode=OUT}
#{note,mode=INOUT}

特殊字符串的替换和处理(#和$)

# 带有双引号
\$ 无双引号
$有安全风险 一般用于表名

resultMap

<resultMap .....>
<constructor>
    <idArg column="id" javaType="int">
    <idArg column="role_name" javaType="string">
</constructor>
</resultMap>

使用map存储结果集

<select id="queryName" parameter="string" resultType="map">
select count(*) total from t_user
where user_name like concat(#{firstName},'%')
</select>

使用POJO存储结果集

一般采用POJO存储结果集但遇到复杂但映射或级联这时候可以使用resultMap

<resultMap id="roleResultMap" type="com.xxx.yyy.pojo.Role">
<id property="id" colunn="id" />
<id property="roleName" colunn="role_name" />
</resultMap>

<select id="queryName" parameter="string" resultMap="roleResultMap">
select xxxxx
</select>

Leave a Reply

Your email address will not be published. Required fields are marked *