2021-07-19

4 篇文章 0 订阅
4 篇文章 0 订阅

一、Mybatis仿JPA增强

第1章 快速入门

1.1设计说明

基于数据库表设计一般以t_xx_yy格式命令,以及很多表操作的复杂问题,设计了本工具类,旨在减少DAO层编码设计,一般数据库格式不会大变,有一定程度的硬编码(数据库相关列/表名),但整体不影响使用。
代码基于反射和Mybatis Provider高级应用实现。
设计力求一套代码设计,满足数据库的基本操作以及复杂业务需求。

1.2基础注解

注解 解释
@SqlTableInfo 注释表名
@SqlInfoField 注释字段名
@Data lombok注解,实现get/set/构造器等
@Primary 注释字段主键

1.3相关组件介绍

1.3.1 Repositories介绍

1.3.1.1提供了DynamicSqlProvider 接口

标记接口
一、捕获泛型提示的类型和实体ID的类型
二、在类路径扫描期间,帮助Spring容器找到具体的数据仓库接口

1.3.1.2提供操作支持

提供了增删查改,分页等基础CURD机制。

提供单条数据结果集,与list集合结果集封装。

提供自定义sql执行机制。

1.3.2 QueryParam实体基类

基础实体类,用于注解解析。
核心 属性
// 设置分页起始点
setLimitStart(int num);
// 设置分页总计
setLimitPage(int num);
// 查询表名
queryTable
// 设置字段组合Map集合
fieldMap
// 设置字段类型Map集合
fieldTypeMap

1.4 Springboot集成说明

1.4.1pom引入

<dependency>
    <groupId>com.hecore</groupId>
    <artifactId>common-bdp</artifactId>
    <version>v-1.0</version>
</dependency>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

1.4.2实体类注解

参照数据库需要

package com.hecore.cbs.mybaits.model;

import com.epoch.core.entity.QueryParam;
import com.epoch.core.support.mybatis.annotation.SqlInfoFiled;
import com.epoch.core.support.mybatis.annotation.SqlTableInfo;
import lombok.Data;

/**
 * @Author: hecore
 * @Date: 2019/12/18 16:04
 * @Description:
 */

@SqlTableInfo(tableName = "t_custom_config")
@Data
public class ConfigInfoVO extends QueryParam {

    @SqlInfoFiled(name = "config_name")
    private String configName;

    @SqlInfoFiled(name = "config_info")
    private String configInfo;

    @SqlInfoFiled(name = "config_code",primary = true)
    private String configCode;

    @SqlInfoFiled(name = "config_flag")
    private String configFlag;

}
1.4.3定制DAO层
package com.hecore.cbs.dao;

import com.epoch.core.dao.DynamicSqlProvider;
import com.hecore.cbs.mybaits.model.ConfigInfoVO;

import org.springframework.stereotype.Repository;

@Repository
public interface ConfigInfoDAO extends DynamicSqlProvider<ConfigInfoVO> {

}

1.4.4扫描配置

package com.hecore.cbs;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan({"com.hecore.cbs.dao","com.epoch.core.dao"})
public class CbsSyncServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(CbsSyncServiceApplication.class, args);
    }

}

1.5 spring集成说明

1.5.1Spring-mybatis.xml配置插件

<!-- 2019-12-13 hecore 配置自定义的通用Mapper-Mybatis的插件plugin-->
<property name="plugins">
    <array>
        <bean class="com.epoch.core.support.mybatis.result.ResultMapInterceptor">
            <property name="properties">
                <value>  property-key=property-value </value>
            </property>
        </bean>
    </array>
</property>

1.5.2其他同上

1.6测试说明

1.6.1测试查询

ppackage com.hecore.cbs.mybaits.service.impl;

import com.epoch.core.dao.DynamicSqlProvider;
import com.epoch.core.entity.QueryParam;
import com.epoch.core.support.mybatis.sql.DynamicMapperCustomSql;
import com.hecore.cbs.dao.ConfigInfoDAO;
import com.hecore.cbs.mybaits.model.ConfigInfoVO;
import com.hecore.cbs.mybaits.service.IConfigService;
import com.hecore.rest.ReturnT;
import org.apache.ibatis.annotations.SelectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

/**
 * @Author: hecore
 * @Date: 2021/7/8 10:06
 * @Description:
 */

@Service
public class ConfigServiceImpl implements IConfigService {

    @Autowired
    private ConfigInfoDAO configInfoDAO;

    @Override
    public ReturnT query(){
        ConfigInfoVO configInfoVO =new ConfigInfoVO();
        configInfoVO.setConfigCode("BANK_SYNC_FLAG");
        ConfigInfoVO resVO = configInfoDAO.selectInfoSql(configInfoVO);
        return new ReturnT(resVO);
    }

    @Override
    public ReturnT delete() {
        ConfigInfoVO configInfoVO =new ConfigInfoVO();
        configInfoVO.setConfigCode("TEMP_CODE");
        int res=configInfoDAO.deleteInfoSql(configInfoVO);
        return new ReturnT(res);
    }

    @Override
    public ReturnT update() {
        ConfigInfoVO configInfoVO =new ConfigInfoVO();
        configInfoVO
                .setConfigCode("TEMP_CODE")
                .setConfigName("更新临时编码");
        int res=configInfoDAO.updateInfoSql(configInfoVO);
        return new ReturnT(res);
    }

    @Override
    public ReturnT insert() {
        ConfigInfoVO configInfoVO =new ConfigInfoVO();
        configInfoVO
                .setConfigCode("TEMP_CODE")
                .setConfigName("插入临时编码");
        int res=configInfoDAO.insertInfoSql(configInfoVO);
        return new ReturnT(res);
    }


}

测试结果:

1.6.2测试插入

在这里插入图片描述

1.6.3测试更新

在这里插入图片描述

1.6.4测试删除

在这里插入图片描述

第2章 DQM设计

2.1 DQM介绍

该语法是:带查询功能的方法名由查询策略(关键字)+ 查询字段 + 一些限制性条件组成,具有语义清晰、功能完整的特性,我们实际工作中 80% 的 API 查询都可以简单实现。
综上,总结 3 点经验:
方法名的表达式通常是实体属性连接运算符的组合,如 And、or、Between、LessThan、GreaterThan、Like 等属性连接运算表达式,不同的数据库(NoSQL、MySQL)可能产生的效果不一样,如果遇到问题,我们可以打开 SQL 日志观察。
IgnoreCase 可以针对单个属性(如 findByLastnameIgnoreCase(…)),也可以针对查询条件里面所有的实体属性忽略大小写(所有属性必须在 String 情况下,如 findByLastnameAndFirstnameAllIgnoreCase(…))。
OrderBy 可以在某些属性的排序上提供方向(Asc 或 Desc),称为静态排序,也可以通过一个方便的参数 Sort 实现指定字段的动态排序的查询方法(如 repository.findAll(Sort.by(Sort.Direction.ASC, “myField”)))。

2.2 排序相关注解

注解名 注解解释
@orderBy 作用于字段增加排序字段,默认type asc,level为1
@orderBy(type=ASC,level=1) 作用于字段Type为ASC|DESC,level 1.2…自增,代表排序sql组装优先顺序.由于排序涉及多字段可能。
@orderBy(type=ASC,level=1,case=””) 作用于字段用于实现 order by case when语法;注解case中为case when完整逻辑

2.3 Between and 注解

注解名 注解解释
@betweenVal(between=””,and=””) 作用于字段between为between前值,and为之后值

2.4 like注解

注解名 注解解释
@likeVal(likeType=PRE,value=””) 作用于字段,likeType, PRE|SUFFIX|ALL 代表 %在前后,字段前后都有; value指字段值

第3章 自定义sql执行

3.1 介绍

自定义sql执行可用于定制化sql计划以及实现复杂查询以及执行特定更新删除等sql,满足程序使用的特质化需求。
缺点是代码硬编码。

3.2 核心api

List selectListInfoBySql(QueryParam var1);
int executeInfoBySql(String var1);

3.3 测试

@Override
public ReturnT custom() {
    ConfigInfoVO configInfoVO=new ConfigInfoVO();
    configInfoVO.setSql("select config_name configName from t_custom_config where config_code=\"BANK_SYNC_FLAG\"");
    List<ConfigInfoVO> list= configInfoDAO.selectListInfoBySql(configInfoVO);
    return new ReturnT(list);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值