Spring整合Hibernate方式一
持久层+业务层的整合
- 搭建环境,导入Spring和Hibernate的依赖包
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
javax.servlet.jsp-api
2.3.1
provided
org.hibernate
hibernate-core
5.2.10.Final
org.hibernate
hibernate-entitymanager
5.2.10.Final
org.hibernate
hibernate-osgi
5.2.10.Final
org.hibernate
hibernate-envers
5.2.10.Final
org.hibernate
hibernate-c3p0
5.2.10.Final
org.hibernate
hibernate-proxool
5.2.10.Final
org.hibernate
hibernate-infinispan
5.2.10.Final
org.hibernate
hibernate-ehcache
5.2.10.Final
org.springframework
spring-webmvc
4.3.6.RELEASE
org.springframework
spring-context
4.3.6.RELEASE
org.springframework
spring-context-support
4.3.6.RELEASE
org.springframework
spring-web
4.3.6.RELEASE
org.springframework
spring-jdbc
4.3.6.RELEASE
org.springframework
spring-test
4.3.6.RELEASE
org.springframework
spring-aspects
4.3.6.RELEASE
org.springframework
spring-expression
4.3.6.RELEASE
org.springframework
spring-orm
4.3.6.RELEASE
org.aspectj
aspectjweaver
1.8.5
mysql
mysql-connector-java
5.1.38
- 根据需求做设计
数据库设计
文档:
概要设计:功能点列出来。
详细设计,接口层面(定义的类,方法,参数)
...
创建一个汽车表t_car
DROP TABLE IF EXISTS `t_car`;
CREATE TABLE `t_car` (
`cid` bigint(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`color` varchar(10) NOT NULL,
`description` varchar(100) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `t_car` VALUES ('1', '兰博基尼', '绿色', '无限拉风的车子,无限装逼的车子');
INSERT INTO `t_car` VALUES ('3', '玛莎拉蒂', '蓝色', '千里马常有,而伯乐不常有');
INSERT INTO `t_car` VALUES ('4', '大众', '黑色', '千里马常有,而伯乐不常有');
- 创建Hibernate核心配置文件
下面介绍一下怎么使用Hibernate Tools插件生成Hibernate的配置文件,映射文件以及实体类
- 安装Hibernate Tools插件
到eclipse的商店里面安装jboss插件,jboss是很多插件整合在一起,我们只使用Hibernate Tools就可以了,所以在安装的时候记得只勾选Hibernate就行了
- 创建Hibernate核心配置文件(hibernate.cfg.xml)
把四大属性和方言配置好,其他属性按需要配置
- 创建hiberenate的映射文件和实体类POJO
因为数据库的表已经创建好了,我们可以根据表来反转创建映射文件和实体类,具体操作如下:-
先创建反转文件
-
进行反转配置界面
-
上面那个点击的图标可能没有,点击Window-Perspective-Custormize Perspective...-Action Set Availability勾选上Hibernate Code Generation即可
+ 配置
配置完成点击Run,自动生成映射文件和实体类
实体类:
public class TCar implements Serializable {
private Long cid;
private String name;
private String color;
private String description;
//getter setter方法
}
映射文件:(注意将映射文件注册到hibernate核心配置文件中去)
- 创建持久层的接口和实现类
接口:
public interface CarDao {
void addCar(TCar car);
void deleteCar(Long id);
void updateCar(Long id,String color);
TCar findById(Long id);
}
实现类:
使用 Spring提供的模板类来整合持久层
不用写工具类:先得到SessionFactory再得到session
交给Spring.
使用了HibernateTemplate,本质上还是使用了Session.
public class CarDaoImpl implements CarDao {
private HibernateTemplate ht;
public void setHt(HibernateTemplate ht) {
this.ht = ht;
}
@Override
public void addCar(TCar car) {
ht.save(car);
}
@Override
public void deleteCar(Long id) {
ht.delete(ht.get(TCar.class, id));
}
@Override
public void updateCar(Long id, String color) {
TCar car = ht.get(TCar.class, id);
car.setColor(color);
ht.update(car);
}
@Override
public TCar findById(Long id) {
return ht.get(TCar.class, id);
}
}
- 开发业务层接口和实现类
接口:
public interface CarService {
void addCar(TCar car);
void deleteCar(Long id);
void updateCar(Long id,String color);
TCar findById(Long id);
}
实现类:
public class CarServiceImpl implements CarService {
private CarDao carDao;
public void setCarDao(CarDao carDao) {
this.carDao = carDao;
}
@Override
public void addCar(TCar car) {
carDao.addCar(car);
}
@Override
public void deleteCar(Long id) {
carDao.deleteCar(id);
}
@Override
public void updateCar(Long id, String color) {
carDao.updateCar(id, color);
}
@Override
public TCar findById(Long id) {
return carDao.findById(id);
}
}
-
Spring整合持久层Hibernate配置
Spring提供创建SessionFactory的Bean.(以前我们是使用工具类来创建的。)
经过上面的配置,可以进行测试,但是只能进行查询的操作,因为增、删、改的操作必须要在事务环境下才能执行,所以下面通过AOP编程配置事务
配置事务
需要数据源对象
在上面配置的基础上添加下面的配置(事务配置)
事务配置也可使用注解配置,只需将上面配置的6,7去掉,添加
在需要事务的类上添加注解:
@Transactional(value="txManager")
public class CarDaoImpl implements CarDao {...}
测试类如下:
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext2.xml");
CarService carService = ac.getBean("carService",CarService.class);
//查询
/*TCar car = carService.findById(1L);
System.out.println(car.getName()+"\t"+car.getColor()+"\t"+car.getDescription());*/
//增加
TCar car = new TCar();
car.setName("大众");
car.setColor("黑色");
car.setDescription("千里马常有,而伯乐不常有");
carService.addCar(car);
//修改
//carService.updateCar(3L, "蓝色");
//删除
//carService.deleteCar(2L);
}
}