这篇讲下spring和hibernate的整合
目录结构如下:
1.新建java项目
2.导入jar包
antlr-2.7.7.jar
aopalliance.jar
aspectjweaver.jar
commons-logging.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-core-4.3.10.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.3.GA.jar
jboss-logging-annotations-1.2.0.Beta1.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
mysql-connector-java-5.1.20-bin.jar
spring-aop-4.1.6.RELEASE.jar
spring-aspects-4.1.6.RELEASE.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-core-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
spring-jdbc-4.1.6.RELEASE.jar
spring-orm-4.1.6.RELEASE.jar
spring-tx-4.1.6.RELEASE.jar
spring-web-4.1.6.RELEASE.jar
3.编写vo类
User.java
1 packagecn.vincent.vo;2
3 importjava.io.Serializable;4
5 public class User implementsSerializable{6 private intid;7 privateString name;8 private intage;9 public intgetId() {10 returnid;11 }12 public void setId(intid) {13 this.id =id;14 }15 publicString getName() {16 returnname;17 }18 public voidsetName(String name) {19 this.name =name;20 }21 public intgetAge() {22 returnage;23 }24 public void setAge(intage) {25 this.age =age;26 }27
28 }
View Code
4.在src下,编写 hibernate.cfg.xml ,并且在cn.vincent.vo下编写vo类的映射文件 User.hbm.xml
hibernate.cfg.xml
/p>
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
com.mysql.jdbc.Driver
jdbc:mysql:///test
root
root
org.hibernate.dialect.MySQLDialect
update
true
true
User.hbm.xml
/p>
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
5.准备好工具包 cn.vincent.util 下的 HibernateUtil.java 文件
HibernateUtil.java
packagecn.vincent.util;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.boot.registry.StandardServiceRegistryBuilder;importorg.hibernate.cfg.Configuration;importorg.hibernate.service.ServiceRegistry;public classHibernateUtil {private staticConfiguration cfg;private staticServiceRegistry registry;private staticSessionFactory factory;private static ThreadLocalsession;static{//初始化
cfg = newConfiguration().configure();
registry= newStandardServiceRegistryBuilder()
.applySettings(cfg.getProperties())
.build();
factory=cfg.buildSessionFactory(registry);
session=new ThreadLocal<>();
}//获取连接
public staticSession getSession(){if(session.get()==null){
session.set(factory.openSession());
}returnsession.get();
}//释放资源
public static voidclose(){if(session.get()!=null){
session.get().close();
session.set(null);
}
}
}
6.编写 cn.vincent.dao 包下的 UserDao.java ,及cn.vincent.dao.impl下的 UserDaoImpl.java 文件
UserDao.java
packagecn.vincent.dao;importjava.util.List;importcn.vincent.vo.User;public interfaceUserDao {public ListfindAll();
}
UserDaoImpl.java
packagecn.vincent.dao.impl;importjava.util.List;importorg.hibernate.Session;importcn.vincent.dao.UserDao;importcn.vincent.util.HibernateUtil;importcn.vincent.vo.User;public class UserDaoImpl implementsUserDao{
@Overridepublic ListfindAll() {
Session session=HibernateUtil.getSession();return session.createQuery("from User").list();
}
}
7.编写 cn.vincent.service 下的 UserService.java 和 cn.vincent.service.impl 下的 UserServiceImpl.java
UserService.java
packagecn.vincent.service;importjava.util.List;importcn.vincent.vo.User;public interfaceUserService {public ListfindAll();
}
UserServiceImpl.java
packagecn.vincent.service.impl;importjava.util.List;importcn.vincent.dao.UserDao;importcn.vincent.service.UserService;importcn.vincent.vo.User;public class UserServiceImpl implementsUserService{privateUserDao userDao;
@Overridepublic ListfindAll() {returnuserDao.findAll();
}public voidsetUserDao(UserDao userDao) {this.userDao =userDao;
}
}
8.编写spring配置文件:beans.xml
9.编写测试
新建名为 test 的source folder,并且在cn.vincent.service 下添加 UserServiceTest.java文件
packagecn.vincent.service;importjava.util.List;importorg.junit.Test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importcn.vincent.vo.User;public classUserServiceTest {
@Testpublic voidtestFindAll(){
ApplicationContext ac= new ClassPathXmlApplicationContext("beans.xml");
UserService us= ac.getBean(UserService.class);
List list =us.findAll();
System.out.println(list.size());
}
}
10.运行测试,查看效果
结束!
补充:
11.在 spring 整合 hibernate 时,可以将 hibernate 的所有配置都写入 spring 中,这样就可以不要 hibernate.cfg.xml 配置文件:
beans.xml
org.hibernate.dialect.MySQLDialect
true
true
classpath:cn/sxt/vo/User.hbm.xml
12.spring的声明式事务