JPA
1.实体注解 @Entity主键注解 @Id 主键策略@GeneratedValue(strategy=GenerationType.AUTO[IDENTITY,SEQUENCE,TABLE]) auto:根据方言数据库自己选择,默认选项 identity:MySQL支持 sequence:oracle支持@Column(length=32)字段长度 @Temporal(TemporalType.DATE) 日期类型注解,只存储日期@Lob 字段为长文本或者二进制数据时@Transient 属性不和数据库字段映射@Basic(fetch=Fetch.LAZY) 用在字段上面,延迟加载,用不到的时候是不会加载到内存的2.提供的接口EntityManagerFactory 功能等价于hibernate里的sessionFactory
EntityManager 等价于SessionManager
EntityManagerFactory factory=Persistence.careateEntityManagerFactory("[配置文件里的持久化单元名称]")EntityManager em=factory.createEntityManager();em.getTranscation().begin(); //开始事物em.persist(new Entity());em.getTransaction().commit();em.close();factory.close();
find() :根据ID号加载实体,相当于hibernate里的get()
getReference(): 根据ID号懒加载实体类,只有访问实体类的对象时才会与数据库同步,相当于hibernate里的loadremove():删除,里面参数为对象查询语句:Query query=em.createQuery("select o from person o where o.id=?1");query.setParameter(1,2);ListpersonList=query.getResultList();
更新查询:
1 Query query=em.createQuery("delete from person o where o.id=?1");2 query.setParameter(1,2);3 quert.executeUpdate();
refresh():使内存中的Javabean和数据库数据再一次同步化。注:已经执行过find函数了,此时别人修改了数据库中的数据,你再次调用find函数是无法更新值得,因为jpa会默认从EntityManager中返回给你
3、双向管理与级联操作1-m关系(用注解OneToMany):多的一方为关系的维护的,关系维护断负责外键记录的更新,关系被维护断是没有权利更新外键字段的其中可以有参数cascade,值可取CascadeType.Refresh,CascadeType.persist等
fetch:值可取FetchType.EAGER(立即得到),FetchType.LAZY(延迟加载),默认为EAGER
mappedby:出现这个的类为关系的被维护端,值为维护端中的一个属性。例如订单和订单项,在订单里的订单项上的oneToMan注解中出现此参数,表示订单表Order为被维护的表,订单项表的OrderItem里的Order属性来维护,则mappedby的值就是"order"