JPA入门_day01

1 JPA入门

1.1 什么是JPA

  1. JPA是Java Persistence API的简称
  2. JPA是持久层API,JPA就是做持久层,操作数据库
  3. 它是对象映射框架(ORM)的规范

1.2 为什么需要JPA

1.3 Hibernate和JPA的关系

JPA:它是ORM的规范
Hibernate:是开放源代码的ORM框架
简单一句话:JPA是持久化规范,而Hibernate是其实现。

1.4 JDBC和JPA的优缺点

1.4.1 jdbc优缺点

优点:

  1. jdbc操作数据库的底层技术
  2. 比较简单 比较直接,就可以操作数据库
    缺点:
  3. 转换的时候特别麻烦
  4. 重复性代码比较多
  5. 移植数据库比较麻烦
  6. jdbc 自身没有缓存(Cache),如果性能上面需要控制的化,就需要写缓存代码
  7. jdbc不是面向对象的思维来操作的呀 面向sql操作,如果是sql高手,操作jdbc很爽的;
1.4.2 JPA优缺点

优点:

  1. 面向对象操作,操作对象 就相当于操作数据 比如 entityManager.perisit(employee)
  2. 移植数据比较方法,以后如果想换数据库,只需要换一个数据库方言就OK
  3. JPA有缓存,效率不错的 (一级缓存 二级缓存 查询缓存)
    缺点:
  4. 不能干预sql的生成 ,查询一个数据 find 默认查询所有字段 (select * from )
  5. 有些优化 jpa做不了,比如特别大数据量的时候,jpa也不适合,mybatis也解决不了 (架构策略 分库 分表 (分布式))
  6. 一个项目里面 对sql要求比较高,就不适合jpa

2 jpa的使用

2.1 导入依赖的jar包

在这里插入图片描述

2.2 persistence.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="cn.itsource" transaction-type="RESOURCE_LOCAL">
        <properties>
            <!-- 必须配置4个连接数据库属性 -->
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.url" value="jdbc:mysql:///db0723" />
            <property name="hibernate.connection.username" value="root" />
            <property name="hibernate.connection.password" value="123456" />

            <!-- 必须配置1个方言属性 -->
            <!-- 实现跨数据库关键类 :查询MySQLDialect的getLimitString方法 -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />

            <!-- 可选配置 -->
            <!-- 是否自动生成表-->
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <!-- 是否显示sql -->
            <property name="hibernate.show_sql" value="true" />
            <!-- 格式化sql -->
            <!-- <property name="hibernate.format_sql" value="true" /> -->
        </properties>
    </persistence-unit>
</persistence>

2.3 使用JPA完成一个新增操作

@Test
    public void testJpa() throws Exception {
        //先得到entityManagerFactory
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("cn.itsource.jpa");

    }

    //添加
    @Test
    public void testAdd() throws Exception {
        User user = new User();
        user.setName("皮皮虾");
        //先得到entityManagerFactory
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("cn.itsource.jpa");

        //开启工厂生成entityManager对象
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        //获取事物
        entityManager.getTransaction().begin();//开启事物
        entityManager.persist(user);
        //提交事物
        entityManager.getTransaction().commit();
        //关闭事物
        entityManager.close();
        entityManagerFactory.close();
    }

2.4 建表策略

create 创建策略  每次都要先删除  再创建
 update  更新策略  不会删除  如果发现没有表 也会创建
         如果是表里面新增字段  配置有效果
         如果这个表里面已存在字段,修改属性  没有效果
 create-drop 先删除  在创建 再删除  不怎么会用
 validate  验证策略  如果有对应实体  但是没有对应的数据库表  会报错
           数据库多字段  OK
           数据库少字段  不OK

2.5 单表映射配置

@Entity
@Table(name = "t_employee")
public class Employee {
    @Id
    @GeneratedValue
    private Long id; //要求:主键,使用数据库的自动生成策略

    @Column(name = "username",length = 20,unique = true,nullable = false)
    private String name;  //要求:varchar(20),数据库名称为username,不能为空,唯一
    private String password;

    @Column(columnDefinition="int(20) default 25",updatable = false)
    private Integer age = 25; //要求:默认值是25,在插入数据时不允许覆盖(添加数据时不操作该字段)
    private Boolean sex;// 数据库没有布尔类型,bit对象

    @Column(columnDefinition = "decimal(19,2)")
    private BigDecimal salary;// 19,2

    @Column(updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date createTime;//包含年月日时分秒,不允许修改

    @Temporal(TemporalType.DATE)
    private Date birthday;//包含年月日

    @Temporal(TemporalType.TIME)
    private Date time;//包含时分秒

    @Lob
    private String text;//这是一个大文本

    @Transient
    private String temp;//这一个字段不要同步到数据库
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值