Easy-access是一个将Mybatis框架最简化后的基础框架,你可以在此基础上随意的二次开发(下拉到最后查看)。同时,在项目defaults目录下你可以看到内嵌一套默认实现方案,相当于集Mybatis,Mybatisplus,Easy-mybatis于一身了,同时,还可兼容它们!好不好用,试试你就知道了!
<dependency>
<groupId>io.github.xiaoyudeguang</groupId>
<artifactId>easy-access</artifactId>
<version>3.1.8-RELEASE</version>
</dependency>
考虑到很多项目已经基于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方法)...
}
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();
}
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);
}
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开发一个新的产品。
你可以定义一个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);
}
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);
}
}
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;
}
}
public class DefaultSqlExcutor extends AbstractSqlExcutor {
public DefaultSqlExcutor(Connection conn) {
super(conn);
}
}
(1)将TestAccesser接口的@Accesser注解的value值修改为实现自定义数据交互层时声明的@DataAccesser注解的value值即可。
(2)如果系统中只有一个实现,也可不填写,将直接调用唯一的用户自定义数据交互层实现。
(3)如果系统中没有自定义数据交互层实现时,将调用默认实现。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。