随笔分类 - Hibernate
1
摘要:原文地址:http://blog.sina.com.cn/s/blog_49bf8585010004p5.html由于公司项目的需要,我对Hibernate对多表关联查询研究了一下,现总结如下,供朋友参考。一、 Hibernate简介Hibernate 是一个JDO工具。它的工作原理是通过文件(一般有两种:xml文件和properties文件)把值对象和数据库表之间建立起一个映射关系。这样,我们 只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。例如,使用Hibernate的查询,可以直接返回包含某 个值对象的列表(List),而不必向传统的JDBC访问
阅读全文
摘要:1:如图:2:如图:注意:只要写了其中的一个,剩下的两个都可以自动生成3:domain有限制:4:5:java代码:初始化代码可以提作工具类,注意:throw e 不能省略。一般session是不重复利用的6:如图:7:查询:
阅读全文
摘要:常见的数据库设计有两种:主键关联,单项的外键关联。下面是一对一单项外键关联:代码:后台生成的表:配置powerdesigner连接数据库,可以查看数据表的关联:一般在powerdesigner中链接数据库,用odbc不过选择数据源时没有mysql,此时可以倒回去,选择Connection Profiles。继续:注意:必须把最后一项的jar文件设置在系统的classpath中去,不然会找不到。反向工程:分析别人的代码(适用于复杂项目)选择:点确定,只选择自己需要的表即可:
阅读全文
摘要:红色为重点中的重点:表和表之间只有一种关系:外键。
阅读全文
摘要:作用:可以让建表语句在程序中实现。先在hibernate.hbm.xml中注释掉下面的语句:如图:开发中一般是先建好表,再写好实体类,然后再做好影射。可以配置文件自动生成,也可以在程序中手动自己来写。此次生成的建表语句没有约束和长度之类的设置。但是如果你想设置,怎么办?一般不用这种
阅读全文
摘要:1:有时候执行update,有时候执行save2:clear()方法:无论get和load都是先查缓存,才会去数据库中找。clear强制清除缓存如图,后台只有1条查询语句:是第一个sys。。。发出的,因为缓存中已经存在了,就不用去数据库中拿了。加了clear()的语句:后台就会看到有2次查询语句,所以它的作用是清除缓存用的。3:flush():强制让缓存的内容和数据库的内容做同步。当你在commit的时候会默认进行flush如图:只会发出1条update语句如果想让它发出2条,加flush()方法:如图:后台会发2条update语句。
阅读全文
摘要:1:第一种情况:2:第二种情况:(会报错,因为没有id)3:第三种:(自己提前设置了id,恰好该id数据库中存在一个)4:第四种:注意:缓存和数据库之间的同步还是会整个语句update5:第五种(常用:只更新修改过的字段,提高效率)有三种方法:a:修改注解:修改为falseb:xml加动态属性如下图:加了动态属性之后,如下图:对比上图:后台结果:如果还想实现跨session,有一个方法(不推荐用,因为多load了一次):c:直接使用hql语句(EJBQL)(推荐):提前体验下,后面还会专门讲那个语句就是普通的查询语句
阅读全文
摘要:1:如图:注意,1是表中的主键的值,它会自动转换成类类型。运行之后如图:2:load是从数据库中拿一条记录并将之转换成一条对象,get也可以,将下面程序中的load改成get也是可以的。但是他们之间有一条重要的区别:将system.out.print(t.getName);放在commit之后,get不报错可以拿出来,但是load报错(延迟初始化有异常)。get是直接发出sql语句从数据库中拿,但是load是拿一个代理,这个代理并没有生成sql语句。sql语句是在你拿它里面的属性的时候才会发出select。如图,如果把sys...注释掉,就不会报错。3:如何区分是否是代理类?打印名字(t.ge
阅读全文
摘要:1:事务处理2:对象的三种状态:区别:如图:
阅读全文
摘要:1:AnnoationConfiguration类:可以指定hibernate.hbm.xml为另外的文件名hibernate.xml,如图:2:SessionFactory类:产生session的工厂,它里面维护的最重要的东西就是数据库连接池。你如果调用的是getSession(),无论调用多少次,拿到的永远是用一个sessioon。如图运行结果为true3:hibernate3.2之后就不建议使用这种方法(opensession)了。即:当你创建一个session的时候还可以用openSession()这个方式来创建,注意opensession永远是创建一个新的session,不会从当前上
阅读全文
摘要:即:annoation版本的联合主键,联合主键使用annoation有三种方式:最常用:第2种,但是经常还是会从数据库中往外load,所以还是需要第3种1:把主键类注解为:@Embeddable,取消掉实体类的两个主键属性,然后定义一个主键属性,生成getset方法,并把该属性注解为@Id,注意不是在主键类注解,是在实体类的主键属性处注解。2:(更简单)在实体类的主键属性的get方法前写:@EmbeddedId3:注释掉主键在实体类的主键属性,getset方法去掉,然后加上之前去掉的id和name,然后在getid前加@Id,在getName之前再加@Id,然后在实体类前写:@IdClass(
阅读全文
摘要:1:一般能用一个字段做主键的就不要用两个字段,不过不可避免的会遇到要用两个字段做主键,此时要用hibernate,可以使用联合主键。如图:要用id和name做主键办法:单独设计一个类,起名StudentPK,在该类必须重写equals,hashcode,实现Serializable接口。此时在Student类中可以删除掉id和name的属性及get/set方法,但是必须加入新的属性,该属性的类型是StudentPK,如:private StudentPK pk;然后生成get/set方法,此时要想存一个Student,首先:new一个StudentPK,然后如图:此时还不够,还必须在配置文件中
阅读全文
摘要:在实际工作中,跨数据库平台很少,几乎不用table_generator ,所以下面的不用掌握!1:如图:什么意思呢?首先它会创建一张表,这张表本身有两个字段,表的名字就是table的名字。。。。如图:plColumnName说的是这里面有一条记录,这条记录由key和value组成。如图:假如有2张表的话,那么记录里还有一个Student表。上面三条是定义表的,接下的是定义表里的记录的2:如果是table,则也要改下面两部分:查询之后如下图,
阅读全文
摘要:1:在实际工作中,id一般是自增的,mysql一般是用auto increment,oracle一般是用sequence。2:一般在类中的setid方法中,如何使用?称为id生成策略:用的最多的是native,其实是identify,sequence3:注意:在用oracle的时候,要先建类,然后利用配置文件让myeclipse创建表和sequence,这个时候,要提前把默认的sequence和表删除(drop)。可以用注解,此时在实体类的getId()方法的上面的@ID的下一行写上:@GeneratedValue(strategy=GenerationType.SEQUENCE)4:两张表也
阅读全文
摘要:1:加入junit的类库2:把测试代码单独放在另外一个目录下面,new ---source folder3:你要对哪个类进行测试,该文件夹下面就建立对应的包,然后写测试类4:也可以让myeclipse帮你生成测试代码:new---junit case。。。---选择对应的类即可5:在如图,点击右键进行选择6:注意:一个小bug,时有时无。当你配置文件中某个位置写错了,然后用 junit做测试的时候,它不给提示任何错误,就结束了,然后你在junit中查也查不到任何信息。解决办法:A:在biforeClass方法的“sf = new AnnotationConfiguration().config
阅读全文
摘要:1:hibernate目前使用的日志框架:slf。如图:也就是说,slf充当一个接口,可以用下面的几个去实现它。jpa,jdbc也是类似这种只定义接口,让其他甚至第三方去实现它。2:log4j(常用):一般直接拷贝log4j.properties文件过去,然后修改成自己想要的输出就行了。
阅读全文
摘要:1:hibernate可以用类使用反射生成对应的user.hbm.xml文件。也可以先写数据库表,然后帮你生成pojo类或者xml文件。结论:先分析业务再建表,先建表再建类建表工具:powerdesigner2:表名和类名不一致的情况下:在实体类中,如果你的类叫“Teacher”,它会默认去数据库中找叫“Teacher”的表,如果不一致,用注解来指明:如图,则程序会去找“_Teacher”表如果是在xml中配置:则如图:如果属性名和字段名不同,在annotation中如何使用:如图:3:如图:
阅读全文
摘要:1:hibernate是什么?如图:老办法:比较麻烦,还要写数据库和语句等。采用hibernate写法是这样的:根本不用牵扯jdbc了,如下图:(ORM)用了hibernate就不用考虑在数据中拼sql语句了,很多都是固定的,只要写个(save())就ok注意,在后续的学习中,下载核心包版本要和annotations一致,如:2:准备jar包:3:常见的orm框架:
阅读全文
摘要:如图:1:整个流程图:注意:spring会贯穿整个过程,spring会帮action把service注入到action中(action访问spring)去,会帮service把dao注入到service中去,还会对service进行声明式的事务管理。
阅读全文
1


浙公网安备 33010602011771号