很久没有用hibernate了,由于自己要做个小东西,想了想,准备使用最新的包。每次用新包都会蛮烦连连,这次怎能例外???3.4蛮是折腾了我一下下。
1 slf4j
project编译的时候完全没问题,直到运行的时候,提示:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 超级郁闷。
这是因为Hibernate3.4使用SLF4J API记录日志,所以在Hibernate的lib中,不再提供Log4J的包,而大部分框架依然使用Log4J记录日志,这样导致了兼容性问题。
解决办法:3包并存。
1、log4j包
log4j-1.2.15.jar
2、转换包
slf4j-log4j12-1.5.2.jar(http://mirrors.ibiblio.org/pub/mirrors/maven2/org/slf4j/slf4j-log4j12/1.5.2/slf4j-log4j12-1.5.2.jar)
3、slf4j包
slf4j-api-1.5.2.jar
2annotation
annotation的好处是不需要处理hbm.xml以及运行xDoclet来生产表。啃,可是我对annotation的认识还是皮毛。今天决心记录一个入门log。
1 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">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/demo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">create-drop</property>
<property name="show_sql">true</property>
<mapping class="mars.User" />
</session-factory>
</hibernate-configuration>
属性hibernate.hbm2ddl.auto
是让hibernate自动更新数据库schema的。
参数hibernate.hbm2ddl.auto可以是以下值:
validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构
create-drop 加载hibernate时创建,退出是删除表结构。在项目测试阶段特别的好用
update 加载hibernate自动更新数据库结构
<mapping class="mars.User" />
从前是这么写的:
<mapping resource="onlyfun/first/User.hbm.xml" />
2 sessionFactory的变化:
package mars;
import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration
().configure().buildSessionFactory();
} catch (Throwable ex) {
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession() throws HibernateException {
return sessionFactory.openSession();
}
}
3 entity的变化:
package mars;
import java.io.Serializable;
import javax.persistence.*;
@Entity(name = "TUser")
public class User implements Serializable {
private static final long serialVersionUID = 1712116328170063667L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "userId")
private Long id = null;
@Column(name = "userName")
private String name = null;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4测试程序:
package mars;
public class HibernateDemo {
public static void main(String[] args) {
UserDAO userDAO = new UserDAO();
User user = new User();
user.setId(1l);
user.setName("eric");
userDAO.insert(user);
user = userDAO.find(new Long(1l));
System.out.println("name: " + user.getName());
}
}
package mars;
import org.hibernate.Hibernate;
import org.hibernate.Session;
public class UserDAO {
public void insert(User user) {
Session session = HibernateUtil.getSession();
session.save(user);
session.close();
}
public User find(Long id) {
Session session = HibernateUtil.getSession();
User flight = (User) session.load(User.class, id);
Hibernate.initialize(flight);
session.close();
return flight;
}
}
5 java要命的问题是包要加全加对
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/ejb3-persistence.jar"/>
<classpathentry kind="lib" path="lib/hibernate3.jar"/>
<classpathentry kind="lib" path="lib/hibernate-commons-annotations.jar"/>
<classpathentry kind="lib" path="lib/hibernate-core.jar"/>
<classpathentry kind="lib" path="lib/hibernate-annotations.jar"/>
<classpathentry kind="lib" path="lib/mysql-connector-java-5.1.5-bin.jar"/>
<classpathentry kind="lib" path="lib/dom4j.jar"/>
<classpathentry kind="lib" path="lib/slf4j-api-1.5.2.jar"/>
<classpathentry kind="lib" path="lib/slf4j-log4j12-1.5.2.jar"/>
<classpathentry kind="lib" path="lib/commons-collections.jar"/>
<classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/>
<classpathentry kind="lib" path="lib/cglib-nodep-2.1_3.jar"/>
<classpathentry kind="lib" path="lib/javassist.jar"/>
<classpathentry kind="lib" path="lib/jta.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
6 tuser表
/*
MySQL Data Transfer
Source Host: localhost
Source Database: demo
Target Host: localhost
Target Database: demo
Date: 2009-3-30 0:08:39
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for tuser
-- ----------------------------
CREATE TABLE `tuser` (
`userId` bigint(20) NOT NULL AUTO_INCREMENT,
`userName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records
-- ----------------------------
分享到:
相关推荐
### Hibernate 3.4.X 代码快速查询:实体更快更方便 #### 一、概述 在软件开发领域,特别是对于那些需要处理大量数据的应用...总的来说,Hibernate 3.4.X版本为实现实体类的快速检索提供了一个强大且灵活的工具集。
在Hibernate 3.4版本中,它提供了许多关键特性和改进,使得开发人员能够更高效、更灵活地处理数据库操作。 一、核心概念与功能 1. **对象关系映射(ORM)**: Hibernate是ORM框架的代表,它通过Java类和数据库表...
在实际开发中,通过下载并安装`features`和`plugins`两个目录下的文件,可以将HibernateTools集成到Eclipse 3.4 Ganymede中。`features`目录包含的是插件的特征描述,而`plugins`目录则包含了插件的具体实现。安装...
10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作...
- 讲解为何持久化类应该重写这两个方法,以及如何正确实现它们。 - **4.4 动态模型(Dynamicmodels)** - 介绍如何使用Hibernate的动态模型功能来处理不确定的数据结构。 - **4.5 元组片断映射(Tuplizers)** - ...
10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作...
- **2.2.5.1 一对一(One-to-one)**:使用 `@OneToOne` 注解来定义两个实体Bean之间的一对一关联关系。 - **2.2.5.2 多对一(Many-to-one)**:使用 `@ManyToOne` 注解来定义多对一的关联关系。 - **2.2.5.3 ...
- **多对多映射**:两个 Java 类之间存在多对多的关系,通常需要引入中间表进行关联。 ##### 4.2 批量处理 批量处理可以显著减少与数据库交互的次数,从而提高应用程序性能。 - **批量插入**:允许一次执行多条...
为了确保 Hibernate 正确处理对象的唯一性,需要为持久化类实现这两个方法。 - **4.4 动态模型** 介绍如何使用 Hibernate 的动态元数据映射来处理结构不确定的数据。 - **4.5 Tuplizer** Tuplizer 是 ...
在本文中,我们将深入探讨如何在Eclipse 3.4版本中安装各种插件,包括VE、UML2 ...要在Eclipse 3.4中安装Subclipse,你需要访问两个更新站点:http://download.eclipse.org/technology/subversive/0.7/update-site/和...
10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作...
10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作...
由于文件太大,所以分成了两个压缩包 目录 第1部分 持久层 第1章 面向应用的持久层设计 1.1 持久层概述 1.2 持久层设计 1.3 持久层设计与ORM 1.4 持久层框架概述 第2部分 Hibernate 第2章 Hibernate概述 第3...
这两个工具在Java开发中扮演着重要角色:Hibernate Tools帮助开发者管理数据库和ORM(对象关系映射)操作,而Maven则是一个项目管理和综合工具,负责构建、依赖管理和项目信息管理。 离线安装Eclipse插件是一种方便...
10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化(transitive persistence) 10.12. 使用元数据 11. 事务和并发 11.1. Session和事务范围(transaction scope) 11.1.1. 操作单元(Unit...
通常,我们需要确定两个关键参数:当前页数(`thisNumber`)和每页显示的记录数(`sumCount`)。基于这两个参数,我们可以计算出查询时应从哪一条记录开始以及需要查询多少条记录。 #### 三、Hibernate 分页查询...
为了深入了解Hibernate API,你可以参考压缩包中的两份文档:“hibernate3.3.chm”和“Hibernate3.2中文参考文档.chm”。它们详细介绍了Hibernate的各个组件、API使用方法以及最佳实践,是学习Hibernate的宝贵资源。...
- **Session 和 SessionFactory**:介绍这两个核心接口的作用及其使用方式。 - **加载和保存实例**:演示如何使用 Hibernate 来加载和保存实体类实例。 ##### 1.2 第二部分:关联映射 **1.2.1 映射 Person 类** ...
- **9.1.4 混合使用“每个类分层结构一张表”和“每个子类一张表”**:说明混合使用两种策略的方法。 - **9.1.5 每个具体类一张表 (Table per concrete class)**:介绍每个具体类一张表的策略。 - **9.1.6 每个...