一。Hibernate的基础查询
1.对象导航查询
2.hql查询
3.hql条件查询
4.hql模糊查询
5.hql排序查询
6.hql分页查询
7.hql投影查询
8.hql记录数查询
9.hibernate对sql的支持
这些基本查询讲完以后够基本用的,下一期作者会讲一下Hibernate的高级查询。
二。Hibernate配置文件
(1)People.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.ies.entity.People" table="t_people">
<id name="pid" column="pid">
<generator class="native"></generator>
</id>
<property name="pname" column="pname"></property>
<property name="page" column="page"></property>
<set name="setCar" cascade="save-update,delete">
<!-- 一对多,有外键,
hibernate机制:双向维护外键,在一和多那一方都配置外键
key的column属性表示外键名称
-->
<key column="pid"></key>
<one-to-many class="com.ies.entity.Car"/>
</set>
</class>
</hibernate-mapping>
(2).Car.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.ies.entity.Car" table="t_car">
<id name="cid" column="cid">
<generator class="native"></generator>
</id>
<property name="cname" column="cname"></property>
<property name="cage" column="cage"></property>
<!-- name:少的一方在多的一方类中的表示
column:外键
class:外键所指的类名
-->
<many-to-one name="people" column="pid" class="com.ies.entity.People"></many-to-one>
</class>
</hibernate-mapping>
(3)src/hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 1数据库信息 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///mydb3</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">000000</property>
<!-- 2.hibernate 其他配置-->
<!-- 配置事务的隔离级别 -->
<property name="hibernate.connection.isolation">4</property>
<!-- 显示底层sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 输出底层sql语句格式 -->
<property name="hibernate.format_sql">true</property>
<!-- hibernate会自动创建表
update:若表存在则更新,没有则创建
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置数据库方言,做分页的时候会使用到
让hibernate框架识别不同的数据库
方言一定要写成这样不能修改其他的 否则无法创建表
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- 配置 Session 绑定本地线程 -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 引入配置文件 -->
<mapping resource="com/ies/entity/Car.hbm.xml"/>
<mapping resource="com/ies/entity/People.hbm.xml"/>
</session-factory>
</hibernate-configuration>
三。Hibernate配置文件对应实体类
(1)People.java
package com.ies.entity;
import java.util.HashSet;
import java.util.Set;
/*
* people
*/
public class People {
private Integer pid;
private String pname;
private String page;
private Set<Car> setCar = new HashSet<>();
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public Set<Car> getSetCar() {
return setCar;
}
public void setSetCar(Set<Car> setCar) {
this.setCar = setCar;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
@Override
public String toString() {
return "People [pid=" + pid + ", pname=" + pname + ", page=" + page + "]";
}
}
(2)Car.java
package com.ies.entity;
/*
* animal
*/
public class Car {
private Integer cid;
private String cname;
private String cage;
private People people;
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getCage() {
return cage;
}
public void setCage(String cage) {
this.cage = cage;
}
public People getPeople() {
return people;
}
public void setPeople(People people) {
this.people = people;
}
@Override
public String toString() {
return "Car [cname=" + cname + ", cage=" + cage + "]";
}
}
四。查询Demo
HibernateUtil.java
获取sessionFactory和session对象。
package com.ies.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory = null;
static {
Configuration cfg = new Configuration();
cfg.configure();
/**
* 创建session的对象
* 读取核心配置文件的内容。
* 会根据映射关系,在数据库里把表创建
*/
sessionFactory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session openSession() {
return sessionFactory.openSession();
}
public static Session currentSession() {
return sessionFactory.getCurrentSession();
}
public static void main(String[] args) {
}
}
1.对象导航查询
package com.ies.test;
import java.util.List;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.persister.collection.ElementPropertyMapping;
import org.hibernate.query.Query;
import org.junit.Test;
import com.ies.entity.Car;
import com.ies.entity.People;
import com.ies.util.HibernateUtil;
import com.sun.org.apache.xml.internal.resolver.helpers.PublicId;
import sun.security.x509.PrivateKeyUsageExtension;
public class HqlQueryDemo {
private SessionFactory sessionFactory = null;
private Session session = null;
private Transaction transaction = null;
/*
* 对象导航查询=====================================
*/
@Test
public void testSelect() {
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
People people = session.get(People.class, 5);
Set<Car> cars = people.getSetCar();
for (Car car : cars) {
System.out.println(car.toString());
}
People people2 = session.load(People.class, 5);
Set<Car> cars2 = people2.getSetCar();
for (Car car : cars2) {
System.out.println(car.toString());
}
transaction.commit();
}catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}finally {
session.close();
sessionFactory.close();
}
}
}
2.hql查询
/*
* ================hql=================查询
*/
@Test
public void testHql() {
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
String hql = "FROM People";
Query query = session.createQuery(hql);
List<People> list = query.list();
for (People people : list) {
System.out.println(people.toString());
}
transaction.commit();
}catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}finally {
session.close();
sessionFactory.close();
}
}
3.条件查寻
/*
*条件查寻
*/
@Test
public void testHqlWithConditions() {
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
String hql = "";
//hibernate4.x的jar才可以这样写
hql = "FROM People where pid = ?1";
Query query = session.createQuery(hql);
query.setParameter(1, 3);
List<People> list = query.list();
for (People people : list) {
System.out.println(people.toString());
}
transaction.commit();
}catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}
}
4. hql模糊查询
/*
* hql =======模糊查询=====
*/
@Test
public void testHqlWithConditions2() {
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
String hql = "FROM People where pname like ?1";
Query query = session.createQuery(hql);
query.setParameter(1, "%t%");
List<People> list = query.list();
for (People people : list) {
System.out.println(people.toString());
}
transaction.commit();
}catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}finally {
session.close();
sessionFactory.close();
}
}
5.hql排序查询
/*
* 排序查询
*/
@Test
public void testHqlInOrder() {
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
String hql="From People order by pid desc";
Query query = session.createQuery(hql);
List<People> list = query.list();
for (People people : list) {
System.out.println(people.toString());
}
transaction.commit();
}catch (Exception e) {
e.printStackTrace();
}finally {
session.close();
sessionFactory.close();
}
}
6.hql分页查询
/*
* 投影查询
*/
@Test
public void testHqlInPortion() {
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
String hql = "SELECT pid,pname FROM People";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for (Object[] objects : list) {
System.out.println(objects[0]+"="+objects[1]);
}
transaction.commit();
}catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}finally {
session.close();
sessionFactory.close();
}
}
7.投影查询,即对象部分属性查询
/*
* 投影查询
*/
@Test
public void testHqlInPortion() {
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
String hql = "SELECT pid,pname FROM People";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for (Object[] objects : list) {
System.out.println(objects[0]+"="+objects[1]);
}
transaction.commit();
}catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}finally {
session.close();
sessionFactory.close();
}
}
8.hql查询记录数
/*
* 查询记录数
*/
@Test
public void testHqlCount() {
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
String hql = "SELECT COUNT(pid) FROM People";
Query query = session.createQuery(hql);
Object object = query.uniqueResult();
long l = (long)object;
int count = (int)l;
System.out.println("记录数:"+count);
transaction.commit();
}catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}finally {
session.close();
sessionFactory.close();
}
}
9.hibernate对sql的支持
/*
*
*/
@Test
public void testSql() {
try {
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
String sql = "select * from t_people";
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.addEntity(People.class);
List<People> list = sqlQuery.list();
for (People person : list) {
System.out.println(person.toString());
}
transaction.commit();
}catch (Exception e) {
transaction.rollback();
e.printStackTrace();
}finally {
session.close();
sessionFactory.close();
}
}
这一期的查询暂时先到这,如有什么疑问请联系作者