• Mybatis的使用中的一些不太注意的技巧


    以下就总结一下Mybatis的使用中的一些不太注意的技巧,算是Mybatis的总结笔

    1、插入时主键返回

         我们向数据库插入一条记录是,使用Mybatis的<insert>是无法返回插入的主键的,而我们需要这个刚插入的主键,可以如下返回

             自增主键:使用last_insert_id()查询刚插入的key的id,该方法需要和insert配合使用,是插入之后获取。

             result返回的是插入成功条数,而主键id返回到CourseInfo的id属性中

            

    1. <insert id="insert" parameterType="org.andy.shop.model.CourseInfo" >  
    2.     insert into course_info (id, cname, caddress)  
    3.     values (#{id,jdbcType=INTEGER}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR})  
    4.     
    5.      <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">  
    6.        select last_insert_id()  
    7.      </selectKey>  
    8.   </insert>  


    或者如下的写法更简单:

    1. <insert id="insert" parameterType="org.andy.shop.model.CourseInfo" useGeneratedKeys="true" keyProperty="id">  
    2.     insert into course_info (id, cname, caddress  
    3.       )  
    4.     values (#{id,jdbcType=INTEGER}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR}  
    5.       )  
    6.   </insert>  


           非自增主键:但我们的ID为uuid字符类型的32为长度时,我们使用mysql的uuid()查询主键,是在查询之后在插入。

    1. <insert id="insert" parameterType="org.andy.shop.model.CourseInfo" >  
    2.     <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">  
    3.       select uuid()  
    4.     </selectKey>  
    5.     insert into course_info (id, cname, caddress)  
    6.     values (#{id,jdbcType=VARCHAR}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR})  
    7.   </insert>  
     

        使用oracle数据库时:使用 序列名.nextval()函数获取。


    2、别名的使用

          一般定义别名,在Mapper配置的可以使用别名,定义单个别名如下

    1. <configuration>  
    2. <typeAliases>  
    3.  <typeAlias type="org.andy.shop.model.CourseUserInfo" alias="CourseUserInfo"/>  
    4. </typeAliases>  
    5. </configuration>  

          自动定义别名:Mybatis 将自动扫描包名下的po,别名就是类名(大写小写都可以)
    1. <typeAliases>  
    2.   <package name="org.andy.shop.model"/>  
    3. </typeAliases>  


    3、动态sql使用

          一般我们会涉及多个动态查询条件,一般我们是通过 where 1 = 1,这样可以处理where后面对应全空的情况,我们可以使用<where>标签,该标签可以自动处理。

    1.        <where>  
    2.   <if test="name != nulll">  
    3.      and name like concat('%',trim(#{name,jdbcType=VARCHAR}),'%')   
    4.   </if>  
    5. </where>  


    4、sql片段

         我们可以将常用的重复的sql定义sql片段

        定义如下:

        

    1. <sql id="Base_Column_List" >  
    2.     id, name, url, priority, logo, img  
    3.   </sql>  

       引用该片段如下:

      

    1. <include refid="Base_Column_List" />  

    5、关联查询

    一对一关联查询

           

            一对多关联查询


    6、延迟加载

           延迟加载:先从单表查询,在需要时从关联表查询,可以大大的提高数据库性能,单表查询的性能要快于多表联合查询的速度。

    而Mybatis的associate、collection就支持延迟加载功能。

        

        开启延迟加载:

          需要在Mybatis的核心配置文件中配置configuration开启setting两个配置

          

         设置lazyLoadingEnabled为true, aggressiveLazyLoading为false


    未完待续。

          

           mybatis文档地址:http://www.mybatis.org/mybatis-3/zh/index.html

  • 相关阅读:
    Analysis Services features supported by SQL Server editions
    Azure DevOps to Azure AppServices
    Power BI For Competition
    Win10开机“提示语音”以及”随机播放音乐”
    Azure DevOps
    Allow Only Ajax Requests For An Action In ASP.NET Core
    Mobile CI/CD 101
    Configure SSL for SharePoint 2013
    AWS Step Function Serverless Applications
    Cordova Upload Images using File Transfer Plugin and .Net core WebAPI
  • 原文地址:https://www.cnblogs.com/lykxqhh/p/5691185.html
Copyright © 2020-2023  润新知