您的位置:首页 > 其它

SSH三大框架整合配置详细步骤(2)

2014-04-24 10:46 363 查看


4 配置Hibernate

Hibernate MySql连接配置

在Hibernate中,可以配置很多种数据库,例如MySql、Sql Server和Oracle,Hibernate MySql连接配置举例如下

出错“The processing instruction must begin with the name of the target”,看了几遍xml文件的内容也没发现什么特别,在网上搜了搜发现还是个通病,很多人都遇到过这种问题。其原因是

<? xml version = "1.0" encoding = "UTF-8" ?> 的问号和"xml"之间多了个空格,去掉空格后<?xml version = "1.0" encoding = "UTF-8" ?>就ok了。


hibernate.cfg.xml出错:The content of element type "property" must match "(meta*,(column|formula)* 恩,根据我的经验,可能是你的映射文件没有写好的原因,还有就是property标签的相对应属性值的value写的不对!!!!!

这样说吧,假如你在建立一个类,叫Student,包名字叫做com.bjsxt.hibernate.model

你就得建立一个映射文件,名字叫做Student.hbm.xml里面的内容的package属性就是com.bjsxt.hibernate.model


Hibernate 报错:this project is not a myeclipse hibernate project . assuming hibernate 3 cap

解决;

项目名上右键--〉myeclipse-->add hibernate capabilites -->next-->hibernate config file --> existing -->选择现有工程存在的hibernate配置文件--> next --> 不生成factory class --> end

[b]添加库文件


从www.hibernate.org网站下载Hibernate发布包(如hibernate.jar),从www.mysql.com下载MySQL的JDBC驱动程序jar包,将这两个jar包放在lib目录
将以下jar包拷到lib目录中:asm.jar、cglib-2.1.3.jar、commons-collections-2.1.1.jar、commons-logging-1.0.4.jar、dom4j-1.6.1.jar、ehcache-1.1.jar、jta.jar
在工程的classpath中包含上述库文件

建立持久化类

例如Product.java:

package test;

//持久化类

public class Product

{

private int id ;

private String name ;

public Product()

{

}

public int getId()

{

return id ;

}

public void setId(int id)

{

this.id = id;

}

public String getName()

{

return name ;

}

public void setName(String name)

{

this.name = name;

}

}

编写反映持久化类与数据库表映射关系的Hibernate映射文件

例如Product.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="test">

<class name="Product" table="product" catalog="factory">

<id name="id" column="id" type=" int ">

<generator class="native"/>

</id>

<property name="name" column="name" type="java.lang.String" length="255" unique="false"/>

</class>

</hibernate-mapping>

编写Hibernate配置文件

并在配置文件中通过mapping元素加入持久化类与数据库表映射的信息,即通过resource指定上一步建立的映射文件的位置。例如
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 = "connection.driver_class">com.mysql.jdbc.Driver</property>

<property name = "connection.url">jdbc:mysql://127.0.0.1:3306/factory</property>

<property name = "connection.username"></property>

<property name = "connection.password"></property>

<property name = "dialect">org.hibernate.dialect.MySQLDialect</property>

<property name = "hbm2ddl.auto">create</property>

<property name = "show_sql">true</property>

<property name = "format_sql">true</property>

<mapping resource = "Product.hbm.xml"/>

</session-factory>

</hibernate-configuration>

使用ThreadLocal控制Session

例如:

package
test;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.cfg.Configuration;

public class HibernateSessionFactory {

private static Log log = LogFactory.getLog(HibernateSessionFactory.class);

// Path of configuration file

private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

private static String configFile = CONFIG_FILE_LOCATION;

// Use ThreadLocal to control Session object

private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

private static Configuration configuration = new Configuration();

private static org.hibernate.SessionFactory sessionFactory;

/**

* Abstraction: Obtain Session

*/

public static Session getSession() throws HibernateException {

Session session = threadLocal.get();

// Rebulid Session object if there is no session in ThreadLocal

if (session == null || !session.isOpen()) {

if (sessionFactory == null) {

rebuildSessionFactory();

}

// Obtain Session object

session = (sessionFactory != null) ? sessionFactory.openSession()

: null;

threadLocal.set(session);

}

return session;

}

/**

* Abstract: Build SessionFactory object

*/

public static void rebuildSessionFactory() {

try {

// Initial application using configuration file

configuration.configure(configFile);

// Create SessionFactory object according to the configuration

// Data model can be created in MySQL automatically after execute this method

sessionFactory = configuration.buildSessionFactory();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* Abstraction: Close Session object

*/

public static void closeSession() throws HibernateException

{

Session session = (Session) threadLocal.get();

threadLocal.set(null);

if (session != null)

{

session.close();

}

}

}

[/b]
在src目录下建立 ehcache.xml文件,内容如下:

<ehcache>

<diskStore path="java.io.tmpdir"/>

<defaultCache

maxElementsInMemory="10000"

eternal="false"

timeToIdleSeconds="10000"

timeToLiveSeconds="10000"

overflowToDisk="true"

/>

<cache name="com.hour41.hibernate.vo.common.City"

maxElementsInMemory="10000"

eternal="false"

timeToIdleSeconds="10000"

timeToLiveSeconds="10000"

overflowToDisk="true"

/>

</ehcache>

使用Session操作数据库

经过上述过程,就可完成Hibernate的配置了,接下来可以编写程序操作数据库。
具体实例:

package test;

import org.hibernate.Session;

import org.hibernate.Transaction;

import test.Product;

import test.HibernateSessionFactory;

public class Main {

public static void main(String [] args)

{

// Get session

Session session = HibernateSessionFactory.getSession();

Transaction tx = null;

try

{

// Begin transaction

tx = session.beginTransaction();

// Create a Product object and set its property

Product product = new Product();

product.setName("Apple");

// Save the object

session.save(product);

// Commin

tx.commit();

}

catch (Exception e)

{

if (tx != null)

{

tx.rollback();

}

try

{

// Spread the exception

throw e;

}

catch (Exception e2)

{

e2.printStackTrace();

}

}

finally

{

// Close the session

session.close();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: