Java学习之道:纯Hibernate使用-不用spring事务管理
2013-07-31 20:07
447 查看
最近一直在做系统测试,检验功能,测试bug。发现一直都是用spring来管理配置hibernate依赖注入,来管理Hibernate事务。但是有的程序需要手动Main函数启动,而采用spring加载的话,就会触发很多类,影响性能,还有当spring里面写了触发器后,那么随着你的main函数运行,你的触发器也得到了启动,那么这个会造成多个进程开启了触发器。
当离开了spring管理时,发现Hibernate居然不知道怎么调用了,参考了网上一些大牛的文章,自己动手实现了,无需spring管理来进行Hibernate调用。
直接上代码:1.工具类,2.xml配置文件,3.实体类,注释方式 4.测试功能类
Hibernateutil .java代码
package com.t.common.hibernate;
import java.io.Serializable;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public final class HibernateUtil {
private static SessionFactory sessionFactory;
private static ThreadLocal session = new ThreadLocal();
public HibernateUtil(){
}
static {
Configuration cfg = new Configuration();
cfg.configure("hibernate.common.xml");
sessionFactory = cfg.buildSessionFactory();
}
public static Session getThreadLocalSession(){
Session s = (Session) session.get();
if(s==null){
s=getSession();
session.set(s);
}
return s;
}
public static void closeSession(){
Session s = (Session)session.get();
if(s!=null){
s.close();
session.set(null);
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static Session getSession(){
return sessionFactory.openSession();
}
//增删改查
//当需要事务一致性的时候,需要回滚,比如商品系统
/*
* public static void add(Object entity){
Session s =null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(entity);
tx.commit();
} catch (HibernateException e) {
if(tx != null){
tx.rollback();
}
throw e;
}finally {
if(s!=null){
s.close();
}
}
}
*/
public static void add(Object entity){
Session s =null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(entity);
tx.commit();
} finally {
if(s!=null){
s.close();
}
}
}
public static void delete(Object entity){
Session s =null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.delete(entity);
tx.commit();
} finally {
if(s!=null){
s.close();
}
}
}
public static Object get(Class clazz, Serializable id){
Session s =null;
try {
s = HibernateUtil.getSession();
Object obj = s.get(clazz, id);
return obj;
} finally {
if(s!=null){
s.close();
}
}
}
}
Hibernate.common.xml代码
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">
false
</property>
<property name="hibernate.connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<property name="connection.username">baike</property>
<property name="connection.password">baike</property>
<property name="hibernate.dialect">
org.hibernate.dialect.Oracle10gDialect
</property>
<property name="hibernate.search.autoregister_listeners">
false
</property>
<property name="hibernate.show_sql">true</property>
<!-- 映射类 -->
<mapping class="com.t.common.hibernate.BaikeUser"/>
</session-factory>
</hibernate-configuration>
Baikeuser .java代码
package com.t.common.hibernate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name="T_USER")
public class BaikeUser {
private Long id ;
private String username;
private String password;
@Id
@SequenceGenerator(name="generator",allocationSize=1,initialValue=1,sequenceName="SEQ_USER_ID")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="generator")
@Column(name="ID")
public Long getId() {
return id;
}
@Column(name="username")
public String getUsername() {
return username;
}
@Column(name="password")
public String getPassword() {
return password;
}
public void setId(Long id) {
this.id = id;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
}
Testuser.java代码
package com.t.common.hibernate;
public class TestUSer {
public static void main(String[] args) {
BaikeUser user = new BaikeUser();
user.setId(1L);
user.setUsername("cjp1989");
user.setPassword("12345");
HibernateUtil.add(user);
}
}
1.注意事项:xml配置文件可以自定义的,但是<session-factory> 单独使用时,没有name属性
当离开了spring管理时,发现Hibernate居然不知道怎么调用了,参考了网上一些大牛的文章,自己动手实现了,无需spring管理来进行Hibernate调用。
直接上代码:1.工具类,2.xml配置文件,3.实体类,注释方式 4.测试功能类
Hibernateutil .java代码
package com.t.common.hibernate;
import java.io.Serializable;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public final class HibernateUtil {
private static SessionFactory sessionFactory;
private static ThreadLocal session = new ThreadLocal();
public HibernateUtil(){
}
static {
Configuration cfg = new Configuration();
cfg.configure("hibernate.common.xml");
sessionFactory = cfg.buildSessionFactory();
}
public static Session getThreadLocalSession(){
Session s = (Session) session.get();
if(s==null){
s=getSession();
session.set(s);
}
return s;
}
public static void closeSession(){
Session s = (Session)session.get();
if(s!=null){
s.close();
session.set(null);
}
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
public static Session getSession(){
return sessionFactory.openSession();
}
//增删改查
//当需要事务一致性的时候,需要回滚,比如商品系统
/*
* public static void add(Object entity){
Session s =null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(entity);
tx.commit();
} catch (HibernateException e) {
if(tx != null){
tx.rollback();
}
throw e;
}finally {
if(s!=null){
s.close();
}
}
}
*/
public static void add(Object entity){
Session s =null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(entity);
tx.commit();
} finally {
if(s!=null){
s.close();
}
}
}
public static void delete(Object entity){
Session s =null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.delete(entity);
tx.commit();
} finally {
if(s!=null){
s.close();
}
}
}
public static Object get(Class clazz, Serializable id){
Session s =null;
try {
s = HibernateUtil.getSession();
Object obj = s.get(clazz, id);
return obj;
} finally {
if(s!=null){
s.close();
}
}
}
}
Hibernate.common.xml代码
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">
false
</property>
<property name="hibernate.connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<property name="connection.username">baike</property>
<property name="connection.password">baike</property>
<property name="hibernate.dialect">
org.hibernate.dialect.Oracle10gDialect
</property>
<property name="hibernate.search.autoregister_listeners">
false
</property>
<property name="hibernate.show_sql">true</property>
<!-- 映射类 -->
<mapping class="com.t.common.hibernate.BaikeUser"/>
</session-factory>
</hibernate-configuration>
Baikeuser .java代码
package com.t.common.hibernate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name="T_USER")
public class BaikeUser {
private Long id ;
private String username;
private String password;
@Id
@SequenceGenerator(name="generator",allocationSize=1,initialValue=1,sequenceName="SEQ_USER_ID")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="generator")
@Column(name="ID")
public Long getId() {
return id;
}
@Column(name="username")
public String getUsername() {
return username;
}
@Column(name="password")
public String getPassword() {
return password;
}
public void setId(Long id) {
this.id = id;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
}
Testuser.java代码
package com.t.common.hibernate;
public class TestUSer {
public static void main(String[] args) {
BaikeUser user = new BaikeUser();
user.setId(1L);
user.setUsername("cjp1989");
user.setPassword("12345");
HibernateUtil.add(user);
}
}
1.注意事项:xml配置文件可以自定义的,但是<session-factory> 单独使用时,没有name属性
相关文章推荐
- Spring视频学习(九)使用Spring注解方式管理事务与传播行为详解
- Spring使用JavaConfig配置声明式事务管理
- Spring学习笔记(15)----使用Spring注解方式管理事务
- Beginning Spring学习笔记——第6章(三)使用Spring进行编程式事务管理
- java事务学习笔记(八)--分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)
- Spring整合Hibernate:2、使用Annotation方式进行声明式的事务管理
- hibernate使用spring的事务管理器在测试dao的时候获取不到session
- Spring2.5整合Hibernate3.0中使用XML以tx来配置事务管理。
- SSH与SSM学习之Spring21——Spring事务之代码方式管理事务(基本不用)
- Spring整合hibernate:3、使用XML进行声明式的事务管理
- Spring整合hibernate:3、使用XML进行声明式的事务管理
- Spring学习总结9(基于Hibernate的事务管理)
- Spring整合Hibernate开发 - 使用事务管理器操作数据库 - 主配置文件
- 关于spring 与Hibernate 结合使用的事务管理
- Spring整合hibernate的事务属性介绍以及声明式事务管理 (使用Annotation和xml)
- Spring 注解方式进行事务管理的用法介绍详解【Java学习笔记】
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
- 使用spring管理hibernate的事务
- Spring学习历程---Hibernate访问数据库可脱离事务管理器