jpa对单个实体bean的crud操作
来源:互联网 发布:小米 数据分析师 编辑:程序博客网 时间:2024/06/05 14:08
使用注解方式。
底层还是hibernate的实现,jpa是通过一个数据库驱动的桥梁和hibernate进行操作的,进而调用hibernate的实现。
<persistence 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_1_0.xsd" version="1.0"> <persistence-unit name="itcast" > <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name = "hibernate.connection.driver_class" value = "com.mysql.jdbc.Driver"/><property name = "hibernate.connection.url" value = "jdbc:mysql://localhost:3306/Mysqldb"/><property name = "hibernate.connection.username" value = "root"/><property name = "hibernate.connection.password" value = "123456"/> </properties> </persistence-unit></persistence>
package cn.itcast.bean;public enum Gender { MAN,WOMEN}
package cn.itcast.bean;import java.util.Date;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.EnumType;import javax.persistence.Enumerated;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Lob;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;import javax.persistence.Transient;@Entity//指定该类为实体bean,对应数据库中的表@Table(name="person")//利用该注解可以修改表名public class Person { private Integer id; private String name; private Date birthday;private Gender gender=Gender.MAN;private String info;private Byte[] file;private String imagepath;/**不映射数据库字段**/@Transientpublic String getImagepath() {return imagepath;}public void setImagepath(String imagepath) {this.imagepath = imagepath;} /**大字段,延时加载**/@Lob @Basic(fetch=FetchType.LAZY)public Byte[] getFile() {return file;}public void setFile(Byte[] file) {this.file = file;}@Lobpublic String getInfo() {return info;}public void setInfo(String info) {this.info = info;}/**枚举**/@Enumerated(EnumType.STRING)@Column(length=5,nullable=false) public Gender getGender() {return gender;}public void setGender(Gender gender) {this.gender = gender;} /**日期**/ @Temporal(TemporalType.DATE)//映射到数据库中的字段是日期类型的注解public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public Person() {}//必须要有无参数的构造函数public Person(String name) {this.name = name;} @Id @GeneratedValue public Integer getId() {//每个实体都要有唯一的标识,即主键。@GeneratedValue注解表示的意思是主键自动增长,从1开始return id;}public void setId(Integer id) {this.id = id;}@Column(length=10,nullable=false,name="personName")//@Column注解:指定长度为10,不可为空,数据库中的字段名字为personName //(不指定名字的话默认数据库中就是属性名即name)public String getName() {//String类型的字段必须要自己手动指定长度,数据库默认就是255个字节,不需要这么大,自己手动指定为10个字节return name;}public void setName(String name) {this.name = name;} }
package junit.test;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import javax.persistence.Query;import org.junit.BeforeClass;import org.junit.Test;import cn.itcast.bean.Person;public class PersonTest {@BeforeClasspublic static void setUpBeforeClass() throws Exception {} @Test public void save(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast");//里面的参数值是配置文件中的 <persistence-unit name="itcast" > EntityManager em=factory.createEntityManager(); em.getTransaction().begin();//开启事务 em.persist(new Person("中文"));//保存操作 em.getTransaction().commit();//提交事务 em.close();//关闭事务 factory.close();//关闭工厂类 } /**读取数据不需要开事务,有数据更改动作(添、删、改)时才开启事务**/ @Test public void getPerson(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); Person person=em.find(Person.class,1); em.refresh(person);//若直接更改了数据库中的数据,应该用refresh刷新一下数据库的动态变化,保证输出正确结果 System.out.println(person.getName()); em.close(); factory.close(); } @Test public void getPerson2(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); /**getReference方法返回一个代理对象,只有对该代理对象的属性访问时,才会从数据库中得到该条记录(即发生数据的加载行为)**/ Person person=em.getReference(Person.class,1);//调用getReference方法时,确保没有关闭em /**若查找不到id为1的记录,会在对该代理对象的属性访问时,抛出异常。**/ System.out.println(person.getName()); em.close(); factory.close(); } @Test public void updatePerson(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Person person=em.find(Person.class,1); person.setName("老张");//直接这样就能修改,不需要再通过em调用其他方法 em.getTransaction().commit(); em.close(); factory.close(); } @Test public void updatePerson2(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Person person=em.find(Person.class,1); em.clear();//将实体管理器中的所有实体变为游离状态 /**游离状态的实体无法更新字段**/ person.setName("老陈"); em.merge(person);//将游离状态的实体同步更新进数据库中 em.getTransaction().commit(); em.close(); factory.close(); } @Test public void deletePerson(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Person person=em.find(Person.class,1); em.remove(person); em.getTransaction().commit(); em.close(); factory.close(); } /**JPQL语言**/ @Test public void queryPerson(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); Query query=em.createQuery("select o from Person o where o.id=?1"); query.setParameter(1, 1); //Person person=(Person)query.getSingleResult(); // System.out.println(person.getName()); List<Person> persons=query.getResultList(); for(Person person:persons) { System.out.println(person.getName()); } em.close(); factory.close(); } @Test public void delete(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Query query=em.createQuery("delete from Person o where o.id=?1"); query.setParameter(1,1); query.executeUpdate(); em.getTransaction().commit(); em.close(); factory.close(); } @Test public void update(){ EntityManagerFactory factory=Persistence.createEntityManagerFactory("itcast"); EntityManager em=factory.createEntityManager(); em.getTransaction().begin(); Query query=em.createQuery("update Person o set o.name=:name where o.id=:id"); query.setParameter("name","xxx"); query.setParameter("id",2); query.executeUpdate(); em.getTransaction().commit(); em.close(); factory.close(); } }
0 0
- jpa对单个实体bean的crud操作
- 传智播客--JPA的CRUD操作,映射实体
- JPA的CRUD操作,映射实体
- hibernate 对实体类的crud操作
- 对实体类的CRUD操作
- 对实体类的CRUD操作
- EJB+JPA演示实体类基本操作CRUD的实现
- EJB+JPA演示实体类基本操作CRUD的实现
- jpa对表的crud
- jpa+spring对实体的crud和实现分页功能的简单实用的封装
- JPA学习笔记---JPA实体Bean的建立---链接上一个博文:对实体Bean中属性进行操作:保存日期类型,设置字段的长度,名字,是否为空,可以声明枚举字段;可以存放二进制数据,可以存放
- 69. JPA实体Bean的生命周期
- 69. JPA实体Bean的生命周期
- JPA---CRUD操作
- JPA实现的CRUD
- T4 生成实体和简单的CRUD操作
- LINQ对数据库的CRUD操作
- c语言对数组的操作CRUD
- 年轻,才叫创业
- 101个硬币100真、1假,真假区别在于重量。请用无砝码天平称两次给出真币重还是假币重的结论。
- MFC 下调用Qt编写的含界面的dll
- 时间复杂度为O(n)的排序算法,你会吗?——其实很简单的
- Python中实现远程调用(RPC、RMI)简单例子
- jpa对单个实体bean的crud操作
- linux 软件安装的通行方式
- 大话重构连载8:盘点我们的重构工具箱
- 转:android 对sqlite数据库的增删改查
- hdu 1180 诡异的楼梯
- 跨站点请求伪造
- Java访问控制权限
- Android中R文件的丢失问题以及aapt.exe停止工作如何解决
- mysql中的触发器和事务的操作