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

上篇文章: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的成员变量

< insert id = "appPay" parameterType = "com.hzdracom.core.bean.Order" useGeneratedKeys="true"  keyProperty="id" >
    <selectKey keyProperty="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('%',#{参数},'%')拼装条件。

< sql id = "user_column" >
     user_id,phone,nickname,app_group_id,app_business_id
</ sql >
    
< select id = "loginUserId" resultType = "userInfo" >
     SELECT < include refid = "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,弱引用




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值