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 (?, ?)”
- hibernate+spring+struts例子
- struts&hibernate&spring例子
- spring+hibernate 例子
- Spring+Hibernate 简单例子
- struts+hibernate+spring入门例子
- 【原创】Struts+Hibernate+Spring例子..
- Spring整合Hibernate小例子
- spring+hibernate+struts例子wiring安装
- Spring Hibernate 组合的小例子
- 一个关于spring+hibernate的例子
- 一个关于spring+hibernate的例子
- 整合 JSF+Spring+Hibernate的小例子
- spring中对hibernate的支持例子
- JSF+Spring+Hibernate例子(绝对好用)
- Spring+Hibernate事务处理,很简单的例子
- Struts/Hibernate/Spring+Ajax集成小例子
- spring+hibernate+JTA 分布式事务的例子
- 求struts+hibernate+spring 的例子
- 如何去掉J2ME连接网络时的提示框
- 飞鸽传书转载:老板的忠告
- libsvm学习 all
- tomcat自动加载问题(转)
- Winform 控件随窗体大小改变而变化
- spring+hibernate 例子
- 数据库优化的手段
- JDK中密钥和证书管理工具Keytool常用命令
- RHEL 5 安装ORACLE10G(32位)
- 敏捷开发中编写高质量Java代码 ————转载
- web文本框限制字数经典代码
- ANDROID 高亮显示文字
- VSS/CVS/ClearCase的区别
- Tomcat下生成keystore证书