hibernate 总结一

虽然现在我们用hibernate4基于注解很方便,但看了传智博客hibernate3的视频觉得老师讲的很好,所有总结下来。视频网上直接能搜到下载。
一:
以一个小例子作为驱动,讲解hibernate3的开发,hibernate需要的jar包在lib下,hibernate3,还有sql驱动
二:配置文件的含义
讲解配置文件的配置以及含义,hibernate项目po需要注意的:必须有无参构造方法,有id(可选),非final的(可选)
为啥系统能找到src下的配置文件?因为她去classpath下寻找
三:简化hibernate代码
1.hibernate推荐驱动方式 PO类---配置文件----表 开发中也很常见 表----po类----hbm配置文件
2.hibernate生成执行操作那段代码里 SessionFactory 相当于DriverManage session 相当于Connection 可以简化得到session

的步骤,写一个工具类 需要session调用 工具类不希望继承,使用final修饰 不希望被实例化 构造方法为peivate,把里面你需要

的定义为static
里面加载配置文件只需要一次, 放在static静态块中代码如下
public final class HibernateUtil{
private static SessionFactory sessionFactory;
private static Session session;
private HibernateUtil(){
}
static{
Configuration cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.openSessionFactory();
}
//sessionFactory 的get 方法 是static
public static SessionFactory getSessionFactory (){
return sessionFactory;
}
public static Session getSession (){
return sessionFactory.openSession();
}

}


4.save
static void addObject(Object obj){
Session s = null;
Transaction tx = null;
try{
s = HibernateUtil.getSession();
tx=s.beginTransaction();
//和persist(Object)对象区别 如果事务没开启,persist不执行,save会插入再回滚
s.save(obj);
tx.commit();
//如果有异常,会抛出并自动回滚
}finally{
if(s!=null){
s.close();
}
}
}
四:Session 介绍
public User getUser(id){
s = HibernateUtil.getSession();
//不用开启事务 session 相当于包含了数据的map key是类名,value是类信息,get先获取类,再根据id获取某一行
Class userClass = User.class; //类的类 反射,得到的class里有类的所有信息
User user=s.get(UserClass,id); 和load(Object,id) 和get一样的,懒加载用
return user;
}

五:对象的三种状态
1.saveOrUpdate,merge,调用merge对象还是脱管的
2.处于持久状态时 发生变化 自动提交到数据库
处于脱管 不会自动提交 会调用update 方法 不知道对象处于瞬时还是托管 用SaveOrUpdate() ---持久的
3.新建 是瞬时的-----session.save() 在session里是持久的-------s.close session 关闭后是托管的
六:完善的hibernateUtil
static void Update(Object obj){
Session s = null;
Transaction tx = null;
try{
s = HibernateUtil.getSession();
tx=s.beginTransaction();
s.update(obj);
tx.commit();
//如果有异常,会抛出并自动回滚
}finally{
if(s!=null){
s.close();
}
}
}
static void Delete(Object obj){
Session s = null;
Transaction tx = null;
try{
s = HibernateUtil.getSession();
tx=s.beginTransaction();
s.delete(obj);
tx.commit();
//如果有异常,会抛出并自动回滚
}finally{
if(s!=null){
s.close();
}
}
}
static Object getById(Class objclass,Serializable id){
Session s = null;
try{
s = HibernateUtil.getSession();
Obj o = s.get(objclass,id);
return o;
}finally{
if(s!=null){
s.close();
}
}
}
八 关键字用反引号括起来 配置文件里
九Criteria查询方式
hql查询
static void query(String name)
Session s = null;
try{
s = HibernateUtil.getSession();
String hql = "from User as user where user.name=?";
Query query = s.createQuery(hql);
query.setString(0,name);
List<User> list = query.list();
//query.uniqueResult(); 返回object确定只有一个时候使用
//
for(User user:list){
System.out.println(user.getName);
}

}finally{
if(s!=null){
s.close();
}
}
}
Criteria 条件查询 更面向对象,官方推荐hql,因为功能更全面
static void query(String name)
Session s = null;
try{
s = HibernateUtil.getSession();
Criteria c = s.createCriteria(User.class);
c.add(Restrictions.eq("name",name));
c.add(Restrictions.lt("birthday",new Date()));
//分页
c.setFirstResult(0);
c.setMaxResults(10);
List<User> list = c.list();
//c.uniqueResult(); 返回object确定只有一个时候使用

for(User user:list){
System.out.println(user.getName);
}

}finally{
if(s!=null){
s.close();
}
}
}
十:
用hibernate访问数据操作
步骤:
1.设计类User
2.设计UserDao接口
3.加入hibernate.jar和其他依赖jar包
4.编写映射文件hbm,配置文件:必须参数 url name password 方言 driverclass hbm2ddl.auto mapping映射类
5工具类 获取session
6.实现接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值