Hibernate 笔记4 实现对数据库的增删改查

1  准备

 

首先在mysql数据库中建表User,并添加相关信息。

user表结构如下。

+-------+--------------+------+-----+---------+----------------+
| Field    | Type             |   Null |  Key |   Default |      Extra          |
+-------+--------------+------+-----+---------+----------------+
| id        | int(11)          | NO    | PRI   | NULL     | auto_increment |
| name   | varchar(255) | YES   |        | NULL     |                        |
| pwd     | varchar(255) | YES   |        | NULL     |                        |
+-------+--------------+------+-----+---------+----------------+

建立User类,添加set,get 方法。

使用hibernate对数据进行增删改差的步骤:

        1. 获得连接
        2. 开启事务
        3. 增删改查操作
        4. 提交事务
        5. 关闭连接

 

2  对数据进行添加(insert)

 

    插入操作使用 session.save(类对象)如上述代码14行所示。

    可以使用session.saveorupdate(类对象),由hibernate判断是添加还是更新。

 

 saveorupdate与sava的区别,以及saveorupdate的好处?

              save是返回插入数据的主见的,而saveOrUpdate是void

  save方法更适用与确定了是要插入,而且需要得到插入数据的主键而saveOrUpdate更倾向于不确定是插入还是更新,而且你不需要得到他的主键 

  另一方面,如果你无法确定你要插入或更新的对象是不是持久态或游离态时。如果你save一个持久态或更新一个游离态,这都是有问题的,

  此时你就要用到     saveOrUpdat

  总体来说,如果你能确定你即将操作对象的状态,则不需要用saveOrUpdate

 

 1 public void TestInsert() throws Exception{
2 User user= new User(); //初始化User
3 user.setId(1); //设置属性的数据
4 user.setName("蓝冰竹斋");
5 user.setPwd("123");
6
7 Configuration config=new Configuration().configure(); // 加载总配置文件
8 SessionFactory sessionFactory= config.buildSessionFactory(); // 建立工厂
9 Session session=null; //定义Session
10 Transaction tx=null; // 定义事务
11 try{
12 session=sessionFactory.openSession(); // 通过工厂建立连接
13 tx=session.beginTransaction(); // 通过连接开启事务
14 session.save(user); // 通过连接保存user
15 tx.commit(); // 提交
16
17 }catch(Exception e){
18 tx.rollback(); // 出现异常回滚
19
20 }finally{
21 if(session!=null){
22 session.close(); // 关闭连接
23 }
24 if(sessionFactory!=null){
25 sessionFactory.close(); // 关闭连接工厂
26 }
27 }
28 }

测试后打印出的语句:Hibernate: insert into user (name, pwd) values (?, ?)

 

3 对数据进行修改(update)

 

 修改操作使用session.save(类对象),根据表id知道要修改的对象。 如果id不存在,出现异常org.hibernate.StaleStateException

 如果某列不需要更新,需要在映射文件的相应<property>中加入 update="false",如不更新name,

 <propertyname="pwd" column="pwd"  update="false"></property>

  更新时需要将表中所有字段数据进行设置,不设置的字段,其值默认为null.

 可以使用session.saveorupdate(类对象),由hibernate判断是添加还是更新。

 

public void TestUpdate() throws Exception{
User user= new User();
user.setId(1);
user.setName("蓝冰"); //对name进行了修改
user.setPwd("1321121"); //对pwd进行了修改

Configuration config=new Configuration().configure();
SessionFactory sessionFactory= config.buildSessionFactory();
Session session=null;
Transaction tx=null;
try{
session=sessionFactory.openSession();
tx=session.beginTransaction();
session.update(user); //修改数据
tx.commit();

}catch(Exception e){
tx.rollback();

}finally{
if(session!=null){
session.close();
}
if(sessionFactory!=null){
sessionFactory.close();
}
}
}

Hibernate: update user set name=?, pwd=? where id=?

 

4 删除数据(deleted)

 

修改操作使用session.delete(类对象)

注意,只能通过id来删除数据,不能通过title或content来删除,会报缺少标示符错误。

public void TestDelete() throws Exception{
User user= new User();
user.setId(1);
user.setName("蓝冰竹斋1"); //根据ID删除,设置其他属性不起作用
user.setPwd("1321121");

Configuration config=new Configuration().configure();
SessionFactory sessionFactory= config.buildSessionFactory();
Session session=null;
Transaction tx=null;
try{
session=sessionFactory.openSession();
tx=session.beginTransaction();
session.delete(user); //删除数据
tx.commit();

}catch(Exception e){
tx.rollback();

}finally{
if(session!=null){
session.close();
}
if(sessionFactory!=null){
sessionFactory.close();
}
}
}


Hibernate: delete from user where id=?

 


5 查询数据(select)

 

通过ID进行查询。

查询有两种方式,1 session.get(类.class,id);

                      2 session.load(类.class,id);

                            类名.class 返回这个类的Class类型对象

load 支持懒加载,既使用对象时才执行。调用getID()  和 getclass()两个方法不执行。

两者的区别会在后面详细说明。

public void TestSelect() throws Exception{
User user1=null; // 用户1,使用get方法查询
User user2=null; // 用户2,使用load方法查询

Configuration config=new Configuration().configure();
SessionFactory sessionFactory= config.buildSessionFactory();
Session session=null;
Transaction tx=null;
try{
session=sessionFactory.openSession();
tx=session.beginTransaction();
user1=(User) session.get(User.class, 3); //用户1 get查询 get方法中第一个字段是查询的类.class,第二个参数是id
            user2=(User) session.load(User.class, 3);   //用户2  load查询   参数同上

System.out.println(user1.getName()+"user1用户");
System.out.println(user2.getPwd()+"user2用户");
tx.commit();

}catch(Exception e){
tx.rollback();

}finally{
if(session!=null){
session.close();
}
if(sessionFactory!=null){
sessionFactory.close();
}
}
}

Hibernate: select user0_.id as id0_0_, user0_.name as name0_0_, user0_.pwd as pwd0_0_ from user user0_ where user0_.id=?

posted @ 2011-11-03 18:25  蓝冰竹斋  阅读(10790)  评论(0编辑  收藏  举报