JPA基础知识
概念:
jpa是一种ORM(对象映射模型)规范
Hibernate是一套持久层框架,也是jpa的实现之一,同时也是最好的实现,其底层还是jdbc
JPA 和 JDBC的区别
Java操作数据库只能使用jdbc实现,jpa的底层还是jdbc
Jdbc:运行效率高(越低层运行效率越高)
Jpa:开法效率高
兼容各种数据库
有内置缓存(优化)
缺点:性能不好控制
配置核心文件(persistence.xml)
<persistence-unit name="持久化单元名称【随便写,有意义】" transaction-type="事务类型【RESOURCE_LOCAL:本地事务;JTA】">//持久化单元,一个持久化单元连接一个数据库
<properties>属性
//四大金刚【驱动,数据库地址,用户,密码】
<propert name="hibernate.connection.driver_class"value="com.mysql.jdbc.Driver"></property>
<property name="hibernate.connection.url" value="jdbc:mysql:///jpa"></property>
<property name="hibernate.connection.username" value="root"></property>
<property name="hibernate.connection.password" value="1q2w3e"></property>
//方言 数据库引擎、版本
<property name="hibernate.dialect org.hibernate.dialect" value="MySQLDialect"></property>
//自动建表
<property name="hibernate.hbm2ddl.auto" value="update"></property>
...
</properties>
实体类:
类注解:
@Entity:告诉JPA该类要创建表
@Table(name=“xxxx”):设置表名
属性注解:
@id:把id设置成主键(也可以是其他属性)
@GeneratedValue:自增策略
@Lob 装大量数据
@Temporal :时间
@Transient:使改属性不添加到表中
@Colnum(参数列表):设置其他的一些字段属性
参数列表:
insertable=false 不允许添加
updatable=false 不允许修改
name=列表名(添加该属性)
length=修改长度
nullable:非空
unique:唯一 )
JPA的CRUD
//创建ben工厂
EntityManagerFactory factory=Persistence.createEntityManagerFactory("持久单元名");
//获取EntityManager对象
EntityManager entityManager = factory.createEntityManager();
//开启事务
entityManager.getTransaction().begin();
//操作
entityManager....
//关闭事务
entityManager.getTransaction().commit();
//释放资源
entityManager.close();
添加:
persist(obj);
修改:
merge(obj);
删除:
remove(obj);
//注:删除之前需要先查询这条数据,如果存在则删除,所有参数就是查询到的这条数据
查询一条数据:
find(实体类.class , id);
查询多条数据:
先通过jpql语句获取到Query对象,然后调用getResultList()方法,如:
//创建jpql语句
String jpql = "select o from "+cls.getName() + " o";
//获取Query对象
Query query = entityManager.createQuery(jpql);
//通过Query对象获得结果集合
List resultList = query.getResultList();
注:查询语句不需要事物管理
建表策略(自动建表value值)
Create-drop
先删除表,在创建,在删除【在删除条件:工厂释放资源】
Create
先删除表,在创建
Update
更新;表存在就更新数据,不存在就创建表(特性:只增不减,在表中属性只会执行添加,不会减少且属性类一旦创建也不会在此改变)
核心API
Persistence【持久化对象】
创建工厂对象
EntityManagerFactory
【工厂对象;重量级对象】:实体管理工厂,线程安全;一个项目对应一个工厂对象
重:(1)含有连接池
(2)二级缓存
(3)所有预定sql,jpql语句
(4)所有对象关系
EntityManager
【连接对象,轻量级对象】:数据库连接,线程不安全;一个线程对应一个对象
轻:一级缓存
EntityTransaction
事务对象
563

被折叠的 条评论
为什么被折叠?



