Mybatis框架使用的学习

简介: 在沃尔玛项目中的Mybatis框架使用了两种实现CRUD的模式,为Dao文件编写相应的xml实现功能与直接在Dao的方法中直接使用注解开发

在沃尔玛项目中的Mybatis框架使用了两种实现CRUD的模式,为Dao文件编写相应的xml实现功能与直接在Dao的方法中直接使用注解开发

在xml中实现

<select id="getBillRefByPreInvoiceIds" resultType="com.xforceplus.wapp.repository.entity.TXfDeductPreInvoiceEntity">  
    select  
    txdpi.*  
    from  
    t_xf_deduct_pre_invoice txdpi  
    left join t_xf_pre_invoice txpi  
    on  
    txdpi.pre_invoice_id = txpi .id  
    where  
    txpi.pre_invoice_status &lt;&gt; 7  
    and txdpi.pre_invoice_id in  
    <foreach collection="preInvoiceIds" item="id" index="index" open="(" close=")" separator=",">  
        #{id}  
    </foreach>  
</select>

注解实现

@Update("update t_dx_record_invoice set remaining_amount = IIF(remaining_amount is null , invoice_amount - #{et.remainingAmount}  , "  
          + "IIF( remaining_amount > invoice_amount,  invoice_amount- #{et.remainingAmount} ,  remaining_amount- #{et.remainingAmount} ))" +  
            "where id = #{et.id} " +  
            "and IIF(remaining_amount is null ,invoice_amount-#{et.remainingAmount}, remaining_amount - #{et.remainingAmount}) >= 0 "  
//            + "and IIF(remaining_amount is null ,remaining_amount - #{et.remainingAmount}) <= invoice_amount"  
    )  
    int deductRemainingAmount(@Param(Constants.ENTITY) TDxRecordInvoiceEntity tDxRecordInvoiceEntity);

当然,对于一些简单的CRUD这两种方式实现都非常方便,但是有时候不同的参数不同需要的SQL也不同,这时候就需要用到动态SQL了,动态SQL就是用if choose (when, otherwise) trim (where, set) foreach来让动态的生成SQL语句

<sql id="bill_query_params">  
    <if test="null != queryTab and null != queryTab.queryParams and queryTab.queryParams.size!=0">  
            <!-- 防止 SQL中  AND(()) 出现 -->  
            <if test="queryTab.queryParams[0].billStatus != null or queryTab.queryParams[0].settlementStatus != null">  
                <!-- 业务单+结算单组合状态对象列表 -->  
                <foreach collection="queryTab.queryParams" item="param" index="index" open="AND ((" close="))" separator=" OR ">  
                    <!-- 业务单状态判断 -->  
                    (  
                    <if test="param.billStatus !=null and param.billStatus.size!=0">  
                        d.status in  
                        <foreach collection="param.billStatus" item="billStatus" index="index" open="(" close=")"  
                                 separator=",">  
                            #{billStatus}  
                        </foreach>  
                    </if>                    <!-- 结算单状态判断 -->  
                    <if test="param.settlementStatus !=null and param.settlementStatus.size!=0">  
                        AND s.settlement_status in  
                        <foreach collection="param.settlementStatus" item="settStatus" index="index" open="("  
                                 close=")" separator=",">  
                            #{settStatus}  
                        </foreach>  
                    </if>                    <!-- 业务单开票状态判断 -->  
                    <if test="param.makeInvoiceStatus !=null and param.makeInvoiceStatus.size!=0">  
                        AND d.make_invoice_status in  
                        <foreach collection="param.makeInvoiceStatus" item="makeStatus" index="index" open="("  
                                 close=")" separator=",">  
                            #{makeStatus}  
                        </foreach>  
                    </if>                    )  
                </foreach>  
            </if>    </if></sql>

沃尔玛项目中这个动态参数SQL就是充分利用了mybatis的灵活性让SQL语句在开发过程中复用率得到极大的提高,简化了大量的SQL代码语句,让我们可以在SQL层面去执行一个逻辑代码。同时,这也是一个SQL片段,可以被多个SQL语句引用,极大的节约了效率。

相关文章
|
19天前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
108 29
|
1月前
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
|
3月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
75 1
持久层框架MyBatisPlus
|
4月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
677 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
4月前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
165 0
|
5月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
70 5
|
6月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
6月前
|
Java 数据库连接 mybatis
mybatis框架图
文章介绍了MyBatis框架的起源、发展和其作为持久层框架的功能,提供了MyBatis的框架图以帮助理解其结构和组件。
mybatis框架图
|
6月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
6月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。