java连接mysql 用hibernate怎么写查询语句

java连接mysql 用hibernate怎么写查询语句,第1张

第一种方式:HQL(Hibernate Query Languge,Hibernate 查询语言)查询

是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念,HQL 是应用较为广泛的方式

语法:[select/update/delete……] from Entity [where……] [group by……] [having……] [order by……]

(1).没使用Spring框架的写法

使用HQL需要四步

得到Session、编写HQL语句、创建Query对象(Query接口是HQL 查询接口。它提供了各种的查询功能)、执行查询,得到结果

sessionFactory =

new Configuration().configure().buildSessionFactory()

session = sessionFactory.openSession()

String hql = “from Street”

Query query = session.createQuery(hql)

List<Street>list = query.list()

(2).使用Spring框架的写法:

String queryString = "select form entity ...."

List list=getHibernateTemplate().find(queryString)

第二种方式:Criteria 查询

Criteria 查询采用面向对象方式封装查询条件,又称为对象查询;

就是对SQL 语句进行封装,采用对象的方式来组合各种查询条件

由Hibernate 自动产生SQL 查询语句

(1).没使用Spring框架的写法;

Criteria由Hibernate Session进行创建

SessionFactory sessionFactory = new Configuration().configure()

.buildSessionFactory()

Session session = sessionFactory.openSession()

Criteria criteria = session.createCriteria(User.class)

List result = criteria.list()

Iterator it = result.iterator()

(2)使用Spring框架的写法:

import org.hibernate.criterion.DetachedCriteria

DetachedCriteria criteria=DetachedCriteria.forClass(ObjectEntity.class)

criteria.add(Restrictions.eq("propertyName", propertyValue))

List result=getHibernateTemplate().findByCriteria(criteria)

第三种方式:使用SQL语句查询(以下都是使用了Spring框架的写法)

1).这是把执行结果放到了一个类里:(这个类通常使用VO实体,VO实体一般就只用来接收查询结果)

List list = getHibernateTemplate().executeFind(new HibernateCallback() {

public Object doInHibernate(Session session) throws HibernateException, SQLException {

StringBuffer hqlBuffer = new StringBuffer("")

hqlBuffer.append("select column_Name from ...")//里面是SQL语句

SQLQuery sqlQuery = session.createSQLQuery(hqlBuffer.toString())

sqlQuery.addScalar("propertyName",Hibernate.STRING)//该propertyName是ObjectVO实体的一个属性

sqlQuery.setResultTransformer(Transformers.aliasToBean(ObjectVO.class))

List list = sqlQuery.list()

return list//此处list集合中存放的是ObjectVO对象

}

})

2).返回结果放到list中的:

final String queryString = ""//sql语句

List resultList=getHibernateTemplate().executeFind(new HibernateCallback() {

public List doInHibernate(Session session) throws HibernateException, SQLException {

SQLQuery sqlQuery = session.createSQLQuery(queryString)

List list=sqlQuery.executeUpdate()

return list

}

})

3).无返回结果:

final String queryString = ""//SQL语句

getHibernateTemplate().executeFind(new HibernateCallback() {

public Object doInHibernate(Session session) throws HibernateException, SQLException {

SQLQuery sqlQuery = session.createSQLQuery(queryString)

sqlQuery.executeUpdate()

return null

}

})

你设个断点debug调试下,看查询出来的返回值有没有值,如果是null,那说明你的查询语句或者hibernate的配置文件有问题(多半是方言dialect配置有问题)。如果有值,那说明是你的获取方法有问题了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8709282.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存