hibernate3_小示例

字体大小: 中小 标准 ->行高大小: 标准

1、导入架包(最小架包,共11个)

  antlr-2.7.5H3.jar  asm.jar  asm-attrs.jar  cglib-2.1.jar  commons-collections-2.1.1.jar  commons-logging-1.0.4.jar  

  dom4j-1.5.2.jar  ehcache-1.1.jar  hibernate3.jar  jta.jar  log4j-1.2.9.jar

2、添加 hibernate.cfg.xml 配置文件

复制代码
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
>
<hibernate-configuration>
<session-factory>
<property name="connection.profile">mysql</property>
<property name="connection.url">jdbc:mysql://localhost:3306/demo</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="user.hbm.xml"/>
</session-factory>
</hibernate-configuration>
复制代码

上述xml创建一个sessionFactory,方言dialect指定了hibernate生成的特定SQL语句,配置此项,应用会参考方言。

mapping标签加载映射文件。

3、编写持久化类(User.java)

复制代码
package com.qh.hibernate.beans;

public class User {
private int id;
private String username;
private String password;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
复制代码

hibernate使用POJOs,和javabean很像。说明hibernate通过get和set方法访问对象。

4、编写映射文件(user.hbm.xml)

复制代码
<?xml version="1.0" encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<hibernate-mapping package="com.qh.hibernate.beans">
<class name="User" table="user">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<property name="username" column="username" type="string"></property>
<property name="password" column="password" type="string"></property>
<property name="email" column="email" type="string"></property>
</class>
</hibernate-mapping>
复制代码

此映射文件负责持久化类和数据库表之间的映射;id属性是唯一标识符;generator 元素指定标识符的生成策略,我们选择 native,它提供了取决于数据库方言的可移植性。property元素的name属性值为持久化类的属性。

5、编写辅助类 HibernateSessionFactory.java

 

复制代码
package com.qh.hibernate.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {
@link http://hibernate.org/42.html}.
*/
public class HibernateSessionFactory {

/**
* Location of hibernate.cfg.xml file.
* NOTICE: Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file. That
* is place the config file in a Java package - the default location
* is the default Java package.<br><br>
* Examples: <br>
* <code>CONFIG_FILE_LOCATION = "/hibernate.conf.xml".
* CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".</code>
*/
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

/** Holds a single instance of Session */
@SuppressWarnings(
"unchecked")
private static final ThreadLocal threadLocal = new ThreadLocal();

/** The single instance of hibernate configuration */
private static final Configuration cfg = new Configuration();

/** The single instance of hibernate SessionFactory */
private static org.hibernate.SessionFactory sessionFactory;

/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the <code>SessionFactory</code> if needed.
*
*
@return Session
*
@throws HibernateException
*/
@SuppressWarnings(
"unchecked")
public static Session currentSession() throws HibernateException {
Session session
= (Session) threadLocal.get();

if (session == null) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory
= cfg.buildSessionFactory();
}
catch (Exception e) {
System.err.println(
"%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session
= sessionFactory.openSession();
threadLocal.set(session);
}

return session;
}

/**
* Close the single hibernate session instance.
*
*
@throws HibernateException
*/
@SuppressWarnings(
"unchecked")
public static void closeSession() throws HibernateException {
Session session
= (Session) threadLocal.get();
threadLocal.set(
null);

if (session != null) {
session.close();
}
}

/**
* Default constructor.
*/
private HibernateSessionFactory() {
}

}
复制代码

它是持久化管理器,我们通过它来从数据库中存取User。

6、编写DAO类(UserDao.java)

复制代码
package com.qh.hibernate.dao;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.qh.hibernate.beans.User;
import com.qh.hibernate.util.HibernateSessionFactory;

public class UserDao {
public User getUser(String username) throws HibernateException{
Session session
=null;
Transaction tx
=null;
User user
=null;
try{
session
=HibernateSessionFactory.currentSession();
tx
=session.beginTransaction();
Query query
=session.createQuery("from User where username=?");
query.setString(
0, username.trim());
user
=(User) query.uniqueResult();
query
=null;
tx.commit();
}
catch(HibernateException e){
throw e;
}
finally{
if(tx!=null){
tx.rollback();
}
HibernateSessionFactory.closeSession();
}
return user;
}
}
复制代码

Dao层只负责调用hibernate API实现CURD操作。service层面向用户调用DAO层地代码。

7、编写service类(UserService.java)

复制代码
package com.qh.hibernate.service;

import com.qh.hibernate.beans.User;
import com.qh.hibernate.dao.UserDao;

public class UserService {
public boolean valid(String username,String password){
UserDao userDao
=new UserDao();
User user
=userDao.getUser("admin");
if(user.getPassword().equals(password)){
return true;
}
else{
return false;
}
}
public static void main(String args[]){
UserService userService
=new UserService();
System.out.println(
"验证结果为:"+userService.valid("admin", "123"));
}
}
复制代码

它定义的方法和具体的应用相关。

8、运行UserService.java,控制台输出如下:

复制代码
INFO - Hibernate 3.0.5
INFO - hibernate
.properties not found
INFO - using CGLIB reflection optimizer
INFO - using JDK
1.4 java.sql.Timestamp handling
INFO - configuring from resource:
/hibernate.cfg.xml
INFO - Configuration resource:
/hibernate.cfg.xml
INFO - Mapping resource: user
.hbm.xml
INFO - Mapping class: com
.qh.hibernate.beans.User -> user
INFO - Configured SessionFactory: null
INFO - processing extends queue
INFO - processing collection mappings
INFO - processing association property references
INFO - processing foreign key constraints
INFO - Using Hibernate built-in connection pool
(not for production use!)
INFO - Hibernate connection pool size:
20
INFO - autocommit
mode: false
INFO - using driver: com
.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/demo
INFO - connection properties: {user
=root, password=****, profile=mysql}
INFO - RDBMS: MySQL
, version: 5.5.13
INFO - JDBC driver: MySQL-AB JDBC Driver
, version: mysql-connector-java-5.0.8 ( Revision: ${svn.Revision} )
INFO - Using dialect: org
.hibernate.dialect.MySQLDialect
INFO - Using default transaction strategy
(direct JDBC transactions)
INFO - No TransactionManagerLookup configured
(in JTA environment, use of read-write or transactional second-level cache is not recommended)
INFO - Automatic flush during beforeCompletion
(): disabled
INFO - Automatic session close at
end of transaction: disabled
INFO - JDBC batch size:
15
INFO - JDBC batch updates
for versioned data: disabled
INFO - Scrollable result sets: enabled
INFO - JDBC3 getGeneratedKeys
(): enabled
INFO - Connection release
mode: null
INFO - Maximum outer
join fetch depth: 2
INFO - Default batch fetch size:
1
INFO - Generate SQL with comments: disabled
INFO - Order SQL updates by primary key: disabled
INFO - Query translator: org
.hibernate.hql.ast.ASTQueryTranslatorFactory
INFO - Using ASTQueryTranslatorFactory
INFO - Query language substitutions: {}
INFO - Second-level
cache: enabled
INFO - Query
cache: disabled
INFO -
Cache provider: org.hibernate.cache.EhCacheProvider
INFO - Optimize
cache for minimal puts: disabled
INFO - Structured second-level
cache entries: disabled
INFO - Statistics: disabled
INFO - Deleted entity synthetic identifier rollback: disabled
INFO - Default entity-
mode: pojo
INFO - building session factory
WARN - No configuration found
. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/D:/My%20Documents/eclipse%20workspace/hibernateTest/WebContent/WEB-INF/lib/ehcache-1.1.jar!/ehcache-failsafe.xml
INFO -
Not binding factory to JNDI, no JNDI name configured
INFO - Checking
0 named queries
验证结果为:true
复制代码

9、项目结构图和数据库表

附:源码下载:http://u.115.com/file/dncp0kxl

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/69457.html