JPA相关概念

一.JPA理论斜体样式部分
(1)什么是jpa
jpa:java persistence api的缩写,是ORM对象关系映射规范
jpa是规范,hibernate是他的一个实现,实现不唯一,但最好.
最底层操作还是jdbc(需要引入驱动包)
(2)什么是orm?
o:object对象,r:关系型数据库,m:映射
–>对象关系映射
(3)jpa与jdbc的区别
JPA(Hibernate)的底层还是JDBC
-JPA开发效率高,因为代码简单
-JPA运行效率低,(jdbc高,因为jdbc更接近底层)
-JPA兼容各种数据库,方便移植
-JPA内置缓存(性能在一定程度上还有优化)
二.创建项目
(1)新建maven项目
maven项目结构图
(2)导包
在外面的pom.xml配置文件中配置相关坐标
在这里插入图片描述
(3)引入persistence.xml文件
Idea生成文件方式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
持久化单元配置内容:

<persistence-unit name="cn.itsource.jpa" transaction-type="RESOURCE_LOCAL">
    <!--配置数据库四大金刚-->
    <properties>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
        <property name="hibernate.connection.url" value="jdbc:mysql:///jpa"/>
        <property name="hibernate.connection.username" value="root"/>
        <property name="hibernate.connection.password" value="123456"/>
        <!--配置一个方言,目的是为了确定是那种数据库-->
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <!--建表策略-->
        <property name="hibernate.hbm2ddl.auto" value="create"/>
        <!--显示sql语句-->
        <property name="hibernate.show_sql" value="true"/>
        <!--显示漂亮的sql语句格式-->
        <property name="hibernate.format_sql" value="true"/>
    </properties>
</persistence-unit>

(4)准备domain对象

@Entity  //告诉jpa我是实体类,来管理我
@Table(name="t_employee")//对应数据库中的表名
public class Employee {
    @Id
    @GeneratedValue
    private Long id;//主键注解
    private String name;
    private String password;
	...
	 (省略getter/sette/和toString方法)
}

(5)基本功能测试

Persistence-->EntityManagerFactory-->EntityManager-->crud
Persistence创建实体管理工厂
工厂创建实体管理对象-->
实体管理对象通过persist/merge/remove/find等方法实现crud

–>基本流程:

//1.拿到entityManagerFactory
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("cn.itsource.jpa");
//2.通过Factory拿到entityManager对象
EntityManager entityManager = entityManagerFactory.createEntityManager();
//3.开启事务
entityManager.getTransaction().begin();

//4.修改数据,merge修改数据(合并)
//这里的merge方法是可以换成其他你需要的方法的
entityManager.merge(employee);

//5.提交事务
entityManager.getTransaction().commit();
//6.关闭entityManager
entityManager.close();

三.CRUD功能实现
在完成增删改查之前,先提取一个工具类,避免重复的代码,影响各位理解

***是用单列的方式来提取的工具类***
public class JpaUtil {
    private static EntityManagerFactory factory;
    //static静态代码块,加载时运行,且只运行一次,
    static {
        //ctrl+alt+T 将该行代码包裹起来,进行 操作(try catch/if/for/等等)
        try {
            factory = Persistence.createEntityManagerFactory("cn.itsource.jpa");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //静态方法,返回EntityManager,直接拿到返回EntityManager对象
    public static EntityManager getEntityManager(){
        return factory.createEntityManager();
    }
}

(1)增加保存数据

entityManager.persist(employee);

(2)修改合并数据

	entityManager.merge(employee);
	//3.删除数据,删除需要先查询出来,再判断,删除
	Employee employee = entityManager.find(Employee.class, id);
	if(employee!=null){
    	//删除,传入一个对象
	    entityManager.remove(employee);
	}

(3)查询一条数据

return entityManager.find(Employee.class,id );

(4)查询所有数据

	/准备jpql语句
	String jpql="select o from cn.itsource.jpa.domain.Employee o";
	//3.根据jpql拿到查询对象
	Query query = entityManager.createQuery(jpql);
	return query.getResultList();

四.建表策略
jpa中的四种建表策略

		create-drop:先删除,再创建,创建完成后删除
		create:先删除,在创建,每次都会创建一张新表
		uodate:没有表就创建,有就修改,修改只增不减,不会修改数据类型
		validate:验证功能,只验证domain中写了的属性
		<!--建表策略-->
		create:先删除,再创建,每次测试或运行都会重新创建一张新表,适合做测试
        <property name="hibernate.hbm2ddl.auto" value="create"/>

五.重要对象的认知
(1)Persistence:持久化

		解析相应的核心配置文件
		创建EntityManagerFactory工厂对象

(2)EntityManagerFactory:实体管理工厂

	重量级:连接池,二级缓存,所有实体映射关系,预编译的jpql/sql
	线程安全,(1:1:1)1:1:1解释在下发
	用于创建EntityManager对象

(3)EntityManager:实体管理

	轻量级:一级缓存,线程不安全,完成crud,
	一级缓存命中:同一个EntityManagerFactory,同一个EntityManager,同一个OID
	OID:类的全限定名,能够统一定位到某个资源
	cn.itsource.jpa.domain.Employee#id

(4)事务

	EntityManager只有一个事务,
	如果多个系统,多个数据库,会用到-->JTA

六.映射细节
(1)@colunm
在这里插入图片描述
(2)@lob:大文本,能够装很多内容
(3)transient:临时属性,jpa不会去管理这个属性,*
(4)temporal:时间设置
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值