Spring第三天(Spring整合Hibernate)

Spring整合Hibernate方式一

持久层+业务层的整合

  1. 搭建环境,导入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
    
  1. 根据需求做设计
    数据库设计
    文档:
    概要设计:功能点列出来。
    详细设计,接口层面(定义的类,方法,参数)
    ...
    创建一个汽车表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', '大众', '黑色', '千里马常有,而伯乐不常有');
  1. 创建Hibernate核心配置文件
    下面介绍一下怎么使用Hibernate Tools插件生成Hibernate的配置文件,映射文件以及实体类
  • 安装Hibernate Tools插件
    到eclipse的商店里面安装jboss插件,jboss是很多插件整合在一起,我们只使用Hibernate Tools就可以了,所以在安装的时候记得只勾选Hibernate就行了
    Spring第三天(Spring整合Hibernate)_第1张图片
    Hibernate Tools
  • 创建Hibernate核心配置文件(hibernate.cfg.xml)
    把四大属性和方言配置好,其他属性按需要配置
    Spring第三天(Spring整合Hibernate)_第2张图片
    hibernate.cfg.xml
  • 创建hiberenate的映射文件和实体类POJO
    因为数据库的表已经创建好了,我们可以根据表来反转创建映射文件和实体类,具体操作如下:
    • 先创建反转文件


      Spring第三天(Spring整合Hibernate)_第3张图片
      reveng.xml
    • 进行反转配置界面


      Spring第三天(Spring整合Hibernate)_第4张图片
      Go

上面那个点击的图标可能没有,点击Window-Perspective-Custormize Perspective...-Action Set Availability勾选上Hibernate Code Generation即可
+ 配置


Spring第三天(Spring整合Hibernate)_第5张图片
配置

Spring第三天(Spring整合Hibernate)_第6张图片
配置

配置完成点击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.(以前我们是使用工具类来创建的。)


    Spring第三天(Spring整合Hibernate)_第7张图片
    Spring-Hibernate

    
        
        
    
    
    
        
    
    
    
        
     
    
    
        
    

经过上面的配置,可以进行测试,但是只能进行查询的操作,因为增、删、改的操作必须要在事务环境下才能执行,所以下面通过AOP编程配置事务

配置事务

需要数据源对象


Spring第三天(Spring整合Hibernate)_第8张图片
image.png

在上面配置的基础上添加下面的配置(事务配置)




    
        
        
    
    
    
        
            
            
            
        
    
    
    
        
        
    

事务配置也可使用注解配置,只需将上面配置的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);
    }
}

你可能感兴趣的:(Spring第三天(Spring整合Hibernate))