- 浏览: 660044 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (345)
- java (63)
- Struts2 (11)
- Spring2.5 + (17)
- Hibernate (25)
- Struts2 Spring hibernate (5)
- log4j (3)
- apache tomcat (12)
- oracle (22)
- oracle_存储过程 (4)
- mysql (18)
- jquery (11)
- prototype (5)
- js (19)
- quartz (5)
- 设计模式 (6)
- eclipse/MyEclipse 注意事项 (9)
- eclipse (0)
- css (6)
- 正则表达式 (2)
- linux (18)
- PHP (6)
- 多线程 (20)
- XML (1)
- jstl (3)
- mongoDB (7)
- android (20)
- 反射 (1)
- IOS (46)
- SVN (3)
- C/C++ (4)
- 百度地图 (2)
- IO/SOCKET (3)
- 百度地图JS (1)
- 树莓派/香蕉派 (1)
最新评论
-
anny101:
想转发一下,不知道怎么转发。评论一下吧。方便查看。
fetch = FetchType.EAGER 作用 -
Navee:
果然我这也是是防火墙问题
解决 Linux 安装 httpd局域网无法访问 -
dhyang909:
...
oracle 10g+ 行列转换 -
国产希特勒:
真强,居然有人把公司的面试题挂到javaeye上了
锦江国际的一道面试题(很简单) -
tomfish88:
比如我要拦截不同业务的service类里面的方法 @Poi ...
Spring AOP annotation 拦截表达式 分析
数据库:
/* MySQL Data Transfer Source Host: localhost Source Database: test Target Host: localhost Target Database: test Date: 2011-10-18 16:44:27 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for table_a -- ---------------------------- DROP TABLE IF EXISTS `table_a`; CREATE TABLE `table_a` ( `id` int(11) NOT NULL auto_increment, `name` varchar(20) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for table_b -- ---------------------------- DROP TABLE IF EXISTS `table_b`; CREATE TABLE `table_b` ( `id` int(11) NOT NULL auto_increment, `name` varchar(20) default NULL, `aid` int(11) default NULL, PRIMARY KEY (`id`), KEY `FK_aid_A_id` (`aid`), CONSTRAINT `FK_aid_A_id` FOREIGN KEY (`aid`) REFERENCES `table_a` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for table_c -- ---------------------------- DROP TABLE IF EXISTS `table_c`; CREATE TABLE `table_c` ( `id` int(11) NOT NULL auto_increment, `name` varchar(20) default NULL, `bid` int(11) default NULL, PRIMARY KEY (`id`), KEY `FK_bid_B_id` (`bid`), CONSTRAINT `FK_bid_B_id` FOREIGN KEY (`bid`) REFERENCES `table_b` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records -- ---------------------------- INSERT INTO `table_a` VALUES ('1', 'a_1'); INSERT INTO `table_a` VALUES ('2', 'a_2'); INSERT INTO `table_a` VALUES ('3', 'a_3'); INSERT INTO `table_a` VALUES ('4', 'a_4'); INSERT INTO `table_a` VALUES ('5', 'a_5'); INSERT INTO `table_a` VALUES ('6', 'a_6'); INSERT INTO `table_a` VALUES ('7', 'a_7'); INSERT INTO `table_a` VALUES ('8', 'a_8'); INSERT INTO `table_a` VALUES ('9', 'a_9'); INSERT INTO `table_a` VALUES ('10', 'a_10'); INSERT INTO `table_b` VALUES ('1', 'b_1', '1'); INSERT INTO `table_b` VALUES ('2', 'b_2', '1'); INSERT INTO `table_b` VALUES ('3', 'b_3', '1'); INSERT INTO `table_b` VALUES ('4', 'b_4', '1'); INSERT INTO `table_b` VALUES ('5', 'b_5', '1'); INSERT INTO `table_b` VALUES ('6', 'b_6', '1'); INSERT INTO `table_b` VALUES ('7', 'b_7', '1'); INSERT INTO `table_b` VALUES ('8', 'b_8', '1'); INSERT INTO `table_b` VALUES ('9', 'b_9', '1'); INSERT INTO `table_b` VALUES ('10', 'b_10', '1'); INSERT INTO `table_c` VALUES ('1', 'c_1', '1'); INSERT INTO `table_c` VALUES ('2', 'c_2', '1'); INSERT INTO `table_c` VALUES ('3', 'c_3', '1'); INSERT INTO `table_c` VALUES ('4', 'c_4', '1'); INSERT INTO `table_c` VALUES ('5', 'c_5', '1'); INSERT INTO `table_c` VALUES ('6', 'c_6', '1'); INSERT INTO `table_c` VALUES ('7', 'c_7', '1'); INSERT INTO `table_c` VALUES ('8', 'c_8', '1'); INSERT INTO `table_c` VALUES ('9', 'c_9', '1'); INSERT INTO `table_c` VALUES ('10', 'c_10', '1');
表映射的3个类
package com.hibernate.entity; import java.util.HashSet; /** * TableA entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "table_a", catalog = "test") public class TableA implements java.io.Serializable { // Fields /** * */ private static final long serialVersionUID = 5391348233326253804L; private Integer id; private String name; private Set<TableB> tableBs = new HashSet<TableB>(0); // Constructors /** default constructor */ public TableA() { } /** full constructor */ public TableA(String name, Set<TableB> tableBs) { this.name = name; this.tableBs = tableBs; } // Property accessors @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name = "name", length = 20) public String getName() { return this.name; } public void setName(String name) { this.name = name; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "tableA") public Set<TableB> getTableBs() { return this.tableBs; } public void setTableBs(Set<TableB> tableBs) { this.tableBs = tableBs; } } package com.hibernate.entity; import java.util.HashSet; /** * TableB entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "table_b", catalog = "test") public class TableB implements java.io.Serializable { // Fields /** * */ private static final long serialVersionUID = -4305123492413110511L; private Integer id; private TableA tableA; private String name; private Set<TableC> tableCs = new HashSet<TableC>(0); // Constructors /** default constructor */ public TableB() { } /** full constructor */ public TableB(TableA tableA, String name, Set<TableC> tableCs) { this.tableA = tableA; this.name = name; this.tableCs = tableCs; } // Property accessors @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "aid") public TableA getTableA() { return this.tableA; } public void setTableA(TableA tableA) { this.tableA = tableA; } @Column(name = "name", length = 20) public String getName() { return this.name; } public void setName(String name) { this.name = name; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "tableB") public Set<TableC> getTableCs() { return this.tableCs; } public void setTableCs(Set<TableC> tableCs) { this.tableCs = tableCs; } } package com.hibernate.entity; import javax.persistence.Column; /** * TableC entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "table_c", catalog = "test") public class TableC implements java.io.Serializable { // Fields /** * */ private static final long serialVersionUID = -8806809289431187808L; private Integer id; private TableB tableB; private String name; // Constructors /** default constructor */ public TableC() { } /** full constructor */ public TableC(TableB tableB, String name) { this.tableB = tableB; this.name = name; } // Property accessors @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "bid") public TableB getTableB() { return this.tableB; } public void setTableB(TableB tableB) { this.tableB = tableB; } @Column(name = "name", length = 20) public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
Hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="connection.url"> jdbc:mysql://localhost/test </property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class"> org.hibernate.cache.NoCacheProvider </property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- <mapping class="com.hibernate.entity.Husband" /> <mapping class="com.hibernate.entity.Wife" /> =================================================== <mapping class="com.hibernate.entity.Teacher" /> <mapping class="com.hibernate.entity.Student" /> <mapping class="com.hibernate.entity.Tgroup" /> <mapping class="com.hibernate.entity.Tuser" /> --> <mapping class="com.hibernate.entity.TableC" /> <mapping class="com.hibernate.entity.TableB" /> <mapping class="com.hibernate.entity.TableA" /> </session-factory> </hibernate-configuration>
log4j.properties
### set log levels ### log4j.rootLogger=warn, stdout, D, E ### 输出到控制台 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c:%L - %m%n ### 输出到日志文件 ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = ${WORKDIR}/logs/log.log log4j.appender.D.Append = true ## 输出DEBUG级别以上的日志 log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - %c:%L - [%p] %m%n ### 保存异常信息到单独文件 ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender ## 异常日志文件名 log4j.appender.E.File = ${WORKDIR}/logs/error.log log4j.appender.E.Append = true ## 只输出ERROR级别以上的日志!!! log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [%t\:%r] - %c\:%L - [%p] %m%n
测试代码:
package com.hibernate.test; import java.util.HashMap; public class ORMappingTest { private static SessionFactory sessionFactory; @BeforeClass public static void setUpBeforeClass() throws Exception { //new SchemaExport(new AnnotationConfiguration().configure()).create(true, true); sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } @AfterClass public static void tearDownAfterClass() throws Exception { sessionFactory.close(); } //根据annotation生成表,当然,这里并不使用到 @Test public void testSchemaExport() { new SchemaExport(new AnnotationConfiguration().configure()).create(true, true); } //把值存入A B C三张表 @Test public void saveABC() { Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); TableA a = null; for (int i = 0; i < 10; i++) { a = new TableA(); a.setName("a_" + (i + 1)); s.save(a); } a = (TableA)s.get(TableA.class, 1); TableB b = null; for (int i = 0; i < 10; i++) { b = new TableB(); b.setName("b_" + (i + 1)); b.setTableA(a); s.save(b); } TableC c = null; b = (TableB)s.get(TableB.class, 1); for (int i = 0; i < 10; i++) { c = new TableC(); c.setName("c_" + (i + 1)); c.setTableB(b); s.save(c); } s.getTransaction().commit(); } @Test public void testQBC() { Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); Integer []id_s = {1,2,3,4}; Criteria c = s.createCriteria(TableA.class)// 这里相当于 from TableA .add(Restrictions.in("id", id_s)) //这里取id在1,2,3,4中的TableA .createCriteria("tableBs") //表示把tableBs加进去再作为一个查询条件,tableBs是A对象中的一个属性 .add(Restrictions.between("id", 5, 8)) ; List<TableA> taList = c.list(); for (TableA a : taList) { System.out.println(a.getName()); } } }
发表评论
-
OneToMany字段序列化 failed to lazily initialize a collection of role
2014-06-06 18:51 1506hibernate项目中,如果要对onetomany的po ... -
hibernate 本地查询 字段别名 映射到 DTO时注意事项
2014-04-22 13:54 3549本地原生SQL: SELECT pole.pId as ... -
实体中的数据库字段有关键字
2014-03-26 15:08 1022mysql中如果表的字段设成了关键字,那么在做某些操作时会抛 ... -
Spring +hibernate 声明式 事物 + annotation
2012-03-22 19:49 951在applicationContext.xml中 &l ... -
Hibernate distinct
2012-02-15 18:05 1094/** * 得到大区编号和名称 * @ret ... -
@Transactional 事务回滚 分析
2011-11-08 16:51 4315@Transactional 事务回滚 Spring的 ... -
Hibernate 性能优化_3
2011-10-25 15:54 636二级缓存 对于二级缓存,其实并不一定要在项目中使用 ... -
Hibernate 性能优化_2
2011-10-20 17:51 852createQuery("FROM ****&quo ... -
Hibernate 性能优化_1
2011-10-18 18:39 1008大概如此:不一定说在每个项目中都合适 1、 使用se ... -
转的:Hibernate 的 Criteria用法
2011-10-18 16:37 1336方法 说明 Restric ... -
Hibernate 的 join
2011-10-18 13:29 1009转的: 1.如果没有在Hibernate配置里做关 ... -
fetch = FetchType.EAGER 作用
2011-10-13 11:47 28759如果是EAGER,那么表示取出这条数据时,它关联的数据也同时取 ... -
用myeclipse的Hibernate 反向引擎 生成 数据库的 entity
2011-09-22 14:44 8854把 Myeclipse 转到DB Browser 新建 ... -
Hibernate annotation 多对多双向关联(很少用)
2011-09-21 16:44 1713双向关联 在认为的 主表 上用到 @JoinTable ... -
Hibernate annotation 多对多单向关联
2011-09-21 16:33 1626package com.hibernate.entity ... -
Hibernate annotation 一对多,多对一
2011-09-21 16:03 1974package com.hibernate.entity ... -
Hibernate annotation 联合主键
2011-09-20 15:31 1558Hibernate annotation 联合主键 ... -
Hibernate annotation 的各种关系
2011-09-15 15:59 1018转的: 一、@OneToOne Java ... -
Hibernate 双向关联
2011-09-15 15:55 1000不管是啥关联,只要是双向,都必须用到mappedBy ... -
OneToOne annotation 双向关联
2011-09-15 15:51 1206package com.hibernate.entity ...
相关推荐
QBE是Criteria API的一个简单用法,通过一个实体对象作为模板来匹配数据库中的记录。例如,在`Student`类的上下文中,如果有一个名为`s`的学生对象,其`giftortoy`字段被设置为"2",那么调用`cri.add(Example....
【Hibernate Criteria 用法详解】 Hibernate Criteria API 是一种面向对象的查询方式,它提供了一种比HQL(Hibernate Query Language)更为简洁且直观的查询手段。通过Criteria API,开发者可以构建复杂的查询条件...
**使用Hibernate的一个完整例子** Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作。在本教程中,我们将探讨如何在实际项目中使用Hibernate进行数据库操作,通过一个完整的...
这个简单的例子展示了如何使用Hibernate保存一个新用户到数据库。进一步学习时,你可以尝试查询、更新和删除操作,以及更复杂的查询表达式。 **总结** 通过这个"Hibernate的第一个例子",我们了解了如何配置...
SpringMVC是Spring框架的一部分,专门处理Web应用程序的请求-响应流程,而Hibernate则是一个强大的对象关系映射(ORM)工具,它简化了数据库操作。 **SpringMVC框架** SpringMVC是模型-视图-控制器(MVC)设计模式...
在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。本示例将深入解析一个基于Hibernate的简单应用,帮助开发者理解其基本概念和工作流程。 首先,我们需要...
创建一个实体对象并设置属性,然后使用`Example.create()`方法创建Example对象,添加到Criteria中: ```java TUser user = new TUser(); user.setName("hulei"); user.setPassword("hulei"); Criteria ct = session...
【hibernate登录小例子】是一个面向初学者的教程,主要展示了如何利用Hibernate框架实现一个简单的用户登录功能。在这个例子中,我们将深入探讨Hibernate的基本概念、配置、实体类的创建、映射文件的编写以及Session...
本篇文章将通过一个实际的例子,详细介绍如何使用Hibernate进行数据操作。 【描述】: 这篇博客主要介绍了如何利用Hibernate进行数据库操作,提供了具体步骤和代码示例。作者Clarancepeng在ITEYE上分享了这个实例...
本文将以“hibernate做的一个图书系统例子”为主题,深入解析如何使用Hibernate构建一个完整的图书管理系统。 一、Hibernate简介 Hibernate是一个开源的Java库,它允许开发者用面向对象的方式来操作数据库,从而...
在"Hibernate的使用例子代码"中,我们可以看到一个基础的示例,它将引导我们了解如何配置和使用Hibernate。下面将详细解释这个过程: 1. **配置Hibernate**: 使用Hibernate 首先需要在项目中引入Hibernate的依赖库...
**Hibernate 是一个强大的Java持久化框架,用于简化数据库操作。在这个简单的例子中,我们将深入探讨Hibernate的核心概念,并了解如何在实际项目中应用它。** **一、Hibernate 概述** Hibernate 是一个对象关系映射...
- **保存(Save)**: 使用`Session.save()`方法将临时对象转变为持久化对象,生成一个新的数据库记录。 - **更新(Update)**: 如果对象已经是持久化状态,修改对象后调用`Session.update()`会更新数据库中的记录。 ...
- 查询数据时,可以使用Session的`load()`或`get()`方法获取实体,也可以使用HQL(Hibernate Query Language)或Criteria API进行复杂查询。 4. **级联操作**: - Hibernate支持级联操作,如`CascadeType.ALL`,...
3. **实体类设计**:讲解如何创建一个Java类作为数据库表的映射,包括使用`@Entity`注解标记实体类,`@Id`注解定义主键,以及其他字段的注解如`@Column`。 4. **XML映射文件**:解释Hibernate的Hibernate ...
在“hibernate说明及demo的例子”压缩包中,应该包含了一个完整的示例项目,涵盖了上述所有知识点。这个示例将演示如何配置Hibernate、创建实体类、执行CRUD操作以及使用查询语言。通过运行此示例,你可以更好地理解...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者将Java对象与数据库中的表进行映射,简化了数据库操作。通过使用Hibernate,开发者可以避免编写大量的SQL语句,提高开发效率,同时也使得代码更加可读...
【hibernate入门小例子】是一个适合初学者的教程,主要涵盖了如何在JavaWeb项目中使用Hibernate框架与MySQL数据库进行集成。在这个例子中,我们将会深入理解Hibernate的核心概念,包括实体映射、对象关系映射(ORM)...
Spring还包含了诸如数据访问、Web服务、安全控制等多个模块,形成了一个完整的应用开发生态。在Spring中,我们可以通过配置XML或者使用Java配置来实现DI,让Spring容器管理对象的生命周期和依赖关系。 结合...