Hibernate笔记之1第一课

首先建立数据库:
drop table person;
create table person
(
 id varchar(10) not null primary key,
 name varchar(20) not null,
 password varchar(10),
 sex varchar(2),
 email varchar(30)
);
commit;

package wjr.hibernate.demo01;

public class Person {
 private String id;
 private String name;
 private String password;
 private String sex;
 private String email;
 public String getEmail() {
  return email;
 }
 public void setEmail(String email) {
  this.email = email;
 }
 public String getId() {
  return id;
 }
 public void setId(String 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 getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
}

然后定义一个操作类:

package wjr.hibernate.demo01;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class PersonOperate {
 private Session session = null;
 
 public PersonOperate()
 {
  //首先要获取Session对象,因为hibernate中所有操作都是通过Session对象完成的。
  Configuration config  = new Configuration().configure();
  SessionFactory factory = config.buildSessionFactory();
  this.session = factory.openSession();
 }
 public void insert(Person p)
 {
  //注意Hibernate中的事务,默认是:autoCommit=false。所以所有增删该必须像下面这样显示调用Transaction。
  Transaction tran = this.session.beginTransaction();
  this.session.save(p);
  tran.commit();
  //Session通过SessionFactory打开,在所有工作完成之后需要关闭。
  this.session.close();
 }
 public void update(Person p)
 {
  //注意Hibernate中的事务,默认是:autoCommit=false。所以所有增删该必须像下面这样显示调用Transaction。
  Transaction tran = this.session.beginTransaction();
  this.session.update(p);
  tran.commit();
  //Session通过SessionFactory打开,在所有工作完成之后需要关闭。
  this.session.close();
 }
 //按ID查询
 public Person queryByLikeId(String id)
 {
  Person p = null;
  //使用Hibernate查询语句
  String hql = "from Person as p where p.id=?";
  //通过Query接口查询
  Query q = this.session.createQuery(hql);
  q.setString(0, id);
  List list = q.list();
  Iterator iter = list.iterator();
  if(iter.hasNext())
  {
   p=(Person) iter.next();
  }
  return p;
 }
 public List queryAll()
 {
  List l = null;
  String hql = "from Person as p";
  Query q = this.session.createQuery(hql);
  l = q.list();
  return l;
 }
 public void delete(Person p)
 {
  Transaction tran = this.session.beginTransaction();
  this.session.delete(p);
  tran.commit();
  this.session.close();
 }
 //在Hibernate3.0中根据hql指令增加了删除指令:
 public void delete(String id)
 {
  String hql = "delete Person where id=?";
  Query q = this.session.createQuery(hql);
  q.setString(0, id);
  q.executeUpdate();
  //注意Hibernate中的事务,默认是:autoCommit=false。所以所有增删该必须像下面这样显示调用Transaction。
  this.session.beginTransaction().commit();
  this.session.close();
 }
}

最后在写一个测试类:

package wjr.hibernate.demo01;

public class TestPerson {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
//  Person p = new Person();
//  p.setId("1288");
//  p.setName("霞妹妹");
//  p.setPassword("530");
//  p.setSex("女");
//  p.setEmail("xiaxia@yahoo.com");
  PersonOperate po = new PersonOperate();
//  po.update(p);
  
  //id查询:
  
  Person myP = po.queryByLikeId("1288");
  System.out.println(myP.getName());
 }
 
 
}


Session 不是线程安全的,她表示与数据库之间的一次操作。介于Connection和
Transaction之间。
Session也被称为持久化管理器,因为她是与持久化操作有关的接口。
Session通过SessionFactory打开,在所有工作完成之后需要关闭。
她与web层的HttpSession无任何关系。
一些HQL语句:
1.from Person p where (p.page/10=3);
2.from Person p where p.name is not null;
3.from Person p where p.name in('wjr','xiaxia');
4.from Person p order by p.age desc,p.name;
select p.sex,avg(p.age) from Person p group by p.sex;
select p.sex,avg(p.age) from Person p group by p.sex having avg(p.age)>23;
但是删除和更新HQL语句不会使用别名:
upate Person set name='wz' where name='wjr';
delete Person where age='20';

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值