首先建立数据库:
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';