博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Spring】纯java实现Spring-hibernate整合
阅读量:2056 次
发布时间:2019-04-28

本文共 6297 字,大约阅读时间需要 20 分钟。

首先导入Spring-hibernate相应的jar包

然后准备数据库连接的文件hibernate.properties还有jdbc.properties

hibernate.properties文件:进行hibernate方言和自动建表的配置

hibernate.dialect=org.hibernate.dialect.H2Dialect

hibernate.hbm2ddl.auto=create

jdbc.properties文件: 尽心hibernate连接数据库的配置

jdbc.driverClassName=org.h2.Driver

jdbc.url=jdbc:h2:tcp://localhost/D:/H2/h2/bin
jdbc.username=sa
jdbc.password=123456

创建实体类Customer映射到表中

package cn.qblank.entity;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entity // 实体类将映射到数据表,不指定表名即为类名//@Tablepublic class Customer {	@Id	@GeneratedValue(strategy = GenerationType.IDENTITY)	private Long id;		private String name;	private String address;	private boolean vip;		public Long getId() {		return id;	}	public void setId(Long id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getAddress() {		return address;	}	public void setAddress(String address) {		this.address = address;	}	public boolean isVip() {		return vip;	}	public void setVip(boolean vip) {		this.vip = vip;	}		@Override	public String toString() {		return "Customer [id=" + id + ", name=" + name + ", address=" + address + ", vip=" + vip + "]";	}		}
在dao层写一个CustomerDao接口

package cn.qblank.dao;import cn.qblank.entity.Customer;public interface CustomerDao {	void create(Customer customer);		void update(Customer customer);		Customer find(Long id);		void delete(Long id);}
实现类CustomerDao实现接口,并实现其所有方法

package cn.qblank.dao.impl;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;import cn.qblank.dao.CustomerDao;import cn.qblank.entity.Customer;@Repository@Transactionalpublic class CustomerDaoImpl implements CustomerDao {	@Autowired	private SessionFactory sessionFactory;		@Override	public void create(Customer customer) {		System.out.println("create...");		Session session = sessionFactory.openSession();		// 增删改查		session.save(customer);	}	@Override	public void update(Customer customer) {		System.out.println("update...");		Session session = sessionFactory.openSession();		try {			session.getTransaction().begin();			// 增删改查			session.update(customer);						session.getTransaction().commit();		} catch (Exception ex) {			session.getTransaction().rollback();		} finally {			session.close();		}	}	@Override	public Customer find(Long id) {		return sessionFactory.getCurrentSession().get(Customer.class, id);			}	@Override	public void delete(Long id) {		System.out.println("删除");		Session session = sessionFactory.getCurrentSession();		Customer customer = new Customer();		customer.setId(id);		session.delete(customer);	}}

创建Config类

package cn.qblank.test;import javax.sql.DataSource;import org.hibernate.SessionFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;import org.springframework.core.env.Environment;import org.springframework.jdbc.datasource.DriverManagerDataSource;import org.springframework.orm.hibernate5.HibernateTransactionManager;import org.springframework.orm.hibernate5.LocalSessionFactoryBean;import org.springframework.transaction.PlatformTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;@Configuration  //配置文件@ComponentScan("cn.qblank.dao")  //扫描dao层@PropertySource("classpath:jdbc.properties") //引入外部属性文件到Enviroment@EnableTransactionManagementpublic class Config {		@Bean	public LocalSessionFactoryBean sessionFactory(DataSource dataSource) {		LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();		factoryBean.setDataSource(dataSource);		factoryBean.setPackagesToScan("cn.qblank.entity"); // 自动扫描并注册实体类		return factoryBean;	}			@Bean                       // 依赖Environment	public DataSource dataSource(Environment env) {		DriverManagerDataSource ds = new DriverManagerDataSource();		// env.getProperty("someKey") 获得属性值		ds.setDriverClassName(env.getProperty("jdbc.driverClassName"));		ds.setUrl(env.getProperty("jdbc.url"));		ds.setUsername(env.getProperty("jdbc.username"));		ds.setPassword(env.getProperty("jdbc.password"));		return ds;	}		//创建事务管理类	@Bean	public PlatformTransactionManager transactionManager(SessionFactory sessionFactory){		HibernateTransactionManager transactionManager=new HibernateTransactionManager();		transactionManager.setSessionFactory(sessionFactory);		return transactionManager;	}}
最后进行测试

package cn.qblank.test;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import cn.qblank.dao.CustomerDao;import cn.qblank.entity.Customer;public class Main {	public static void main(String[] args) {		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);		CustomerDao customerDao = context.getBean(CustomerDao.class);		Customer customer = new Customer();		customer.setName("赵六");		customer.setAddress("湖南长沙");		customer.setVip(true);		customerDao.create(customer);//		Customer customer = customerDao.find(1L);//		System.out.println(customer);//		customerDao.delete(3l);		context.close();	}}
运行结果:

下面我们在dao层添加一个异常:

@Overridepublic void create(Customer customer){	System.out.println("create...");	Session session = sessionFactory.getCurrentSession();	// 增删改查	session.save(customer);	throw new RuntimeException("我叫异常");}
然后测试:

package cn.qblank.test;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import cn.qblank.dao.CustomerDao;import cn.qblank.entity.Customer;public class Main {	public static void main(String[] args) {		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);		CustomerDao customerDao = context.getBean(CustomerDao.class);		Customer customer = new Customer();		customer.setName("麻雀");		customer.setAddress("湖南长沙");		customer.setVip(true);		customerDao.create(customer);//		Customer customer = customerDao.find(1L);//		System.out.println(customer);//		customerDao.delete(3l);		context.close();	}}

可以看到出现错误,事务也成功回滚了

你可能感兴趣的文章
APP性能测试工具
查看>>
【Pyton】【小甲鱼】类和对象
查看>>
压力测试工具JMeter入门教程
查看>>
作为一名软件测试工程师,需要具备哪些能力
查看>>
【Pyton】【小甲鱼】类和对象:一些相关的BIF(内置函数)
查看>>
【Pyton】【小甲鱼】魔法方法
查看>>
单元测试需要具备的技能和4大阶段的学习
查看>>
【Loadrunner】【浙江移动项目手写代码】代码备份
查看>>
Python几种并发实现方案的性能比较
查看>>
[Jmeter]jmeter之脚本录制与回放,优化(windows下的jmeter)
查看>>
Jmeter之正则
查看>>
【JMeter】1.9上考试jmeter测试调试
查看>>
【虫师】【selenium】参数化
查看>>
【Python练习】文件引用用户名密码登录系统
查看>>
学习网站汇总
查看>>
【Python】用Python打开csv和xml文件
查看>>
【Loadrunner】性能测试报告实战
查看>>
【面试】一份自我介绍模板
查看>>
【自动化测试】自动化测试需要了解的的一些事情。
查看>>
【selenium】selenium ide的安装过程
查看>>