新公司需要的技术,往往是不同的,有些是我们没有办法掌握的。所以每个人都要有自学的能力,虽然是菜鸟,但是小白逆袭或许就是我们最值得自豪的一件事。最近找了份新工作,公司 用到的是hibernate Spring Data Jpa 所以我学习了JPA的内容,和大家分享,希望与大家互相学习和增加经验。
JPA:
Java Persistence API:用于对象持久化的 API(Spring 对于我们来说也是轻量级的api集合,但是Spring属于框架体系,但是Jpa我们却不能说成是框架,更确切的说应该算是一种规范,hibernate算是jap的一种实现,JPA是hibernate的一个功能的子集。是一种ORM映射规范,JPA支持HQL jpql的编写)。
JPA的jar包下载:
JPA的作者就是hibrenate的作者,我们可以在hibrenate的官网中下载hibrenate的jar包,含有JPAjar包。
JPA的实现:
1.jap包括一个配置文件,配置文件可以配置数据源 缓存 类用来让我们知道具体的哪个类被持久化,实现与数据库的ORM关系,
这样我们就可以通过query接口实现 查 删 改 操作,增加是特殊的,不会通过query接口来实现,而是直接通过entityMaanager来实现的。
----------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="demo" transaction-type="RESOURCE_LOCAL">
<!--
配置使用什么 ORM 产品来作为 JPA 的实现
1. 实际上配置的是 javax.persistence.spi.PersistenceProvider 接口的实现类
2. 若 JPA 项目中只有一个 JPA 的实现产品, 则也可以不配置该节点.
-->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- 添加持久化类 -->
<class>com.lx.entity.User</class>
<!--
配置二级缓存的策略
ALL:所有的实体类都被缓存
NONE:所有的实体类都不被缓存.
ENABLE_SELECTIVE:标识 @Cacheable(true) 注解的实体类将被缓存
DISABLE_SELECTIVE:缓存除标识 @Cacheable(false) 以外的所有实体类
UNSPECIFIED:默认值,JPA 产品默认值将被使用
-->
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
<!-- 连接数据库的基本信息 -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<!-- 配置 JPA 实现产品的基本属性. 配置 hibernate 的基本属性 -->
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
----------------------------------------------------------------------------------------------------------------------------------
JPA支持自动创建数据库表:
1.我们可以通过在持久化类上加入@Entity(name="SSJ")注解,给定name属性值,并且在类上添加@Table(name="SSJ")
2.在配置文件中添加属性“<property name="hibernate.hbm2ddl.auto" value="update"/>”
这样就可以实现创建表的操作。
注意:JPA简化了数据访问层的开发,因为我们不需要有过多的复杂配置,基于注解的方式就可以自动实现ORM。只要在配置文件中添加“<class>com.lx.entity.User</class>”就可以与数据库表建立联系,并且Jpa也是面向对象的数据访问,因为hibrenate是Jpa的一种实现,如果知道Hibreate那么JPA很好理解和掌握。
----------------------------------------------------------------------------------------------------------------------------------
JPA常用的注解:
1.类上的注解:
@NamedQuery(query="DELETE FROM User us WHERE us.id=?1",name="demo")
@Table(name = "jpdemo") -------->指定持久化类 对应数据库的表名
@Entity -------->指定持久化类,和实体映射
2.get方法上的注解(一般注解会放在getter方法上)
@Transient -------->当我们创建属性并非数据库已有字段时 候,采用次注解,告诉不是数据库已有字段
@GeneratedValue(strategy = GenerationType.IDENTITY) -------->主键属性上,自增长方式,不同数据库 有不同的数据库使用 MYSQL 采用
GenerationType.IDENTITY
@Id -------->表明哪个属性代表的是数据库的主键
@Column(name = "USER_ID", unique = true, length = 11) -------->用在列上,可以配置唯一 不为空,与 数据库字段对应的列名,长度,当持 久 化类属性和数据库字段不同时可以采 用此注解,如果相同,可以省略,默认 是@Basic
@Basic -------->当数据库字段和持久化类属性相同 时 默认是@Basic可以写可以不写
@Temproal(TemporalType.DATE) -------->当我们传递 Date(java.util.Date),可以用此 来注解指定格式,time date timeStamp
@JoinColumn -------->用来指定外键关联,是用链式操作的 注解
@OneToMany -------->一对多的注解
@ManyToMany -------->双向多对对的注解
@ManyToOne -------->多对一的注解
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------
有点写不动了 先这样。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。