文档章节

ccmapper 一个可以自定义通用sqlmapper小框架

天地的星空
 天地的星空
发布于 2017/02/15 15:36
字数 746
阅读 27
收藏 0

ccmapper讲解(使用mybatis)

主要解决问题

  • 单表的简单sql重复编码或者重复生成xml代码
  • 单表重复java的sqlApi接口代码

cmaper的使用表现形式


@Autowired
private CustomAnnoMapper<OrgAnno> orgAnnoCustomAnnoMapper;

@Autowired
private CustomAnnoMapper<UserAnno> userAnnoCustomAnnoMapper;

UserAnno userAnno = userAnnoCustomAnnoMapper.getId(xx)
OrgAnno orgAnno = orgAnnoCustomAnnoMapper.getId(xx)

原理篇

需要解决的问题

  • 数据库表和bean的映射问题
  • 通用接口和具体接口的映射问题
  • sql生成映射到具体接口上的问题

解决办法

  • 第一个问题通过有多种解决方法
  • persistence标准注解
  • 属性名和字段名一致
  • 希望任意定制这种映射关系
  • 第二个问题

可以通过接口继承来实现

  • 第三个问题

通过泛型和mybatis的xxxProvider注解来实现

ccmapper原理

  • 自己写的通用mapper
	public interface SimpleCommonMapper<T> {

	@SelectProvider(type = SimpleMapperSqlProvider.class, method = "getById")
		public T getById(Object key);

	}

  • ccmapper会在项目启动时通过javassist动态生成一个具体泛型接口如下,并将这个mapper注入到Spring中
public interface SimpleCommonMapper<User> {

	@SelectProvider(type = SimpleMapperSqlProvider.class, method = "getById")
		public User getById(Object key);

	}
  • 然后看看 MapperSqlProvider如何定义
public abstract class AbstractSqlProvider {
	protected Class<?> beanClazz;
	public AbstractSqlProvider(String className){
		。。。
	}
}

只要你继承上面这个这个类会动态的将SimpleCommonMapper上面的泛型User类或者其他的类似传递到这里

ccmapper的使用

当然我们使用ccmapper的并不需要每一步自己去写。ccmapper已经内置了2套SQLAPi

下面我们介绍下内置的注解api的使用

首先我们介绍下CustomCommonSqlProvider

这个类内置了一些通用的单表增删改查sql拼接

public class CustomCommonSqlProvider extends AbstractSqlProvider {

	protected Map<String, String> propertyAndColumnMap = new HashMap<String, String>();
	protected String tableName;
	protected String primaryKey;

	public CustomCommonSqlProvider(String className) {
		super(className);
	}

	public String insert(Object o) {
		BEGIN();
		INSERT_INTO(tableName);
		for (String propertyName : propertyAndColumnMap.keySet()) {
			VALUES(propertyAndColumnMap.get(propertyName), "#{" + propertyName + "}");
		}
		return SQL();
	}

	....

我们注解sqlAPI依托上面这个类来写更加方便,我们需要做的就是注解SqlProvider继承上面这个类,然后通过注解规则映射出上面的3个属性就可以使用上面那个类里面的sql生成方法了,当然你也可以自己写。取决于个人爱好

public class CustomAnnoDynamicMapperSqlProvider extends CustomCommonSqlProvider {
....具体代码看ccmapper的com.ccmapper.customanno.CustomAnnoDynamicMapperSqlProvider这个类

现在我们写一下通用mapper

public interface CustomAnnoMapper<T> {

	@InsertProvider(type = CustomAnnoDynamicMapperSqlProvider.class, method = "insert")
	public void insert(T t);

	@UpdateProvider(type = CustomAnnoDynamicMapperSqlProvider.class, method = "updateNotNullByPrimaryKey")
	public void updateNotNull(T t);

	@SelectProvider(type = CustomAnnoDynamicMapperSqlProvider.class, method = "selectListByExample")
	public List<T> getListByExample(Example example);
	
	....
}

具体api看源代码, 我们可以看到Example example 这个也是一个内置的动态查询api。。模仿(Mapper这个插件Api写的。)

现在我们已经有了SqlProvider和通用Mapper 是时候注入结合Spring了。。ccmapper内置类一个非常好用的扫描和注入Spring的类

<!-- baseBeanPackage和beanClasssList可以配合使用也可以单独使用 2项必填一项 -->
    <bean class="com.ccmapper.core.CommonBeanDefinitionRegistry">
    	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        <property name="baseBeanPackage" value="com.demo.annobean"></property>
        <!-- commonMapper和sqlProvider必填 -->
        <property name="commonMapper" value="com.ccmapper.customanno.CustomAnnoMapper"></property>
        <property name="sqlProvider" value="com.ccmapper.customanno.CustomAnnoDynamicMapperSqlProvider"></property>
    </bean>

© 著作权归作者所有

共有 人打赏支持
天地的星空
粉丝 1
博文 6
码字总数 1925
作品 0
海淀
程序员
星空倒影/ccmapper

ccmapper 用来自定义通用mapper的工具集(可以自己定义通用mapper的sql方法) 注: 参考了 mapper插件的API。。。 。。 原理 动态生成泛型子接口,并注入到spring中 核心只有2个类。。。Mappe...

星空倒影
2016/06/14
0
0
Mybatis 通用 Mapper 3.0.0 发布

MyBatis通用Mapper3 极其方便的使用Mybatis单表的各种通用方法 Mapper 3.0.0更新日志: 将EntityMapper和SqlMapper移出,现在是独立项目EntityMapper 将Mapper全部接口方法拆分为独立接口,方...

Liuzh_533
2015/06/05
5.7K
8
Mybatis 通用 Mapper 2.2.0 发布

Mybatis通用Mapper 极其方便的使用Mybatis单表的增删改查 2.2.0 新增SqlMapper,可以使用MyBatis直接执行sql,详细文档 2.2.0版本之后,通过SqlMapper可以支持多表的操作,但是需要在代码中直...

Liuzh_533
2015/03/11
2.1K
7
MyBatis直接执行SQL的工具SqlMapper

可能有些人也有过类似需求,一般都会选择使用其他的方式如Spring-JDBC等方式解决。 能否通过MyBatis实现这样的功能呢? 为了让通用Mapper更彻底的支持多表操作以及更灵活的操作,在2.2.0版本...

Liuzh_533
2015/03/11
0
14
Mybatis 通用 Mapper 2.3.1 发布

Mybatis通用Mapper 极其方单表的增删改查 2.3.1 完善所有和PrimaryKey有关的通用查询 修复Mapper接口中updateByPrimaryKey操作会更新主键的bug 修复Mapper接口中使用Example查询的时候,条件...

Liuzh_533
2015/04/13
4.9K
13

没有更多内容

加载失败,请刷新页面

加载更多

awk命令用法介绍

10月18日任务 9.6/9.7 awk 1.awk(上)(下) 1.awk 分段操作功能 指定分隔符,并把第一段打印出来,不会改动文件内容 将所有内容打印出来 awk 没有指定分隔符号,则会默认用空格或者空白字符...

hhpuppy
40分钟前
1
0
Spring Cloud Eureka Server高可用之:在线扩容

本文共 1591字,阅读大约需要 6分钟 ! 概述 业务微服务化以后,我们要求服务高可用,于是我们可以部署多个相同的服务实例,并引入负载均衡机制。而微服务注册中心作为微服务化系统的重要单元...

CodeSheep
52分钟前
1
0
内网esxi主机上安装CoreOS虚拟机

CoreOS是一个为专门运行容器而设计的轻量级linux发行版,旨在通过轻量的系统架构和灵活的应用程序部署能力简化数据中心的维护成本和复杂度。它没有包管理工具,运行容器化应用以提供服务;默...

hiwill
今天
1
0
20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
今天
3
0
WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部