/**
* 按照 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了
------------------------------------------
弦外音:转载请表明出处,要不然保留我追进法律责任的权利!!!
浙公网安备 33010602011771号