JPA初识(下一篇文章Springdata 尽请期待)

新公司需要的技术,往往是不同的,有些是我们没有办法掌握的。所以每个人都要有自学的能力,虽然是菜鸟,但是小白逆袭或许就是我们最值得自豪的一件事。最近找了份新工作,公司 用到的是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                                                                                                 -------->多对一的注解

----------------------------------------------------------------------------------------------------------------------------------






----------------------------------------------------------------------------------------------------------------------------------

jpa支持三种查询方式
1,原生的sql语句(原生的不建议使用还需要自己去进行参数的封装)
2,jpql
String jpql = "SELECT lower(c.email) FROM Customer c";
List<String> emails = entityManager .createQuery(jpql) .getResultList();
3,namedquery namedquerys
 1、使用@NamedQuery注解在实体类中定义命名查询。 
  @NamedQuery(name="findAllUser",query="SELECT u FROM User u") 
  @NamedQuery中的属性name指定命名查询的名称,query属性指定命名查询的语句。 
  如果要定义多个命名查询,需要使用@NamedQueries。 
  @NamedQueries({ 
          @NamedQuery(name="findAllUser",query="SELECT u FROM User u"), 
          @NamedQuery(name="findUserWithId",query="SELECT u FROM User u WHERE u.id = ?1"), 
          @NamedQuery(name="findUserWithName",query="SELECT u FROM User u WHERE u.name = :name") 
      }) 
  2、定义好命名查询后,可以使用EntityManager的createNamedQuery方法传入命名查询的名称创建查询。例如:createNamedQuery("findAllUser"); 

----------------------------------------------------------------------------------------------------------------------------------

有点写不动了  先这样。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值