对于JPA来说,SpringBoot是依赖Hibernate才得以实现的。 Hibernate在3.2版本中已经对JPA实现了完全的支持。
JPA的所维护的核心是实体(Entity Bean),而它是一个通过持久化上下文(Persistence Context)来使用的
- 对象关系映射(Object Relationl Mapping), JPA支持注解或者XML方式
- 实体操作API,完成CRUD操作,持久化和查询
- 约定面向对象查询语言JPQL(Java Persistence Query Language)
MyBatis的配置
MyBatis 是一个基于SqlSessionFactory构建的框架。它的作用是生成SqlSession接口对象,Mybatis-Spring的结合中可以“擦除”这个对象,使业务代码更具可读性。MyBatis应用生命周期理当只存在一个SqlSessionFactory对象,并且往往会使用单例模式。
![](https://i-blog.csdnimg.cn/blog_migrate/41576145e8f85558f09a4254c4e513ec.png)
- properties 属性:实际应用统一采用Spring进行配置
- setting 设置:它的配置将改变MyBatis底层的行为,可以配置映射规则,如果自动映射和驼峰映射、执行器类型、缓存等
- typeAliases (类型别名):因为它使用类全限名称会比较长,Mybatis提供默认认的别名,此外也可以通过 typeAliases配置自定义
- typeHandlers 类型处理器:在Mybatis写入和读取数据库的过程 中对于不同类型的数据(java 是 java Type ,数据库是 jdbcType) 进行自定义转换
- objectFactory (对象工厂):这是一个在MyBatis 生成返回的POJO时会调用的工厂类。一般我们Mybatis默认(DefaultObjectFactory)就可以了。
- plugins 插件:有时候也称拦截器,它通过动态代理和责任链接模式来完成
- enviroments 数据库环境: 可以配置数据库连接事务和内容
- databaseProvider 数据库厂商标识: 允许MyBatis配置多类型数据库运行
- mappers: 提供 SQL 和POJO映射关系
@Alias(value = "user")
public class User {
}
事务
@Transation 源码分析
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {
// 指定事务管理器
@AliasFor("transactionManager")
String value() default "";
// 同value属性
@AliasFor("value")
String transactionManager() default "";
// 指定传播行为
Propagation propagation() default Propagation.REQUIRED;
// 指定隔离级别
Isolation isolation() default Isolation.DEFAULT;
// 指定超时时间
int timeout() default -1;
// 是否开始只读事务
boolean readOnly() default false;
// 方法发生指定异常名称时回滚,默认所有异常都回滚
Class<? extends Throwable>[] rollbackFor() default {};
// 方法发生指定异常名称时回滚,默认是所有异常都回滚
String[] rollbackForClassName() default {};
//方法在发生指定异常名称时不回滚,默认是所有异常都回滋
Class<? extends Throwable>[] noRollbackFor() default {};
String[] noRollbackForClassName() default {};
}
隔离级别
多个事务同时访问同一记录,会引起数据不一致的情况,便是数据库的丢失更新(Lost Update)