我知道有些人可能会简单地回答这个问题"为什么你不仅仅是谷歌" ...但是我做了,我研究的越多,我就越困惑。我试图用Hibernate查询我的数据库,查询中有一个'其中'条款。
现在创建一个数据库条目很容易,如果我有一个用户'我只是这样做:
// Gets a new session
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
// Creates a new User object
User user = new User("John", "p@55w0rd*", "john@doe.com");
// Save and commit
session.save(user);
session.getTransaction().commit();
但是当我以什么为例时我该怎么做
从id =' 3';
的用户中选择*
我的谷歌搜索指向了一个名为HQL的东西,这让我想知道为什么我不能直接使用直接JDBC。它似乎也不是面向对象的。然后有类似
的东西session.createCriteria(.......
但我不确定如何使用这个..有什么帮助吗?谢谢你们。
答案 0 :(得分:2)
当你使用Native Query(非HQL)时,你需要明确地告诉hibernate处理它,如下所示:
在下面的查询 createSQLQuery 是处理本机sql的特殊功能
String sql = "SELECT * FROM EMPLOYEE WHERE id = :employee_id";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(User.class);
query.setParameter("employee_id", 3);
List<User> results = query.list();
这可以使用标准来完成,以下是良好的起点:
Criteria criteria = sess.createCriteria( User.class);
List<User> users= criteria.list();
http://www.developerhelpway.com/framework/hibernate/criteria/index.php
答案 1 :(得分:0)
首先,您需要一个包含hibernate属性的hibernate.cfg.xml。这是例如网址,用户名和密码,驱动程序和方言。此文件放在名为resources的包中。
您必须在使用Hibernate Annotations example
之间进行选择或使用hbm.xml文件example
这就是你如何告诉hibernate你的数据库是什么样的。它将根据您在例如user.hbm.xml中注释或定义的方式自动为您创建查询。
创建一个包含会话工厂的HibernateUtil.java类。
您可以使用
从数据库中获取数据Criteria crit = getSessionFactory().getCurrentSession().createCriteria(User.class);
使用查询的示例:
List<?> hibTuppleResultList = currentSession.createQuery(
"from Person p, Employment e "
+ "where e.orgno like ? and p.ssn = e.ssn and p"
+ ".bankno = ?")
.setString(0, orgNo).setString(1, bankNo).list();
for (Object aHibTuppleResultList : hibTuppleResultList)
{
Object[] tuple = (Object[]) aHibTuppleResultList;
Person person = (Person) tuple[0];
hibList.add(person);
}
答案 2 :(得分:0)
Query q = session.createQuery("from User as u where u.id = :u.id");
q.setString("id", "3");
List result = q.list();
使用条件查询:
Criteria cr = session.createCriteria(User.class);
List results = cr.list();
对条件的限制:
Criteria cr = session.createCriteria(User.class);
cr.add(Restrictions.eq("id", 3));
// You can add as many as Restrictions as per your requirement
List results = cr.list();
您也可以像这样使用
List results = session.createCriteria(User.class).add(Restrictions.eq("id", 3)).list();
Crieteria Rsetriction查询的一些示例
Criteria cr = session.createCriteria(Employee.class);
// To get records having salary more than 2000
cr.add(Restrictions.gt("salary", 2000));
// To get records having salary less than 2000
cr.add(Restrictions.lt("salary", 2000));
// To get records having fistName starting with zara cr.add(Restrictions.like("firstName", "zara%"));
// Case sensitive form of the above restriction.
cr.add(Restrictions.ilike("firstName", "zara%"));
// To get records having salary in between 1000 and 2000
cr.add(Restrictions.between("salary", 1000, 2000));
// To check if the given property is null
cr.add(Restrictions.isNull("salary"));
// To check if the given property is not null
cr.add(Restrictions.isNotNull("salary"));
// To check if the given property is empty
cr.add(Restrictions.isEmpty("salary"));
// To check if the given property is not empty
cr.add(Restrictions.isNotEmpty("salary"));
您可以使用LogicalExpression限制创建AND或OR条件,如下所示:
Criteria cr = session.createCriteria(Employee.class);
Criterion salary = Restrictions.gt("salary", 2000);
Criterion name = Restrictions.ilike("firstNname","zara%");
// To get records matching with OR condistions
LogicalExpression orExp = Restrictions.or(salary, name);
cr.add( orExp );
// To get records matching with AND condistions
LogicalExpression andExp = Restrictions.and(salary, name);
cr.add( andExp );
List results = cr.list();
我认为这会对你有帮助
答案 3 :(得分:0)
最后,我真正想知道的是,如果你不想使用HQL,你会得到一些名为“条件查询”的东西,在我的情况下,我会这样做像这样的东西:
Criteria cr = session.createCriteria(User);
cr.add(Restrictions.eq("id", 3));
List results = cr.list();
我:&#34;谢谢!&#34; 我:&#34;没问题:)&#34;
PS - 我们真的可以删除这个问题。