Hibernate的Hql查询

 

实体类: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();

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值