hibernate汇总

package com.bjpowernode.hibernate;  
  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.cfg.Configuration;  
  
public class HibernateUtils {  
      
    private static SessionFactory factory;  
  
    //static只初始化一次.  
    static  
    {  
        try{  
        //默认读取的是hibernate.cfg.xml 文件.  
                Configuration cfg = new Configuration().configure();  
                  
                //建立SessionFactory.  
                factory = cfg.buildSessionFactory();  
      
        }catch(Exception e )  
        {  
            e.printStackTrace();  
        }  
    }  
      
    public static Session getSession()  
    {  
        //打开session.  
        return factory.openSession();  
    }  
      
    //关闭session.  
    public static void closeSession(Session session)  
    {  
        //判断是否为空.  
        //判断是否是打开状态再进行关闭.  
          
        if(session!=null)  
        {  
            if(session.isOpen())  
            {  
                session.close();  
            }  
        }  
    }  
      
    //返回工厂类.  
    public static SessionFactory getSessionFactory()  
    {  
        return factory;  
    }  
}  

session的增删改查:

增:

session.save(user);

删:

session.delete(user);

改:

session.update(user);

查:

Queryquery = session.createQuery("from User");

ListuserList = query.list();

hibernate使用sql查询:

注意newHibernateCallback<Integer>()中的类型跟内部类返回值类型一致


    public List<Object[]> getRoles(){   
        return getHibernateTemplate().executeFind(new HibernateCallback(){   
            public Object doInHibernate(Session session)   
                    throws HibernateException, SQLException {              
                Query q = session.createSQLQuery("select Role_Id, RoleDescription, RoleName from dbo.Role");               
                return q.list();   
            }              
        });   
    }  

    /**
     * 标记公告已读
     * @param userId
     * @param noticeId
     * @return
     */
    public Integer markReadOver(final int userId,final int noticeId){
        final String sql_update_info="update REL_NOTICE_USERINFO set READ_OVER=? where NOTICE_ID=? and USER_ID=?";

        return getHibernateTemplate().execute(new HibernateCallback<Integer>()
        {
            @Override
            public Integer doInHibernate(Session session) throws HibernateException,
                    SQLException
            {
                int count=session.createSQLQuery(sql_update_info)
                            .setInteger(0, 1)
                            .setInteger(1, noticeId)
                            .setInteger(2, userId)
                            .executeUpdate();

                return count;
            }
        });
    }



hibernate中sql参数绑定:

1.参数名称前面的冒号表示这是一个具名参数。

    String queryString = "from Item item where item.description like :search"; 
uery q = session.createQuery(queryString).setString("search",searchString); 
2.定位参数

    String queryString = "from Item item where item.description like ? and item.date > ?";
    Query q = session.createQuery(queryString).setString(0,searchString).setDate(1,minDate); 

绑定参数位置的每一个变化都需要改变参数绑定代码,这样就产生了易碎和更需要维护的代码,建议避免使用定位

参数。如果必须使用定位参数,要记住hibernate是从0开始计数(JPA是从1开始记数);


3.查询有外键关联的表中的信息:

/**
 * 查询未批阅的用户
 * @param readOver
 * @return
 */
public List<RelNoticeUserInfo> selectUserInfoByParam(final int readOver,final int noticeId){
    return getHibernateTemplate().execute(new HibernateCallback<List<RelNoticeUserInfo>>()
    {
        @Override
        public List<RelNoticeUserInfo> doInHibernate(Session session) throws HibernateException,
                SQLException
        {
            Criteria cri = session.createCriteria(RelNoticeUserInfo.class);
            cri.add(Expression.eq("readOver", readOver));
            cri.createAlias("eduNotice", "e");  //根据id查询关联表中所有信息
            cri.add(Restrictions.eq("e.noticeId",noticeId));
            List<RelNoticeUserInfo> resultList= cri.list();
            return resultList;
        }
    });
}
4、hibernate查询不区分大小写 HQL Criteria
如果是使用HQL,可以使用lower或者upper函数来实现 

例1:from User u where lower(u.username)=lower(’Mp3′) 

 这样就可以查出来mp3,mP3等用户了! 

例2:String hql = "select distinct userName from User where upper(userName) like upper('%" + userName + "%')";


如果使用Criteria,首先使用Restrictions创建Criterion 

如果是字符串相等匹配Restrictions.eq(’username’,'mp3′).ignoreCase()

如果是字符串模糊匹配Restrictions.ilike(’username’,'mp3′)或者Restrictions.like(’username’,'mp3′).ignoreCase()
5、sql与hql的区别:
sql 面向数据库表查询
hql 面向对象查询
hql : from 后面跟的 类名+类对象 where 后 用 对象的属性做条件  
       并且hql(前面提到它是OO的)中那么对象类的名称和属性确实大小写敏感的(符合java编程语法)。 
sql: from 后面跟的是表名 where 后 用表中字段做条件
查询
在Hibernate中使用查询时,一般使用Hql查询语句。
HQL(Hibernate Query Language),即Hibernate的查询语言跟SQL非常相像。不过HQL与SQL的最根本的区别,就是它是面向对象的。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值