hibernate 的sql语句以及hql语句增删改查

写一个关于hibernate的sql和hql语句实现增删改查,**注意:**hibernate的hql语句是不能实现insert的,所以和我一样有强迫症的一定要把这两者写在一起比较的不要纠结了。
至于原因:因为Hibernate的HQL语言是用于面向对象实现查询功能的,然而在插入操作中是不会牵涉任何查询动作的,所以HQL不能用于insert语句的插入操作。

实体类我就不上传了,就涉及两个,Category和Meg两个实体
hql与sql的区别
sql 面向数据库表查询
hql 面向对象查询
hql : from 后面跟的 类名+类对象 where 后 用 对象的属性做条件
sql: from 后面跟的是表名 where 后 用表中字段做条件查询
一定要注意语句中的表名和类对象不要能混了。

获取sessionfactory的util类

package com.java.Test;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
public class HibernateUtil {

    private static SessionFactory sessionFactory = null;

    public static SessionFactory getSessionFactory(){
        if(sessionFactory==null) {
        Configuration config = new Configuration();
        sessionFactory = config.configure().buildSessionFactory();
        }
        return sessionFactory;
    }
}

测试类,使用Junit

package com.java.Test;

import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.junit.Test;

import com.java.entiry.Category;
import com.java.entiry.Meg;
import com.java.entiry.Topic;

public class Testquery {
    @Test
    public void testSave() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        for (int i = 0; i < 10; i++) {
            Category c = new Category();
            c.setName("c" + i);
            session.save(c);
        }
        for (int i = 0; i < 10; i++) {
            Category c = new Category();
            c.setId(1);
            Topic t = new Topic();
            t.setCategory(c);
            t.setName("t" + i);
            t.setCreateDate(new Date());
            session.save(t);
        }
        for (int i = 0; i < 10; i++) {
            Topic t = new Topic();
            t.setId(1);
            Meg m = new Meg();
            m.setCont("m" + i);
            m.setTopic(t);
            session.save(m);
        }
        session.getTransaction().commit();

    }

    // 通过hql语句方式来进行查询
    @Test
    public void testquerybyhql() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        String hql = "from Category c where c.name>'c5'";
        Query q = session.createQuery(hql);
        List<Category> lists = q.list();
        for (Category category : lists) {
            System.out.println(category.getName());
        }
    }

    // 通过sql语句方式来进行查询
    @Test
    public void testquerybysql() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        String sql = "select * from category c where c.name>'c5' ";
        SQLQuery query = session.createSQLQuery(sql).addEntity(Category.class);// 记得要加上这个
        List<Category> lists = query.list();
        for (Category category : lists) {
            System.out.println(category.getName());
        }

    }

    // 使用hql 更新
    @Test
    public void testupdate() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        String hql = "update Category set name=:name where id=:id";
        session.createQuery(hql).setParameter("name", "sss").setParameter("id", 1).executeUpdate();
        session.getTransaction().commit();
    }

    // 使用sql 更新
    @Test
    public void testupdate1() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        String sql = "update category set name=:name where id=:id";
        session.beginTransaction();
        session.createSQLQuery(sql).setParameter("name", "sql").setParameter("id", 2).executeUpdate();
        session.getTransaction().commit();
    }

    @Test
    // delete by hql
    public void testdelete() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        String hql = "delete Meg where id=?";
        session.createQuery(hql).setInteger(0, 1).executeUpdate();
        session.getTransaction().commit();
    }

    @Test
    // delete by sql
    public void testdelete1() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        String sql = "delete from meg where id=:id";
        session.createSQLQuery(sql).setParameter("id", 2).executeUpdate();
        session.getTransaction().commit();
    }

    // test insert by sql
    @Test
    public void testinsert() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        String sql = "insert into meg(cont,topic_id) values(?,?)";
        session.createSQLQuery(sql).setParameter(0, "m10").setParameter(1, 1).executeUpdate();
        session.getTransaction().commit();
    }
    // test insert by hql 无法实现

    @Test
    public void testlazy() {
        // 设定fetch type 为lazy后将不会有第二条sql语句
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query q = session.createQuery("from Topic t where t.category.id = 1");
        List<Topic> topics = (List<Topic>) q.list();
        for (Topic t : topics) {
            System.out.println(t.getName());
             //System.out.println(t.getCategory().getName());
        }
    }
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值