JPA是描述对象-关系表的映射关系,将运行期实体对象持久化到数据库中,提出以面向对象方式操作数据库的思想。

Hibernate框架核心思想是ORM-实现自动的关系映射。缺点:由于关联操作提出Hql语法。执行CRUD时产生大量冗余的sql,性能较低

mybatis继承Hibernate优点,使用通用mapper插件 实现JPA的思想操作数据库

通用mapper:

一、配置通用mapper插件

<!-- 通用Mapper插件 -->
<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
<!--主键自增回写方法,默认值MYSQL,详细说明请看文档 -->
<property name="IDENTITY" value="MYSQL" />
<!--通用Mapper接口,多个通用接口用逗号隔开 -->
<property name="mappers" value="com.jt.common.mapper.SysMapper" />
</plugin>

  

二、通过注解的方式将POJO对象与表进行关联,之后可以通过通用Mapper方式进行操作.

详细步骤:实体类上加注解@Table(name="表名"),id属性加@Id标识主键信息,如果是自增则标识@GeneratedValue(strategy=GenerationType.IDENTITY)

三、通用mapper的流程

1、从serviceImpl实现类里面读取到调用的mapper的方法

2、通过反射获取找到该mapper类

3、获取当前mapper的父级接口,并判断该父级接口是不是泛型

4、从泛型中获取泛型的类型是哪个类

5、找到该类,并查看该类上面的注解,读取注解信息,获取name属性对应的数据库表名

6、编写sql实现数据查询

 public SqlNode TestFindCount(MappedStatement ms){
try {
//1.获取客户端调用的方法 com.jt.manage.mapper.ItemMapper.findTextCount()
String methodPath = ms.getId(); //2.获取ItemMapper的字符串
String targetPath = methodPath.substring(0, methodPath.lastIndexOf(".")); //3.获取ItemMapper对象
Class<?> targetClass = Class.forName(targetPath); //4.获取ItemMapper的父级接口 由于接口是可以多继承的
Type[] types = targetClass.getGenericInterfaces(); //5.获取SysMapper
Type targetType = types[0]; //判断该类型是否为泛型 SysMapper<Item>
if(targetType instanceof ParameterizedType){
//表示当前接口是一个泛型,并且获取泛型参数
ParameterizedType parameterizedType = (ParameterizedType) targetType; //SysMapper<T,V,K> 获取泛型的全部参数
Type[] supers = parameterizedType.getActualTypeArguments(); //表示成功获取第一个参数
Class<?> targetMethodClass = (Class<?>) supers[0]; //判断Class不能为空
if(targetMethodClass !=null){ //判断该类中是否含有注解
if(targetMethodClass.isAnnotationPresent(Table.class)){
//获取目标对象的注解
Table table = targetMethodClass.getAnnotation(Table.class); //获取表名
String tableName = table.name(); //定义查询sql语句
String sql = "select count(*) from "+tableName; //定义sqlNode对象
SqlNode sqlNode = new StaticTextSqlNode(sql); return sqlNode;
}
}
} } catch (ClassNotFoundException e) { e.printStackTrace();
}
return null;
}

  

说明:

targetClass.getGenericInterfaces() 表示获取接口的父级类型

java.lang.reflect.ParameterizedType; 泛型类型的接口

java.lang.reflect.Type;  接口的超类Type

JPA、Hibernate框架、通用mapper的更多相关文章

  1. 使用spring jpa hibernate框架时报错:javax.validation.UnexpectedTypeException: HV000030

    错误信息: [#%&*^]20190521121942:497.!react:all.,RctJobExecutor-1#D9AA5167921A464CA9DDA14943545426%NA ...

  2. MyBatis插件 - 通用mapper

    1.简单认识通用mapper 1.1.了解mapper 作用:就是为了帮助我们自动的生成sql语句 [ ps:MyBatis需要编写xxxMapper.xml,而逆向工程是根据entity实体类来进行 ...

  3. JPA、Hibernate框架、通用mapper之间的关系及通用mapper的具体实现

    JPA是描述对象-关系表的映射关系,将运行期实体对象持久化到数据库中,提出以面向对象方式操作数据库的思想. Hibernate框架核心思想是ORM-实现自动的关系映射.缺点:由于关联操作提出Hql语法 ...

  4. 通用mapper的框架

    这两个框架都是一个大神写的.用来做单表的增删改查,爽爽的. 但是复杂的查询还不知道如何用,所以我还按传统的方式 写 service maperr ,写SQL来处理复杂查询,与多表的查询.  它的复杂查 ...

  5. 通用mapper版+SpringBoot+MyBatis框架+mysql数据库的整合

    转:https://blog.csdn.net/qq_35153200/article/details/79538440 开发环境: 开发工具:Intellij IDEA 2017.2.3 JDK : ...

  6. Springboot整合通用mapper

    通用Mapper的分享使用 参考博客 Mybatis的通用mapper和Hibernate一样都实现了JPA接口,简化了数据库的操作 和Hibernate的对比 Hibernate和Mybatis都是 ...

  7. 通用Mapper与分页插件的集成

    SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...

  8. Hibernate框架--配置,映射,主键

    SSH框架: Struts框架, 基于mvc模式的应用层框架技术! Hibernate,    基于持久层的框架(数据访问层使用)! Spring,   创建对象处理对象的依赖关系以及框架整合! Da ...

  9. mybatis通用mapper的使用

    项目中持久层封装了两套,一个hibernate,一个是mybatis.hibernate中封装了一些通用的方法,但是mybatis中没有,基于这个需求开始使用mybatis的通用mapper.     ...

随机推荐

  1. http短连接与长连接简介

    1.HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题 ...

  2. CSS3绘制特殊图形

  3. JAVA如何request没有参数的post提交

    过去做网页的时候 post过来的值都是带参的 我就request.getParameter("")来获取 现在过来的不带参 就一串字符串 我应该怎么获取? //用获取数据流的方式, ...

  4. Dynamic learning rate in training - 培训中的动态学习率

    I'm using keras 2.1.* and want to change the learning rate during training. I know about the schedul ...

  5. dataset数据来源方式两种,页面展示

    这两种方式都能获取到报表类别数据. <%--ds 数据源来自JavaBean--%><model:dataset id="ds"> <model:re ...

  6. H5横向滚动提示

    <marquee>啦啦啦,Hello World</marquee>

  7. R语言预测实战(游浩麟)笔记2

    特征构建技术 特征变换,对原始的某个特征通过一定的规则或映射得到新特征的方法,主要方法包括概念分层.标准化.离散化.函数变换以及深入表达.特征变换主要由人工完成,属于比较基础的特征构建方法. 概念分层 ...

  8. Applet

    Applet简介: 可以翻译为小应用程序,Java Applet就是用Java语言编写的这样的一些小应用程序,它们可以直接嵌入到网页中,并能够产生特殊的效果.包含Applet的网页被称为Java-po ...

  9. 如何启动linux的telnet服务--转载

    如何启动linux的telnet服务 如何启动linux的telnet服务 步骤如下: 1.如果安装了telnet.telnet-server的rpm包,就跳到2.,否则安装这个包. 2.修改teln ...

  10. BatchPreparedStatementSetter,用法

    spring批量更新数据 ---- BatchPreparedStatementSetter (2007-04-15 15:41:29) 转载▼ 标签: spring batchpreparedsta ...