Hibernate&JPA
文章平均质量分 65
dimples_qian
这个作者很懒,什么都没留下…
展开
-
hibernate入门篇
目标:在eclipse中实现一个用hibernate实现的第一个小案例1、创建一个java或者web工程2、项目下创建一个lib文件夹,导jar包用3、导jar包,需要导入三部分:hibernate开发包中的required文件夹下几个包、log4j jar包、数据库驱动jar包它们都可以在官网下载,拷贝导lib里后build path4、创建好Java中的Javabean类User和数据库中的表...原创 2018-07-04 15:30:09 · 120 阅读 · 0 评论 -
hibernate中有关一对多的级联增删改查
还是以User 和 Dog这两张表为例:多表增:分三种情况--主表增(单表增)/从表增/同时增同时增加一个user对象和一个dog对象,且dog属于user,这时候这么写:@org.junit.Test public void test() { Session sesission = SessionFactoryUtils.getSessionFactory().getCurrentSess...原创 2018-07-01 17:29:32 · 1161 阅读 · 0 评论 -
hibernate之inverse、cascade----同时保存主从表信息
如果我们需要新增一个user和一个dog,而这个dog正好属于这个user,那么我们会这么写:@org.junit.Test public void test() { Session sesission = SessionFactoryUtils.getSessionFactory().getCurrentSession(); Transaction tx = sesission.beg...原创 2018-06-29 17:24:46 · 944 阅读 · 0 评论 -
关于hibernate中配置表之间的关系
首先说,表间关系可以说有4种,也可以说有3种,也可以说2种。4种:一对一,一对多,多对一,多对多3种:一对一,(一对多和多对一算一种),多对多2种:一对一,一对多(因为多对多也就是多了个中间表,都是与中间表关联,终究还是两表一对多的关系)那么在hibernate中怎么去配置来阐述表之间的这些关系呢,在数据库里表间关系都是通过外键维护的(即使是一对一的关系,无非两种情况,要么在同一张表中然后两个字段...原创 2018-06-29 15:14:28 · 827 阅读 · 4 评论 -
hibernate中关于一对多的配置
我的user表是主表,dog表是从表直接上示例代码:User类: private int id; private String username; private String password; private Set<Dog> dogs = new HashSet<Dog>(0);//这里值的注意的,new 出来是怕后面用的时候dogs为null报错,但如果直接写...原创 2018-06-28 20:45:54 · 147 阅读 · 0 评论 -
hibernate输出语句但不建表的问题
分为三种情况:1、hbm文件中定义的元素含有sql的关键字例如: <property name="name"></property><property name="master"></property>name 和 master都是mysql中的关键字2、查看实体类中定义的get/set方法有么有类似boolean型的isPass()之类的构造方法,...原创 2018-06-28 20:23:27 · 348 阅读 · 0 评论 -
hibenate中几种查询方式
1、单行查询get/load,这里不再赘述2、SQL查询方式一:SQLQuery query = session.createSQLQuery("sql语句") 这种方式查询出来的的结果一律是List<Object[]>类型方式二:通过这种方式可以获取conn,然后再跟jdbc一样了session.doWork(new Work() { @Overr...原创 2018-06-28 11:41:01 · 731 阅读 · 0 评论 -
session的两种获取方式
session在每个线程中只能有一个,那么我们可以通过ThreadLocal(Session)的方式来让session绑定到一个线程中,当然我们既然用框架那肯定还是选择配置来的快了,在配置文件中第二部分添加如下:<property name="hibernate.current_session_context_class">thread</property>然后就可以调用s...原创 2018-06-27 14:49:51 · 1439 阅读 · 0 评论 -
hibernate之简单CRUD操作
hibernate中的增删改参数都是对象,查则略微不同,要求Object.class和ID具体用法如下:package com.dimples.service;import java.util.List;import org.hibernate.SQLQuery;import org.hibernate.Session;import org.hibernate.Transaction;...原创 2018-06-25 15:04:24 · 158 阅读 · 0 评论 -
hibenate中对象的四种状态
瞬时态:在Java里new出来的就是瞬时态,没有OID,与session无关联,可通过save或update变为持久态。持久态:对象有OID,对象有session管理着,那么它就是持久态托管态:持久态的对象在session关闭以后它就是托管(脱离session管理)态,此时有OID,无session管理删除状态:只有持久态的对象才能被删除,持久态中的对象,调用了delete()方法之后,commi...原创 2018-06-27 11:08:22 · 308 阅读 · 0 评论 -
hibernate中三种lazy----对象导航查询
还是拿User 和 Dog这对关系来说。一:对于User配置文件来说,是管是否查询从表信息。我们一般设置成默认的,也就是lazy=true,因为我们不想加载一个set到内在中占空间,代码如下:User user = session.get(User.class, Integer.parseInt("1"));//执行完这句后只会有一个select语句,是查询user表的System.out.pr...原创 2018-07-02 00:04:18 · 503 阅读 · 0 评论 -
hibernate中多对多关系的配置以及增删改操作
两张表:Performer(演员)和Role(角色)配置分别如下(其实配置一方即可):演员类的配置 <hibernate-mapping package="com.dimples.dao"> <class name="Performer" table="performer"> <id name="id" column="id&a原创 2018-07-02 14:04:34 · 1141 阅读 · 0 评论 -
JPA中手动将EntityManager和线程绑定
package com.dimples.service;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;public class MyJPAUtils { private static En...原创 2018-07-04 14:44:32 · 1735 阅读 · 1 评论 -
JPA中如何获取connaction
这是一个测试我的c3p0连接池是否配置成功的方法:public class JPAC3p0Test { public static void main(String[] args) { // TODO Auto-generated method stub EntityManager em = MyJPAUtils.getEntityManager(); Session sessio...原创 2018-07-04 14:17:26 · 1740 阅读 · 0 评论 -
JPA多对多的增删改查
以学生和老师为例直接上代码,跟一对多里的操作一样的://多对多增加 @Test public void testAdd() { Student stu1 = new Student(); stu1.setName("xuesheng1"); Student stu2 = new Student(); stu2.setName("xuesheng2"); Teacher...原创 2018-07-04 14:03:26 · 4499 阅读 · 0 评论 -
JPA中多对多的配置
以学生和老师为例学生类:package com.dimples.dao;import java.util.HashSet;import java.util.Set;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import...原创 2018-07-04 13:10:29 · 3200 阅读 · 1 评论 -
JPA中的对象导航查询及其lazy属性
这里和hibernate中的对象导航查询特性是一样的,参照下例://对象导航查询 @Test public void testFind() { EntityManager em = MyJPAUtils.getEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); Customer cus...原创 2018-07-04 09:58:28 · 894 阅读 · 0 评论 -
jpa中一对多的级联增删改
以Customer表和Contact表为例:新增://一对多增加 @Test public void testPersist() { Customer customer = new Customer(); customer.setName("新客户"); Contact contact = new Contact(); contact.setName("新联系人"); //...原创 2018-07-04 00:16:42 · 6686 阅读 · 1 评论 -
jpa中的一对多配置----注解方式
JPA中配置实体类与表的对应关系以及配置表之间的关系都是用注解的方式来完成的。原来hibernate是用xml的方式来配置的,后来hibernate自身也带注解的功能了,所以即使不用jpa,hibernate也是能使用注解功能的,其实你可以发现使用注解功能是所引用的那个jar包,就在hibernate开发包中requied文件夹下,所以你不使用jpa去写不导jpa的jar包,注解功能也能照常用。直...原创 2018-07-03 20:53:59 · 3169 阅读 · 1 评论 -
hibernate中的update和merge的区别
首先两者都是更新的方法,但特定情况下merge能做的update不一定能做,看下面栗子: //merge和update的区别 @Test public void mergeAndUpdate() { Session session = SessionFactoryUtils.getSessionFactory().getCurrentSession(); Transaction tx ...原创 2018-07-03 13:58:51 · 722 阅读 · 0 评论 -
JPA 中的CRUD操作
直接上代码了:package com.dimples.service;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.EntityTransaction;import javax.persistence.Query;import org.junit.Test;...原创 2018-07-03 11:25:06 · 1329 阅读 · 0 评论 -
hibernate之JPA入门篇
所谓JPA就是Java persistence api----java持久化标准。由来:大家都知道hibernate是持久层框架都先驱,出世备受瞩目,一个东西出名就就会有无数的追随者,于是市面上出现了很多持久层框架,但各自的方法名称都不同,你的更新方法叫update,我就叫change!这样到最后搞得很乱,给开发者带来很多问题。于是sun公司(当然现在是oracle了)就让hibernate带头...原创 2018-07-02 21:59:07 · 481 阅读 · 0 评论 -
hibernate中的缓存与快照
什么时候用缓存:经常查询,但是不会常修改,并且即使万一出错也不会造成太大影响的数据可以缓存。反例:银行汇率,商品库存这样的就需要实时查询,不宜用缓存。hibernate中的session缓存:当session查询出数据以后会以这样的方式存在缓存中:session.get(class,id)运行时第一时间会去session缓存中找数据,如果找到了,不会再去数据库查询,参考下面这个test:@Test...原创 2018-06-26 17:28:45 · 306 阅读 · 0 评论