/**
 * 按照 id 查询
 */
public void loadCustomer(){

 Session s = sf.openSession();
 Transaction tx = s.beginTransaction();

 Customer c = (Customer) s.load(Customer.class,1);

 System.out.println(c.getName());

        tx.commit();
 s.close();
}

/**
 *  更新
 */

public void update1(){

 Session s = sf.openSession();
 Transaction tx = s.beginTransaction();
       
        // 按照id 把客户信息 先查询出来
        Customer c = (Customer) s.load(Customer.class,1);
        // 设置值
 c.setName("jerry"); //注意在查询出来后,直接设置值,而不是通过session的update()方法更新。

         tx.commit();
  s.close();

}

update customers set name=?,age=? where id=?
------------------------------------------------------
public void update2(){

 Session s = sf.openSession();
 Transaction tx = s.beginTransaction();
       
      
        Customer c = new Customer();

 c.setId(3)
        s.update(c); //注意session 的update()方法只按照id更新,没有id就会报错

        tx.commit();
 s.close();

}
往表中添加了一条记录,这条记录的Id是3,其他的列都是NULL,因为在更新的时候没有设置这个对象的其他值
所以体现了面向对象的思想
---------------------------------------------------

接下来可是大家注意了,我们要说的就是传说中的hql语句 hibernate query language,oop!!!

/**
 * 使用hql 查询全部的客户信息
 */

@Test
public void findAllCustomer(){

Session s = sf.openSession();

String hql = "from Customer";

Query q = s.createQuery(hql); //到这还没有查询,返回值是一个Query类型

List<Customer> list = q.list();//到这句才开始查询,返回一个List

 for (Customer c : list){

 System.out.println(c.toString());

 }

  tx.commit();
  s.close();

}
运行之后 可以看出查询出来了所有的记录

-------------------------------------
/**
 *批量更新
 */
public void batchUpdate(){
Session s = sf.OpenSession();
Transaction tx = s.beginTransaction();

String hql = "update Customer c set c.age = 50";

s.createQuery(hql).executeUpdate(); //记住咯 Query 对象不仅能查询,还能做更新 executeUpdate()


  tx.commit();
  s.close();
}

------------------------------------
就不用细说删除了
Customer c = new Customer();
c.setId(3)

s.delete(c);//从表中删除id是3的记录 注意 delete() 也是根据id删除

//批量删除

String hql ="delete from Customer c where c.id >1";
s.createQuery(hql).executeUpdate();

问个问题?什么是hql ??Customer是类名还是表名?----类名

id 是属性名还是字段名?----属性名

------------------------------------
public class Customer{

private Integer id;
private String name;

private Integer age;

pirvate boolean married;

private Date birthday;

private byte[] photo;

private String description;

public boolean isMarried(){

 return married; 
}
public void setMarried(boolean married){

 this.marrid = married;
}

}
-----------------------------

create table customer(id int primary key,

name varchar(20) , age int,

married int,
birthday date,

photo longblob,二进制大对象

description text);

)

-----------------------------
映射文件

<property name="married" column ="married" type="boolean" />


<property name="birthday" column ="birthday" type="date" />


<property name="photo" column ="photo" type="binary" />


<property name="description" column ="description" type="text" />


注意的是 photo 在 表中的类型是 longblob,而在java 实体类中是byte[]

而在映射文件中是 binary

description 表中是 text类型,映射文件中是text, 而在类中是String

married 表中是 int,映射文件中是boolean,类中是boolean

--------------------------------------------
public void insert(){

Customer c = new Customer();
c.setMarried(true);

c.setbirthday(Date.valueof("1978-12-12");

String desc = "dsssssssssdfs";

c.setDescription(desc);

}
注意咯 我的married 在java类中定义成了boolean 类型了啊

当我c.setMarried(true);的时候,在数据库中表的数据类型是int类型

所以存的(被转换成)是1了

------------------------------------------

弦外音:转载请表明出处,要不然保留我追进法律责任的权利!!!

 

posted on 2012-09-20 23:50  曾小弦老师  阅读(918)  评论(0)    收藏  举报