JPA入门之添加
2015-12-06 22:28
246 查看
上篇已经讲了JPA的基础配置方法,现在来学习如何利用JPA标准添加对象到数据库中。
首先在配置文件中配置好的数据库里面新建一个表,用于与java里面对象进行映射,这里我们随意建个student表
包括id,name,sex,score四个属性,其中id比较特殊,为主键,并且我们将它设置为自增模式。注意,用JPA标准,库里面必须要设置一个主键和java对象之间的一个属性进行映射,不然用hql语言查询就会出现问题。到这里数据库部分就完成了。接着要实现java代码部分。
首先定义一个与数据库表有映射关系的类student,这里贴上完整代码:
@Entity指定这个类为实体类,@Table(name=”student”)指定这个类与数据库中哪个表相映射,这里指定的是student表。@Data来源于lombok包,这个注解很好的实现了set、get方法,以及重写了toString方法,省了我们很多功夫去写那些代码,值得一用,但是它本身不是JPA标准的范畴。可以看到该类实现了序列化,JPA标准规定所有实现了该标准的类都要实现序列化。@Id指定类中某个属性为主键,它和数据库表中的那个主键一一对应,并且必须得指定,否则就不能通过运行。@Column(name=”name”)指定类中哪个属性和表中的哪个字段对应,由于该类中属性的名字和表中的名字都一样,所有可以不指定,但是如果属性名和字段名不一样,则必须得指定。至此对象和数据库表的关系都设置完毕,接下来开始向数据库表中添加数据了。
新建一个client测试类,完整的代码如下:
要用到JPA,首先得读取配置信息,这句话的意思就是读取配置persistence.xml文件中配置的持久化单元的信息,然后生成一个实体管理工厂。要知道我们现在要和数据库交互,那么程序怎么知道要和哪个数据库,哪个表交互呢,所以有这个语句也不为怪。第二步,通过这个工厂取到一个实体管理器em,也就是这行代码的作用
然后因为要向数据库里面添加数据,所以要开启事务,这里需要注意的是,只要涉及到数据库信息变动的情况,都需要开启事务,比如增加、修改、删除,然后查询因为不涉及数据库数据的改变,所以不需要开启事务。这段代码就是开启事务:
有了事务后,将一个对象添加到数据库的方法,hibernate-jpa有了固定的方法,即:
这三句话将一个student对象添加到数据库中,最后添加完了过后一定要关闭实体管理器
首先在配置文件中配置好的数据库里面新建一个表,用于与java里面对象进行映射,这里我们随意建个student表
包括id,name,sex,score四个属性,其中id比较特殊,为主键,并且我们将它设置为自增模式。注意,用JPA标准,库里面必须要设置一个主键和java对象之间的一个属性进行映射,不然用hql语言查询就会出现问题。到这里数据库部分就完成了。接着要实现java代码部分。
首先定义一个与数据库表有映射关系的类student,这里贴上完整代码:
@Entity @Table(name="student") @Data public class Student implements Serializable{ private static final long serialVersionUID = 1L; @Id private int id; @Column(name="name") private String name; private String sex; private int score; public Student(){ } public Student(String name,String sex,int score){ this.name=name; this.sex=sex; this.score=score; } }
@Entity指定这个类为实体类,@Table(name=”student”)指定这个类与数据库中哪个表相映射,这里指定的是student表。@Data来源于lombok包,这个注解很好的实现了set、get方法,以及重写了toString方法,省了我们很多功夫去写那些代码,值得一用,但是它本身不是JPA标准的范畴。可以看到该类实现了序列化,JPA标准规定所有实现了该标准的类都要实现序列化。@Id指定类中某个属性为主键,它和数据库表中的那个主键一一对应,并且必须得指定,否则就不能通过运行。@Column(name=”name”)指定类中哪个属性和表中的哪个字段对应,由于该类中属性的名字和表中的名字都一样,所有可以不指定,但是如果属性名和字段名不一样,则必须得指定。至此对象和数据库表的关系都设置完毕,接下来开始向数据库表中添加数据了。
新建一个client测试类,完整的代码如下:
public class Client { static EntityManagerFactory emf=Persistence.createEntityManagerFactory("MyJPA"); @Test public void addStudent(){ for(int i=0;i<10;i++){ EntityManager em=emf.createEntityManager(); EntityTransaction et=em.getTransaction(); et.begin(); Student student=new Student("student"+i,"--"+i%2,i*10); System.out.println(student); em.persist(student); et.commit(); em.close(); } } }
static EntityManagerFactory emf=Persistence.createEntityManagerFactory("MyJPA");
要用到JPA,首先得读取配置信息,这句话的意思就是读取配置persistence.xml文件中配置的持久化单元的信息,然后生成一个实体管理工厂。要知道我们现在要和数据库交互,那么程序怎么知道要和哪个数据库,哪个表交互呢,所以有这个语句也不为怪。第二步,通过这个工厂取到一个实体管理器em,也就是这行代码的作用
EntityManager em=emf.createEntityManager();
然后因为要向数据库里面添加数据,所以要开启事务,这里需要注意的是,只要涉及到数据库信息变动的情况,都需要开启事务,比如增加、修改、删除,然后查询因为不涉及数据库数据的改变,所以不需要开启事务。这段代码就是开启事务:
EntityTransaction et=em.getTransaction();
有了事务后,将一个对象添加到数据库的方法,hibernate-jpa有了固定的方法,即:
et.begin(); em.persist(student); et.commit();
这三句话将一个student对象添加到数据库中,最后添加完了过后一定要关闭实体管理器
em.close();这里我们看到student对象并没有指定id属性,这里不需要指定,因为数据库里面我们已经将id字段定义为自增类型,所以插入一个对象,数据库会自动自增id。好了,JPA的对象添加就到这里。
相关文章推荐
- java_4种阶乘算法
- 一个简单的json数组解析(阿里巴巴)
- C语言基础,排序算法之冒泡排序算法
- 在CentOS里使用MySQL Connector/C++
- Django搭建微信公众平台详解 一
- 小成本实现部分选中的复选框
- Arduino 平台与C语言程序设计-week3-Arduino Programs-Lesson1
- 集合1
- 在CentOS里使用MySQL C API
- Android图片处理神器BitmapFun源码分析
- 装饰模式
- web调用本地方法,并实现打印功能(屏幕分辨率导致打印断断续续不清晰)
- 为网站每个网页添加LOGO图标
- 油豆腐
- windows批处理命令学习
- H-Index II
- leetcode Binary Tree Inorder Traversal python
- failed to create hive metastore database tables
- 20135304刘世鹏——信息安全系统设计基础第十二周总结
- 经典CSS实现三角形图标原理解析