实体类:User.java
package com.hibernateHql;
public class User {
private int id;
private String name;
private String sex;
private int age;
public User(){
}
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
配置文件:User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.hibernateHql.User">
<id name="id">
<generator class="identity"/>
</id>
<property name="name"/>
<property name="sex"/>
<property type="int" name="age"/>
</class>
</hibernate-mapping>
Hibernate的配置文件:hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_hql</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<mapping resource="com/hibernateHql/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
生成表的ExportDB.java
package com.hibernateHql;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class ExportDB {
/**
* @param args
*/
public static void main(String[] args) {
Configuration cfg=new Configuration().configure();
SchemaExport export=new SchemaExport(cfg);
export.create(true, true);
}
}
// 工具类HibernateUnit
package com.hibernateHql;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUnit {
private static SessionFactory factory;
static{
try {
Configuration cfg=new Configuration().configure();
factory=cfg.buildSessionFactory();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Session getsession(){
return factory.openSession();
};
}
Junit的测试类:
package com.hibernateHql;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import junit.framework.TestCase;
public class TestSet extends TestCase{
public void savetest(){
Session session=HibernateUnit.getsession();
User users1=new User();
users1.setName("jiangfei");
users1.setAge(19);
users1.setSex("女");
User users2=new User();
users2.setName("huangnan");
users2.setAge(20);
users2.setSex("man");
User users3=new User();
users3.setName("包云飞");
users3.setAge(19);
users3.setSex("man");
User users4=new User();
users4.setName("wushuang");
users4.setAge(19);
users4.setSex("girl");
session.save(users1);
session.save(users2);
session.save(users3);
session.save(users4);
session.beginTransaction().commit();
session.close();
}
public void savetest2(){
Session session=HibernateUnit.getsession();
for(int i=0;i<20;i++){
User user=new User();
user.setName("jiangfei"+i);
user.setSex("sex"+i);
user.setAge(i);
session.save(user);
}
session.beginTransaction().commit();
session.close();
}
//单个属性的查询
public void queryHql(){
Session session=HibernateUnit.getsession();
Query query=session.createQuery("select name from User");
List users=query.list();
Iterator it=users.iterator();
while (it.hasNext()) {
String name=(String) it.next();
System.out.println(name);
}
session.beginTransaction().commit();
}
//多个属性查询
public void queryHql_many(){
Session session=HibernateUnit.getsession();
/*/查询的User对象的id,name,age 又重新组成一个新的User对象,如果查询的属性不是一个,则对查询的
*
* 进行封装,也就是在User的实例实例里面添加一个构造方法public User(id,name,age){}
* 默认的构造方法也写上所以查询得到的对象就是User
*/
Query query=session.createQuery("select new User(id,name,age) from User");
List users=query.list();
Iterator it=users.iterator();
while (it.hasNext()) {
User user=(User) it.next();
System.out.println(user.getId());
System.out.println(user.getName());
System.out.println(user.getAge());
}
session.beginTransaction().commit();
}
//给实例区别名进行查询
//多个属性查询
public void queryHql_As(){
Session session=HibernateUnit.getsession();
//给User 实例区别名为 u
Query query=session.createQuery("select u from User u");
List users=query.list();
Iterator it=users.iterator();
while (it.hasNext()) {
User user=(User) it.next();
System.out.print(user.getId()+"/t");
System.out.print(user.getName()+"/t");
System.out.print(user.getSex()+"/t");
System.out.print(user.getAge()+"/n");
}
session.beginTransaction().commit();
}
//多条数据查询
public void manyQuery_iterate(){
Session session=HibernateUnit.getsession();
//从数据得到的数据只有一条,一级缓存中只有一条数据,每次输出就会再次向数据库中发送sql语句 也就出现N+1的问题
Iterator<User> users=session.createQuery("from User").iterate();
while (users.hasNext()) {
User user=users.next();
System.out.print(user.getId()+"/t");
System.out.print(user.getName()+"/t");
System.out.print(user.getSex()+"/t");
System.out.print(user.getAge()+"/n");
}
session.beginTransaction().commit();
session.close();
}
// 解决N+1的问题list把取到的数据放在一级缓存中 查询数据时不用再向数据库发送Sql语句
public void manyQuery_list(){
Session session=HibernateUnit.getsession();
//从数据得到的数据只有一条,一级缓存中只有一条数据,每次输出就会再次向数据库中发送sql语句 也就出现N+1的问题
List<User> userlist=session.createQuery("from User").list();
Iterator<User> users=userlist.iterator();
// Iterator<User> users=session.createQuery("from User").iterate();
while (users.hasNext()) {
User user=users.next();
System.out.print(user.getId()+"/t");
System.out.print(user.getName()+"/t");
System.out.print(user.getSex()+"/t");
System.out.print(user.getAge()+"/n");
}
session.beginTransaction().commit();
session.close();
}
}