博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Hibernate步骤:(一)
阅读量:4098 次
发布时间:2019-05-25

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

先部署jar文件

1、根目录下的 \hibernate3.jar

2、lib\required目录下所有jar

3、lib\jpa(java持久化API)\hibernate-jpa-2.0-api-1.0.1.Final.jar(Jpa是一种规范,而Hibernate是它的一种实现)

 

4、Oracle数据库的驱动包(在数据库安装目录 jdbc\lib\下 找对应的版本的驱动)

 

 

编写Hibernate配置文件:

 

oracle.jdbc.OracleDriver
jdbc:oracle:thin:@localhost:1521:oracle
user01
1234
org.hibernate.dialect.Oracle10gDialect
true
true
thread

 

创建持久化类和映射文件:

       持久化类示例:

 

package po;public class User implements java.io.Serializable {	private static final long serialVersionUID = -2998707288951184222L;	private Integer id;	//OID	private String name;	private String password;	private String telephone;	private String username;	private String isAdmin;		public Integer getId() {		return id;	}	public void setId(Integer id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public String getPassword() {		return password;	}	public void setPassword(String password) {		this.password = password;	}	public String getTelephone() {		return telephone;	}	public void setTelephone(String telephone) {		this.telephone = telephone;	}	public String getUsername() {		return username;	}	public void setUsername(String username) {		this.username = username;	}	public String getIsAdmin() {		return isAdmin;	}	public void setIsAdmin(String isAdmin) {		this.isAdmin = isAdmin;	}}

 

映射文件示例:

 

 

 

 

使用Hibernate API;

            得到Session - - >

package common;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateSessionFactory {	private static Configuration cfg;	private static SessionFactory sessionFactory;	static {		try {			//读取默认位置的配置文件(如果改了路径,就应带参)			cfg = new Configuration().configure();			//得到SessionFactory对象.			sessionFactory = cfg.buildSessionFactory();		} catch (HibernateException e) {			//此处应有日志						throw new RuntimeException("Hibernate初始化失败",e);		}	}		public static Session getSession(){		//sessionFactory.openSession();不建议用opensession,因为这个会话没有绑定线程,需通过额外的代码来实现				//建议用如下方法,得到与当前线程绑定的session, 但要注意此session要在事物环境下工作		return sessionFactory.getCurrentSession();	}}

 

编写Dao 

 

package dao;import po.User;import common.HibernateSessionFactory;public class UserDao {	//增加	public void add(User user){		HibernateSessionFactory.getSession().save(user);	}	//查询	public User queryById(java.io.Serializable id){		//可以这样写 --》HibernaterSessionFactory.getSession().get("po.User", id);		return (User)HibernateSessionFactory.getSession().get(User.class, id);		//get() 查不到返回null              (OID  异常时)		//load() 查不到,就报异常exception    (OID  异常时)	}	//更新	public void update(User user){		HibernateSessionFactory.getSession().update(user);	}		// for save or update	public void test(User user){		//方法一 、 id==null? save() : update() 产生的SQL语句,会把字段全部更新		//HibernateSessionFactory.getSession().saveOrUpdate(user);				/*		//方法二 、  快照(在表中查询结果)		User u = (User) HibernateSessionFactory				.getSession().get(User.class,user.getId());		//在查询的基础上,给查询的结果重新赋值,它会有一个比照的效果,u与user比照;		//在比照中,如果数据有更新,就会更新表中数据   (hibernate中java对象的三种状态)		//如果没有变化,就不产生变化		//如果在User.hbm.xml中配置 (动态更新配置)		//动态更新配置  dynamic-update="true" ,SQL语句就只更新变化的字段		u.setIsAdmin(user.getIsAdmin());		u.setName(user.getName());		u.setPassword(user.getPassword());		u.setTelephone(user.getTelephone());		u.setUsername(user.getUsername());	*/								//方法三、   for save or update 		//     配置  dynamic-update="true"		//     merge()可以实现  动态更新		HibernateSessionFactory.getSession().merge(user);	}		public void delete(User user){		//建议先查  快照  //              例如传过来的user只有oid,但name = null,此时直接delete会报错,因为映射文件里设置了name--》not-null,可以手动去把这个限制去掉                //User u = (User) HibernateSessionFactory//				.getSession().get(User.class,user.getId());//		HibernateSessionFactory.getSession().delete(u);                                HibernateSessionFactory.getSession().delete(user);	}}

 

编写 service

 

package biz;import org.hibernate.HibernateException;import org.hibernate.Transaction;import common.HibernaterSessionFactory;import po.User;import dao.UserDao;public class UserBiz {	private  UserDao userDao = new UserDao();		public void addUser(User user){		Transaction tx = null;		try {			//开启事务			tx = HibernaterSessionFactory.getSession().beginTransaction();						userDao.add(user);					tx.commit();		} catch (HibernateException e) {			e.printStackTrace();			if(tx != null){				tx.rollback();			}		}	};		public User getUserById(java.io.Serializable id){		Transaction tx = null;		User user = null;		try {			//开启事务			tx = HibernaterSessionFactory.getSession().beginTransaction();			user = userDao.queryById(id);			tx.commit();		} catch (HibernateException e) {			e.printStackTrace();			if(tx != null){				tx.rollback();			}		}		return user;	}    //省略部分代码}

 

  • 大小: 17 KB

转载地址:http://iqlii.baihongyu.com/

你可能感兴趣的文章
Express: Can’t set headers after they are sent.
查看>>
2017年,这一次我们不聊技术
查看>>
实现接口创建线程
查看>>
Java对象序列化与反序列化(1)
查看>>
HTML5的表单验证实例
查看>>
JavaScript入门笔记:全选功能的实现
查看>>
程序设计方法概述:从面相对象到面向功能到面向对象
查看>>
数据库事务
查看>>
JavaScript基础1:JavaScript 错误 - Throw、Try 和 Catch
查看>>
SQL基础总结——20150730
查看>>
SQL join
查看>>
JavaScript实现页面无刷新让时间走动
查看>>
CSS实例:Tab选项卡效果
查看>>
前端设计之特效表单
查看>>
前端设计之CSS布局:上中下三栏自适应高度CSS布局
查看>>
Java的时间操作玩法实例若干
查看>>
JavaScript:时间日期格式验证大全
查看>>
pinyin4j:拼音与汉字的转换实例
查看>>
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>