MyBatis知识盘点【肆】_映射器

来源:互联网 发布:mysql with as 实现 编辑:程序博客网 时间:2024/05/31 18:30

上篇文章:MyBatis知识盘点【叁】_mybatis-config.xml配置说明



select元素
id:唯一主键
parameterType:参数类型,可指定bean
resultType:返回结果集类型
resultMap:自定义映射规则和resultType 2选1
flushCache:调用sql后,让mybatis清空之前的一级和二级缓存,默认false
useCahe:使用二级缓存保存结果,默认true
timeout:超时时间,默认是驱动jar包里的时间
fetchSize:获取记录总条数管理,默认是驱动jar包里的
statementType:使用哪个statement,枚举STATEMENT、PREPARED、CallableStatement。默认PREPARED
resultOrdered:仅适用于嵌套结果集select语句。如果是true,就认为是包含了嵌套结果集或分组。默认false


insert元素
id:唯一主键
parameterType:参数类型,可指定bean
flushCache:调用sql后,让mybatis清空之前的一级和二级缓存,默认false
useCahe:使用二级缓存保存结果,默认true
timeout:超时时间,默认是驱动jar包里的时间
keyProperty:设置哪个列为主键,联合主键都好分隔。不能和keyColumn连用
keyColumn:知名第几列为主键,参数只接受int,不能和keyProperty连用。
useGeneratedKeys:让MyBatis使用JDBC的getGeneratedKeys方法去除由数据库内部生成的主键。默认false。

在Order里设置id的成员变量

<insertid="appPay"parameterType="com.hzdracom.core.bean.Order"useGeneratedKeys="true" keyProperty="id">
    <selectKeykeyProperty="id" resultType="int" order="BEFORE">
        select if(MAX(id) is null,1,id+2) newId from user_order
    </selectKey>
         insert into user_order(
             orderId,
             user_orderId,
             upm_orderId,
             app_key,
             app_group_id,
             app_business_id,
             srouce,
             pay_srouce,
             pay_type,
             parter_id,
             order_type,
             platform,
             user_id,
             user_info,
             payment_account,
             status,
             product_id,
             product_name,
             content_id,
             content_name,
             name,
             description,
             show_url,
             price,
             num,
             total,
             phone,
             redirect_uri,
             remark,
             type,
             createtime,
             upm_payorderkey,
             upm_user_key,
             pay_time,
             is_unified_product,
             days,
             starttime,
             endtime)
        values(#{orderId},#{user_orderId},#{upm_orderId},#{app_key},#{app_group_id},#{app_business_id},#{srouce},#{pay_srouce},#{pay_type},#{partnerId},
             #{order_type},#{platform},#{user_id},#{user_info},#{payment_account},0,#{product_id},#{product_name},#{content_id},#{content_name},#{name},
             #{description},#{show_url},#{price},#{num},#{total},#{phone},#{redirect_uri},#{remark},1,#{createtime},#{upm_payorderkey},#{upm_user_key},#{pay_time},
             #{isUnifiedProduct},#{days},NOW(),DATE_ADD(NOW(),INTERVAL IFNULL(#{days},0) DAY))
    </insert>


update、delete元素
返回影响行数

#和$的区别
#{}:会按类型进行转换
${}:不做任何处理


sql元素

sql模糊查询时,可用concat('%',#{参数},'%')拼装条件。

<sqlid = "user_column">
    user_id,phone,nickname,app_group_id,app_business_id
</sql>
    
<selectid="loginUserId"resultType="userInfo">
    SELECT<includerefid = "user_column"/>FROM user_info u WHERE u.user_id = #{userId}
</select>


结果集resultMap

<resultMap>
    <constructor><!-- 如果对应的javabean没有无参的构造方法,那么可在此配置参数构造 -->
        <idArg/>
        <arg/>
    </constructor>
    <id = "A"/> <!-- 主键 -->
    <result/> <!-- <result column="user_orderId" property="user_orderId" jdbcType="VARCHAR" /> -->
    <association property="级联bean名称,定义在自身bean的成员对象" column="级联主键id,传参给后面sql" select="对应bean的mapper中的接口"/> <!-- 一对一级联 -->
    <collection property="级联bean名称,定义在自身bean的成员对象list" column="级联主键id,传参给后面sql" select="对应bean的mapper中的接口"/> <!-- 一对多 -->
    <discriminator javaType="变量的java类型" column="对应bean中的成员变量"> <!-- 鉴别器,根据不用情况映射不用结果集 -->
        <case value="某值" resultType="A1"/>
        <case value="某值" resultType="A2"/>
    </discriminator>
</resultMap>
<resultMap id="A1" type="" extends = "A">
<resultMap id="A2" type="" extends = "A">
级联功能目前只支持查询
关系超过三层时尽量不用,复杂度会很高。


缓存cache
当是同一个sqlSession执行同一个sql的时候,如果缓存开启,第二次查询的时候则会返回缓存中的记录,而不会发送sql到数据库。但是不同sqlSession则不会,因为它们之间是相互隔离的。

一级缓存:缓存在sqlSession层面,不共享;
二级缓存:缓存在SQLSessionFactory层面,可共享,要求返回的pojo必须是可序列化的。默认不开启。想开启,在映射xml中配置<cache/>即可。如此配置,意味着:
select会缓存
insert、update和delete会刷新缓存
缓存通过LRU最近最少使用原则回收

回收策略:
LRU,最近最少使用
FIFO,先进先出
SOFT,软引用
WEAK,弱引用




原创粉丝点击