在hibernate中 只要引入 hibernate的相关jar包 那么我们就可以直接饮用hibernate的模板来调用hibernate的方法
增删改查的方法:
public List<User> findAllUsers() {
String hql = "from User u order by u.id asc";
List<User> list = this.getHibernateTemplate().find(hql);
return list;
}
public void removeUser(User user) {
this.getHibernateTemplate().delete(user);
}
public void updateUser(User user) {
this.getHibernateTemplate().update(user);
}
public User findUserById(int id) {
User user = null;
user = (User) this.getHibernateTemplate().get(User.class, id);
return user;
}
get方法和find方法都是直接从数据库中检索
而load方法的执行则比较复杂
■ 首先查找session的persistent Context中是否有缓存,如果有则直接返回
■ 如果没有则判断是否是lazy,如果不是直接访问数据库检索,查到记录返回,查不到抛出异常
■ 如果是lazy则需要建立代理对象,对象的initialized属性为false,target属性为null
■ 在访问获得的代理对象的属性时,检索数据库,如果找到记录则把该记录的对象复制到代理对象的target上,并将initialized=true,如果找不到就抛出异常。
查询方法: (hql语句,返回的都是一个list)
(1)根据某一个条件查询所有的信息
list<user> list = this.getHibernateTemplate().find(hql,value);
注意: 上面的value指的是查询的条件参数,有几个参数写几个参数,中间用逗号分隔开;
(2)查询所有的信息 query语句
通过Query接口进行参数填充:
Query query = session.createQuery("from TUser user where user.name=? and user.age>?");
query.setString(0,"Erica");
query.setInteger(1, 20);
(3)增加的方法用 session.save(user); session.getTransaction().commit();
(4)删除的方法 : User user=(User)session.load(User.class, "4028989545a244640145a24466300001"); 首先调用session.load(pojo.class,id)的方法查询
session.delete(user);
session.getTransaction().commit();
(5)修改的方法 User user=(User)session.load(User.class, "4028989545a244640145a24466300001");
session.update(user);
session.getTransaction().commit();
在hibernate中 获取session的方法: (最原始的方法,如果有框架模板封装,则不需要此方法)
Session对象是通过SessionFactory构建的,Hibernate有两种获取session的方式
1、getCurrentSession()获得与当前线程绑定的session
public class HibernateUtil {
//将sessionFactory设为静态,可以保证其整个应用程序中的唯一性
private static final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
private HibernateUtil(){}; //将构造方法设为似有,只能使用“类名+静态方法”的方式调用
/**
* 获取Session工厂
* @return SessionFactory
*/
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
/**
* 获取Session
* @return Session
*/
public static Session getSession(){
return sessionFactory.getCurrentSession();
}
2、openSession()打开一个新session
/**
* Hibernate的帮助类,用来获取Session
*
*/
public class HibernateUtils {
private static SessionFactory factory;
static{
try{
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
//建立SessionFactory
factory=cfg.buildSessionFactory();
}catch(Exception e){
e.printStackTrace();
}
}
//获得开启着的Session
public static Session getSession(){
return factory.openSession();
}
//关闭Session
public static void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
public static SessionFactory getSessionFactory(){
return factory;
}
}
3、使用注意事项
1)openSession和getCurrentSession的区别
openSession必须关闭,currentSession在事务结束后自动关闭
openSession没有和当前线程绑定,currentSession和当前线程绑定
增删改查的方法:
public List<User> findAllUsers() {
String hql = "from User u order by u.id asc";
List<User> list = this.getHibernateTemplate().find(hql);
return list;
}
public void removeUser(User user) {
this.getHibernateTemplate().delete(user);
}
public void updateUser(User user) {
this.getHibernateTemplate().update(user);
}
public User findUserById(int id) {
User user = null;
user = (User) this.getHibernateTemplate().get(User.class, id);
return user;
}
get方法和find方法都是直接从数据库中检索
而load方法的执行则比较复杂
■ 首先查找session的persistent Context中是否有缓存,如果有则直接返回
■ 如果没有则判断是否是lazy,如果不是直接访问数据库检索,查到记录返回,查不到抛出异常
■ 如果是lazy则需要建立代理对象,对象的initialized属性为false,target属性为null
■ 在访问获得的代理对象的属性时,检索数据库,如果找到记录则把该记录的对象复制到代理对象的target上,并将initialized=true,如果找不到就抛出异常。
查询方法: (hql语句,返回的都是一个list)
(1)根据某一个条件查询所有的信息
list<user> list = this.getHibernateTemplate().find(hql,value);
注意: 上面的value指的是查询的条件参数,有几个参数写几个参数,中间用逗号分隔开;
(2)查询所有的信息 query语句
通过Query接口进行参数填充:
Query query = session.createQuery("from TUser user where user.name=? and user.age>?");
query.setString(0,"Erica");
query.setInteger(1, 20);
(3)增加的方法用 session.save(user); session.getTransaction().commit();
(4)删除的方法 : User user=(User)session.load(User.class, "4028989545a244640145a24466300001"); 首先调用session.load(pojo.class,id)的方法查询
session.delete(user);
session.getTransaction().commit();
(5)修改的方法 User user=(User)session.load(User.class, "4028989545a244640145a24466300001");
session.update(user);
session.getTransaction().commit();
在hibernate中 获取session的方法: (最原始的方法,如果有框架模板封装,则不需要此方法)
Session对象是通过SessionFactory构建的,Hibernate有两种获取session的方式
1、getCurrentSession()获得与当前线程绑定的session
public class HibernateUtil {
//将sessionFactory设为静态,可以保证其整个应用程序中的唯一性
private static final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
private HibernateUtil(){}; //将构造方法设为似有,只能使用“类名+静态方法”的方式调用
/**
* 获取Session工厂
* @return SessionFactory
*/
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
/**
* 获取Session
* @return Session
*/
public static Session getSession(){
return sessionFactory.getCurrentSession();
}
2、openSession()打开一个新session
/**
* Hibernate的帮助类,用来获取Session
*
*/
public class HibernateUtils {
private static SessionFactory factory;
static{
try{
//读取hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
//建立SessionFactory
factory=cfg.buildSessionFactory();
}catch(Exception e){
e.printStackTrace();
}
}
//获得开启着的Session
public static Session getSession(){
return factory.openSession();
}
//关闭Session
public static void closeSession(Session session){
if(session!=null){
if(session.isOpen()){
session.close();
}
}
}
public static SessionFactory getSessionFactory(){
return factory;
}
}
3、使用注意事项
1)openSession和getCurrentSession的区别
openSession必须关闭,currentSession在事务结束后自动关闭
openSession没有和当前线程绑定,currentSession和当前线程绑定