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语句引用,极大的节约了效率。

相关文章
|
2月前
|
Java 数据库连接 Maven
后端框架学习-----mybatis(使用mybatis框架遇到的问题)
这篇文章总结了在使用MyBatis框架时可能遇到的几个常见问题及其解决方法,包括配置文件注册、接口绑定、方法名匹配、返回类型匹配、Maven资源导出、时区设置和字符编码问题。
|
9天前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
14 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
40 5
|
2月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
2月前
|
Java 数据库连接 mybatis
mybatis框架图
文章介绍了MyBatis框架的起源、发展和其作为持久层框架的功能,提供了MyBatis的框架图以帮助理解其结构和组件。
mybatis框架图
|
2月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
2月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
2月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
2月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
3月前
|
Java 数据库连接 Spring
搭建 spring boot + mybatis plus 项目框架并进行调试
搭建 spring boot + mybatis plus 项目框架并进行调试
77 4