1.建立web工程,导入相关包
2.建立包
3.配置Spring和Hibernate环境
application-common.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<!-- 启动注解注入 -->
<context:annotation-config/>
<!-- 启动组件扫描 -->
<context:component-scan base-package="com.ft" />
<bean id="hibernateUtil" class="com.ft.util.HibernateUtil"></bean>
</beans>
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/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:///spring</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="current_session_context_class">thread</property>
<!-- 跳过注解验证规则-->
<property name="javax.persistence.validation.mode">none</property>
<!-- SQL 方言 -->
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<!-- 在控制台输出sql语句 -->
<property name="show_sql">true</property>
<!-- 格式化sql语句 -->
<property name="format_sql">true</property>
<!-- 设置事务隔离级别 -->
<property name="connection.isolation">2</property>
<!-- 在启动时根据配置更新数据库 -->
<property name="hbm2ddl.auto">update</property>
<!-- c3p0数据源配置 -->
<property name="hibernate_c3p0.max_size">10</property>
<property name="hibernate_c3p0.min_size">5</property>
<property name="c3p0.acquire_increment">2</property>
<mapping class="com.ft.Model.ReceiveMessage"/>
<mapping class="com.ft.Model.SendMessage"/>
<mapping class="com.ft.Model.User"/>
</session-factory>
</hibernate-configuration>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<global-results>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
</package>
</struts>
com.ft.Model.User
package com.ft.Model;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="T_USER")
public class User {
private Integer id;
private String name;
private String password;
private Set<ReceiveMessage> receiveMessage = new HashSet<ReceiveMessage>();
private Set<SendMessage> sendMessage = new HashSet<SendMessage>();
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password
+ ", receiveMessage=" + receiveMessage + ", sendMessage="
+ sendMessage + "]";
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@OneToMany(mappedBy="user")
public Set<ReceiveMessage> getReceiveMessage() {
return receiveMessage;
}
public void setReceiveMessage(Set<ReceiveMessage> receiveMessage) {
this.receiveMessage = receiveMessage;
}
@OneToMany(mappedBy="user")
public Set<SendMessage> getSendMessage() {
return sendMessage;
}
public void setSendMessage(Set<SendMessage> sendMessage) {
this.sendMessage = sendMessage;
}
}
ReceiveMessage
package com.ft.Model;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="T_RECEIVEMESSAGE")
public class ReceiveMessage {
private Integer id;
private Date receiveTime;
private String title;
private String content;
private String senderName;
private User user;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getReceiveTime() {
return receiveTime;
}
public void setReceiveTime(Date receiveTime) {
this.receiveTime = receiveTime;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getSenderName() {
return senderName;
}
public void setSenderName(String senderName) {
this.senderName = senderName;
}
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="userId")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
ReceiveMessage
package com.ft.Model;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="T_RECEIVEMESSAGE")
public class ReceiveMessage {
private Integer id;
private Date receiveTime;
private String title;
private String content;
private String senderName;
private User user;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getReceiveTime() {
return receiveTime;
}
public void setReceiveTime(Date receiveTime) {
this.receiveTime = receiveTime;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getSenderName() {
return senderName;
}
public void setSenderName(String senderName) {
this.senderName = senderName;
}
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="userId")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
SendMessage
package com.ft.Model;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "T_SENDMESSAGE")
public class SendMessage {
private Integer id;
private Date sendTime;
private String title;
private String content;
private String[] receiverNames;
private User user;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String[] getReceiverNames() {
return receiverNames;
}
public void setReceiverNames(String[] receiverNames) {
this.receiverNames = receiverNames;
}
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "userId")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
com.ft.util.HibernateUtil
package com.ft.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
public class HibernateUtil {
private StandardServiceRegistry serviceRegistry;
private SessionFactory sessionFactory;
private Session session;
public Session getSession(){
serviceRegistry = new StandardServiceRegistryBuilder().configure()
.build();
sessionFactory = new MetadataSources(serviceRegistry).buildMetadata()
.buildSessionFactory();
session = sessionFactory.getCurrentSession();
return session;
}
}
SpringUtil
package com.ft.util;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringUtil {
@Test
public static BeanFactory getFactory(){
BeanFactory bf =new ClassPathXmlApplicationContext("application-common.xml");
return bf;
}
}
com.ft.test.TestItem
package com.ft.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import com.ft.Model.ReceiveMessage;
import com.ft.Model.SendMessage;
import com.ft.Model.User;
import com.ft.util.HibernateUtil;
import com.ft.util.SpringUtil;
public class TestItem {
HibernateUtil hibernateUtil;
Transaction transaction = null;
@Test
public void testConnection() {
BeanFactory bf = SpringUtil.getFactory();
hibernateUtil = (HibernateUtil)bf.getBean("hibernateUtil");
try{
System.out.println(hibernateUtil);
Session session = hibernateUtil.getSession();
System.out.println(session);
transaction = session.beginTransaction();
User user = new User();
user.setName("LiHua");
user.setPassword("2323");
System.out.println(user);
ReceiveMessage rm = new ReceiveMessage();
SendMessage sm = new SendMessage();
rm.setUser(user);
sm.setUser(user);
session.save(user);
session.save(rm);
session.save(sm);
transaction.commit();
} catch(Exception e){
transaction.rollback();
e.printStackTrace();
}
}
}
测试TestItem发生异常
java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.search.hcore.impl.HibernateSearchIntegrator could not be instantiated
at java.util.ServiceLoader.fail(Unknown Source)
at java.util.ServiceLoader.access$100(Unknown Source)
at java.util.ServiceLoader$LazyIterator.next(Unknown Source)
at java.util.ServiceLoader$1.next(Unknown Source)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.loadJavaServices(ClassLoaderServiceImpl.java:340)
at org.hibernate.integrator.internal.IntegratorServiceImpl.<init>(IntegratorServiceImpl.java:40)
at org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.build(BootstrapServiceRegistryBuilder.java:213)
at org.hibernate.boot.registry.StandardServiceRegistryBuilder.<init>(StandardServiceRegistryBuilder.java:58)
at com.ft.util.HibernateUtil.getSession(HibernateUtil.java:18)
at com.ft.test.TestItem.testConnection(TestItem.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.NoClassDefFoundError: org/apache/lucene/index/CorruptIndexException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.jboss.logging.Logger$1.run(Logger.java:2554)
at java.security.AccessController.doPrivileged(Native Method)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2529)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2516)
at org.hibernate.search.util.logging.impl.LoggerFactory.make(LoggerFactory.java:37)
at org.hibernate.search.hcore.impl.HibernateSearchIntegrator.<clinit>(HibernateSearchIntegrator.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
... 31 more
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.index.CorruptIndexException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 44 more