spring+hibernate 例子

来源:互联网 发布:linux怎么创建文件 编辑:程序博客网 时间:2024/05/16 17:46

1。

我自己根据例子先创建一个Web project,然后load需要的库,其实我不知道哪个库具体需要,就把hibernate下的

都加到Webcontent/lib下边了,主要注意应该import正确的hibernate类,

 

public void testSelect(){
    String hql=
    " from Table1 where id=10";
    try {
    Query query = session.createQuery(hql);
    List userList = session.find(hql);
    Table1 table1 =(Table1)userList.get(0);
    Assert.assertEquals(table1.getTitle(),"Emma");

}

但是这里的List 应该引用import java.util.List;,否则会出错。

 

2。建立 package, test.hibernate, 建立

package test.hibernate;


import java.util.List;

import junit.framework.Assert;
import junit.framework.TestCase;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;

import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;

public class HibernateTest extends TestCase {

}

 

3.复制用MiddleGen和extension工具生成的数据库表的Table1.hbm.xml. Table1.java文件分别复制到

Webcontent/classes/, src/test/hibernate/

 

"Table1" 是我的数据库中的一个表。

 

4. 可以直接运行 run as jUnit test的方式运行

HibernateTest

也可以自己写一个servlet来调用HibernateTest里边的函数。

5.如果运行时说找不到配置的Hibernate-Contextxml或bean.xml文件,可以根据错误提示的查找位置,把文件复制过去。可能应该有其他办法。

 

6.注意spring配置文件的开头是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

 

7, 如果说数据库不能执行sql语句,要查看是不是表项没有全部都给赋值。

 

8. 源代码我的例子是根据书中的例子写的。

 

用eclipse新建了一个web project, 然后在此基础上增加文件。

 

1) sample/src/test/hibernate/HibernateTest.java

 

package test.hibernate;
import java.util.List;

import junit.framework.Assert;
import junit.framework.TestCase;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;
import net.sf.hibernate.Session;

import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;

public class HibernateTest extends TestCase {
    Session session = null;
    /**
    * JUnit中setUp方法在TestCase初始化的时候会自动调用
    * 一般用于初始化公用资源
    * 此例中,用于初始化Hibernate Session
    */
    protected void setUp(){
    try {
    /**
    * 采用hibernate.properties配置文件的初始化代码:
    * Configuration config = new Configuration();
    * config.addClass(TUser.class);
    */
    //采用hibernate.cfg.xml配置文件
    //请注意初始化Configuration时的差异:
    // 1.Configuration的初始化方式
    // 2.xml文件中已经定义了Mapping文件,因此无需再Hard Coding导入
    // POJO文件的定义
    Configuration config = new Configuration().configure();
    SessionFactory sessionFactory =
    config.buildSessionFactory();
    session = sessionFactory.openSession();
    } catch (HibernateException e) {
    e.printStackTrace();
    }
    }
    /**
    * 与setUp方法相对应,JUnit TestCase执行完毕时,会自动调用tearDown方法
    * 一般用于资源释放
    * 此例中,用于关闭在setUp方法中打开的Hibernate Session
    */
    protected void tearDown(){
    try {
    session.close();
    } catch (HibernateException e) {
    e.printStackTrace();
    }
    }
    /**
    * 对象持久化(Insert)测试方法
    *
    * JUnit中,以”test”作为前缀的方法为测试方法,将被JUnit自动添加
    * 到测试计划中运行
    */
    public void testInsert(){
    try {
        String hql=
            " from Table1 where id=10";
       
        Query query = session.createQuery(hql);
       
    Table1 table1 = new test.hibernate.Table1();
    table1.setId(10);
    table1.setTitle("Emma");

    session.save(table1);
    session.flush();
    } catch (HibernateException e) {
    e.printStackTrace();
    Assert.fail(e.getMessage());
    }
    }
   
    /**
    * 对象读取(Select)测试
    * 请保证运行之前数据库中已经存在name=’Emma’的记录
    */
    public void testSelect(){
    String hql=
    " from Table1 where id=10";
    try {
    Query query = session.createQuery(hql);
    List userList = session.find(hql);
    Table1 table1 =(Table1)userList.get(0);
    Assert.assertEquals(table1.getTitle(),"Emma");

    } catch (HibernateException e) {
    e.printStackTrace();
    Assert.fail(e.getMessage());
    }
    }
    }

 

2) sample/src/test/hibernate/Talbe1.java, 这个是用工具生成的,是我以前就建的数据库,自己建的表,拷贝到这里的。

 

package test.hibernate;

import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;


/**
 *        table1
 *    
 *        @hibernate.class
 *         table="table1"
 *    
*/
public class Table1 implements Serializable {

    /** identifier field */
    private Integer id;

    /** nullable persistent field */
    private String title;

   

    /** full constructor */
    public Table1(Integer id, String title, String note, String createDay, String fontName, String fontSize, String fontWeight, String fontColor, String fontStyle, String bgcolor) {
        this.id = id;
        this.title = title;

    }

    /** default constructor */
    public Table1() {
    }

    /** minimal constructor */
    public Table1(Integer id) {
        this.id = id;
    }

    /**
     *            @hibernate.id
     *             generator-class="assigned"
     *             type="java.lang.Integer"
     *             column="id"
     *        
     */
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    /**
     *            @hibernate.property
     *             column="title"
     *             length="128"
     *        
     */
    public String getTitle() {
        return this.title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

   

    public String toString() {
        return new ToStringBuilder(this)
            .append("id", getId())
            .toString();
    }

    public boolean equals(Object other) {
        if ( (this == other ) ) return true;
        if ( !(other instanceof Table1) ) return false;
        Table1 castOther = (Table1) other;
        return new EqualsBuilder()
            .append(this.getId(), castOther.getId())
            .isEquals();
    }

    public int hashCode() {
        return new HashCodeBuilder()
            .append(getId())
            .toHashCode();
    }

}

 

3) sample/src/test/Spring/ITalbeDAO.java

 

package test.Spring;

public interface ItableDAO {
    public String execute(String str);
    public void saveUpdate(test.hibernate.Table1 table);
}

 

4)sample/src/test/Spring/talbeDAO.java

 

package test.Spring;

import org.springframework.orm.hibernate.support.HibernateDaoSupport;


public class tableDAO extends HibernateDaoSupport implements ItableDAO
{
public void saveUpdate(test.hibernate.Table1 table) {
getHibernateTemplate().saveOrUpdate(table);
}

public String execute(String str) {
    // TODO Auto-generated method stub
    return null;
}
}

 

5)sample/src/test/Spring/talbeSpring.java // 这是一个Servlet用来测试的

 

package test.Spring;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;



import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.hibernate.HibernateException;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.*;


/**
 * Servlet implementation class testSpring
 */
public class testSpring extends HttpServlet {
    private static final long serialVersionUID = 1L;
      
    /**
     * @see HttpServlet#HttpServlet()
     */
    public testSpring() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
      
        //这是测试函数,实际上只有查到Id 有是10的才能保存更新,并不能直接插入的,我还不知道怎么插入现在
        try {
        ApplicationContext ctx=new
        FileSystemXmlApplicationContext("Hibernate-Context.xml");

        ItableDAO tableDAO = (ItableDAO)ctx.getBean("tableDAO");

        test.hibernate.Table1 table1 = new test.hibernate.Table1();
        table1.setId(10);
        table1.setTitle("Emma11");

        tableDAO.saveUpdate(table1);
        System.out.print(table1.toString());
        } catch (Exception e) {
            e.printStackTrace();
            }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }




}

 

6) sample/WebContent/WEB-INF/classes/hibernate.cfg.xml // 我用的mysql数据库

 

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<!-- SessionFactory 配置 -->
<session-factory>

<property name="hibernate.connection.url">
jdbc:mysql://localhost/testdatabase
</property>
<!-- 数据库JDBC驱动 -->
<property name="hibernate.connection.driver_class">
org.gjt.mm.mysql.Driver
</property>
<!-- 数据库用户名 -->
<property name="hibernate.connection.username">
****
</property>
<!-- 数据库用户密码 -->
<property name="hibernate.connection.password">
****
</property>
<!--dialect ,每个数据库都有其对应的Dialet以匹配其平台特性 -->
<property name="dialect">
net.sf.hibernate.dialect.MySQLDialect
</property>
<!-- 是否将运行期生成的SQL输出到日志以供调试 -->
<property name="hibernate.show_sql">
True
</property>

<property name="hibernate.use_outer_join">
True
</property>
<!-- 事务管理类型,这里我们使用JDBC Transaction -->
<property name="hibernate.transaction.factory_class">
net.sf.hibernate.transaction.JDBCTransactionFactory
</property>
<!--映射文件配置,注意配置文件名必须包含其相对于根的全路径 -->
<mapping resource="Table1.hbm.xml"/>

</session-factory>
</hibernate-configuration>

 

7)sample/WebContent/WEB-INF/classes/Table1.hbm.xml //也是工具生成的,自己拷贝过来的

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
   
<hibernate-mapping>
<!--
    Created by the Middlegen Hibernate plugin 2.1

    http://boss.bekk.no/boss/middlegen/
    http://www.hibernate.org/
-->

<class
    name="test.hibernate.Table1"
    table="table1"
>
    <meta attribute="class-description" inherit="false">
       table1
    </meta>
    <meta attribute="class-description" inherit="false">
       @hibernate.class
        table="table1"
    </meta>
    <meta attribute="extends" inherit="false">table1</meta>
    <meta attribute="implements" inherit="false">net.sf.hibernate.Lifecycle</meta>
    <meta attribute="implements" inherit="false">net.sf.hibernate.Validatable</meta>
    <meta attribute="implement-equals" inherit="false">true</meta>

    <id
        name="id"
        type="java.lang.Integer"
        column="id"
    >
        <meta attribute="field-description">
           @hibernate.id
            generator-class="assigned"
            type="java.lang.Integer"
            column="id"


        </meta>
        <generator class="assigned" />
    </id>

    <property
        name="title"
        type="java.lang.String"
        column="title"
        length="128"
    >
        <meta attribute="field-description">
           @hibernate.property
            column="title"
            length="128"
        </meta>   
    </property>



    <!-- Associations -->
 

</class>
</hibernate-mapping>

 

8) sample/WebContent/WEB-INF/lib

加入了很多库,spring.jar, hibernate2.jar,还有其他许多hibernate2里边的库,不知道具体该加哪个就都加上了。

 

9) sample/WebContent/WEB-INF/Hibernate-Context.xml //其实这个放这也找不道,把project生成war包后,手动给复制到tomcat root /bin下边的。

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
   
<beans>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>org.gjt.mm.mysql.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/testdatabase</value>
</property>
<property name="username">
<value>****</value>
</property>
<property name="password">
<value>****</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate.LocalSessionFactoryBean"
>
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>Table1.hbm.xml</value>
</list>

</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
net.sf.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean id="tableDAO" class="test.Spring.tableDAO">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean id="userDAOProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="tableDAO" />
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>

</property>
</bean>
</beans>

 

10) sample/WebContent/WEB-INF/web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>sample</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <description></description>
    <display-name>testSpring</display-name>
    <servlet-name>testSpring</servlet-name>
    <servlet-class>test.Spring.testSpring</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>testSpring</servlet-name>
    <url-pattern>/testSpring</url-pattern>
  </servlet-mapping>
</web-app>

 

11) ok,全部文件,在eclipse里边也要加入所需的library才能编译build project通过的。export成war包就可以运行了。

 run hibernateTest.java as JUnit test,验证单独hibernate

 浏览器运行  http://localhost:8080/testSpring,验证spring+hibernate

,当然因为我没有写前端,所以页面上没有显示,只能通过手动查看数据库内容,或通过tomcat的执行窗口看日志,能看到,mysql

执行的语句,比如

 

“Hibernate: insert into table1 (title, id) values (?, ?)”

 

原创粉丝点击