0 Star 0 Fork 0

赵光 / easy-access

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

查看最新源码请移步源码地址

easy-access

介绍

Easy-access是一个将Mybatis框架最简化后的基础框架,你可以在此基础上随意的二次开发(下拉到最后查看)。同时,在项目defaults目录下你可以看到内嵌一套默认实现方案,相当于集Mybatis,Mybatisplus,Easy-mybatis于一身了,同时,还可兼容它们!好不好用,试试你就知道了!

使用说明

Maven引用(点击 https://search.maven.org/search?q=g:io.github.xiaoyudeguang 查看最新版本)

<dependency>
    <groupId>io.github.xiaoyudeguang</groupId>
    <artifactId>easy-access</artifactId>
    <version>3.1.8-RELEASE</version>
</dependency>

使用默认access框架实现

实体类编写

考虑到很多项目已经基于Mybatisplus了,所以easy-accss的默认实现并没有自定义主键注解和表字段注解,而是沿用了mybatisplus的@TableId注解和@TableField注解,详情可参考easy-mybatis(项目地址:https://gitee.com/xiaoyudeguang/easy-mybatis )

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zlyx.easycore.annotations.Desc;
import com.zlyx.easymybatis.annotations.ForeignKey;
import com.zlyx.easyweb.web.annotations.TableBean;

@TableBean(todo = { "" }, value = "db_person", alias = "per")
@TableName("db_person")
public class Person {

	@Desc(value = { "用户id" })
	@TableId("person_id") 
	private Long id;
 
        @Desc(value = { "用户姓名" })
	@TableField(value = "name")
	private String name;
	
	@Desc(value = { "部门名称" })
        @ForeignKey(key = "name", table = Dept.class)
	@TableField(value = "dept_name")
	private String deptName;
	
        @Desc(value = "部门实体对象")
	private Dept dept;
	
        ... 其他部分略(get和set方法)...
}

数据交互接口编写(仿Mapper接口)

import com.zlyx.easyaccess.abstracts.AbstractAccesser;
import com.zlyx.easyaccess.annotations.Accesser;
import com.zlyx.easyaccess.defaults.annotations.Select;
import com.zlyx.easytest.access.model.Person;

@Accesser(todo = { "测试" })
public interface TestAccesser extends AbstractAccesser<Person>{

	@Select("select * from db_person limit 0,1")
	public List<Person> select();
}

AbstractAccesser接口提供的原子方法(仿mybatisplus)

public interface AbstractAccesser<T> {

   @Insert(value = SQL.PLACEHOLDER)
   public boolean insert(T t);
   
   @Insert(value = SQL.PLACEHOLDER)
   public boolean insertBatch(List<T> ts);
   
   @Update(value = SQL.PLACEHOLDER)
   public boolean updateById(T t);
   
   @Update(value = SQL.PLACEHOLDER)
   public boolean updateBatchById(List<T> ts);
   
   @Delete(value = SQL.PLACEHOLDER)
   public boolean deleteById(Object id);
   
   @Delete(value = SQL.PLACEHOLDER)
   public boolean deleteByIds(List<Object> ids);
   
   @Select(value = SQL.PLACEHOLDER)
   public T selectOne(Map<String, Object> params);
   
   @Select(value = SQL.PLACEHOLDER)
   public T selectOne(EasyMap params);
   
   @Select(value = SQL.PLACEHOLDER)
   public List<T> selectList(Map<String, Object> params);
   
   @Select(value = SQL.PLACEHOLDER)
   public List<T> selectList(EasyMap params);
  
}

多表联查(easy-mybatis的能力)

import com.zlyx.easymybatis.abstraccts.AbstractMapper;
import com.zlyx.easymybatis.annotations.EasySelect;
import com.zlyx.easymybatis.annotations.Condition;
import com.zlyx.easymybatis.annotations.Table;
import com.zlyx.easymybatis.utils.Page;

@Mapper
public interface PersonMapper extends AbstractMapper<Person>{
       
        /**
         * 一个普通的mybatis方法
         */
        @Select(value = { "select * from swh_person" })
	public List<Person> testMybatis(String name);

        /**
         * EasyMybatis多表联查方法
         */
	@EasySelect(tableName = "db_person", results = {Table.FILED_ALL}, 
			    tables = {  
			                @Table(tableName = "db_dept")
			    },
			    conditions  = {
				     @Condition(fields = { "name" }, tableName = "person")
			    }
        )
	public List<Person> testSelect(String name);

        /**
         * EasyMybatis多表联查分页方法
         */
        @EasySelect(tableName = "db_person", results = {Table.FILED_ALL},
			    tables = {
			    		@Table(tableName = "db_dept")
			    },
			    conditions = {
			    		@Condition(fields = { "name" }, tableName = "db_person")
			    }
			    page = true)
	 public Page<Person> testPage(String name, int pageNum, int pageSize);
}

因为和easy-mybatis一脉相承(都是easy-database的产品项目),所以同样的,你不需要编写任何XML文件。查询结果集默认支持JSON,实体类(包括多表联查,请参考easy-mybatis),Map集合。你也可以直接基于easy-database,模仿easy-mybatis或easy-access开发一个新的产品。

SQL拦截器

你可以定义一个Spring容器,实现SqlInterceptor接口的doInterceptor方法,然后就可以对sql进行一些执行前处理了。easy-access的拦截器是方法级别的。你也可以自定义一些别的注解,在SQL拦截器中获取该注解并对SQL做一些额外处理。

package com.zlyx.easyaccess.interceptors;

import java.lang.reflect.Method;

/**
 * @Auth 赵光
 * @Describle SQL执行前过滤器(方法级别)
 * @2019年1月11日 上午11:16:10
 */
public interface SqlInterceptor {

	/**
	 * SQL拦截器
	 * @param method
	 * @param sql
	 * @return
	 */
	public String doInterceptor(Method method, String sql);
}

结果集拦截器

package com.zlyx.easyaccess.interceptors;

import com.zlyx.easyaccess.abstracts.AbstractSqlAssembler;

/**
 * @Auth 赵光
 * @Describle
 * @2019年1月12日 上午11:53:05
 */
public interface ResultInterceptor {

	/**
	 * SQL拦截器
	 * @param assembler SQL打包器
	 * @param res  结果集对象
	 * @return
	 */
	public String doInterceptor(AbstractSqlAssembler assembler, Object res);
}

二级开发说明

1. 实现数据交互层:继承AbstractDataAccesser抽象类并声明@DataAccesser注解,请参考DefaultDataAccesser的实现:

package com.zlyx.easyaccess.defaults;

import java.lang.reflect.Method;
import java.sql.Connection;

import com.zlyx.easyaccess.abstracts.AbstractDataAccesser;
import com.zlyx.easyaccess.abstracts.AbstractSqlAssembler;
import com.zlyx.easyaccess.abstracts.AbstractSqlExcutor;
import com.zlyx.easyaccess.annotations.DataAccesser;

/**
 * @Auth 赵光
 * @Describle
 * @2019年1月12日 上午8:57:46
 */
@DataAccesser(value = "defaultAccesser", todo = { "默认数据交互层实现" })
public class DefaultDataAccesser extends AbstractDataAccesser{
	
	@Override
	public AbstractSqlAssembler getAssembler(Class<?> tClass, Method method, Object[] args) throws Exception {
		return new DefaultSqlAssembler(tClass, method, args);
	}
	
	@Override
	public AbstractSqlExcutor getSqlExcutor(Connection conn) {
		return new DefaultSqlExcutor(conn);
	}
}

2. 实现SQL打包器:继承AbstractSqlAssembler类并实现assemble()方法

package com.zlyx.easyaccess.defaults;

import java.lang.reflect.Method;

import com.zlyx.easyaccess.abstracts.AbstractSqlAssembler;
import com.zlyx.easycore.tool.EasyBuffer;
import com.zlyx.easycore.tool.EasyMap;

public class DefaultSqlAssembler extends AbstractSqlAssembler {

	public DefaultSqlAssembler(Class<?> tClass, Method method, Object[] args) throws Exception {
		super(tClass, method, args);
	}

	@Override
	public String assemble(EasyMap paramsMap, String sql) {
		for (String key : paramsMap.getKeys()) {
			sql = sql.replace(EasyBuffer.wrapper("${", key, "}"), key);
			sql = sql.replace(EasyBuffer.wrapper("#{", key, "}"), key);
		}
		return sql;
	}
}

3.实现SQL执行器:继承AbstractSqlExcutor类并实现excute()方法(也可选择不实现)

public class DefaultSqlExcutor extends AbstractSqlExcutor {

	public DefaultSqlExcutor(Connection conn) {
		super(conn);
	}
}

4.调用自定义数据交互层

(1)将TestAccesser接口的@Accesser注解的value值修改为实现自定义数据交互层时声明的@DataAccesser注解的value值即可。

(2)如果系统中只有一个实现,也可不填写,将直接调用唯一的用户自定义数据交互层实现。

(3)如果系统中没有自定义数据交互层实现时,将调用默认实现。

空文件

简介

一个将Mybatis框架最简化后的基础框架,你可以在此基础上随意的二次开发。同时,在项目defaults目录下你可以看到内嵌一套默认实现方案,相当于集Mybatis,Mybatisplus,Easy-mybatis于一身。好不好用,试试你就知道了!,真金不怕火炼 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/xiaoyudeguang/easy-access.git
git@gitee.com:xiaoyudeguang/easy-access.git
xiaoyudeguang
easy-access
easy-access
master

搜索帮助