Hibernate入门二(增删改查)

Hibernate的增删改查

  1. 增加
    增加有多种方式,save、persist、savaOrUpdate、merge。
    使用方法如下。
    这里的代码是续前节的
package test;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.Test;
import entity.User;
public class UserTest {
    @Test
    public void testSave() {
        Configuration configuration=new Configuration().configure(); // 实例化配置文件
        ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
        SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
        Session session=sessionFactory.openSession(); // 生成一个session
        session.beginTransaction(); // 开启事务

        User user = new User();
        user.setName("张三");
        user.setBirthDay(new Date(System.currentTimeMillis()));
        session.save(user);

        session.getTransaction().commit(); // 提交事务
        session.close(); // 关闭session
        sessionFactory.close(); // 关闭session工厂
    }

    @Test
    public void testMerge(){

            Configuration configuration=new Configuration().configure(); // 实例化配置文件
            ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
            SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
            Session session=sessionFactory.openSession(); // 生成一个session
            session.beginTransaction(); // 开启事务

            User user = new User();
            user.setName("张三");
            user.setBirthDay(new Date(System.currentTimeMillis()));
            session.merge(user);

            session.getTransaction().commit(); // 提交事务
            session.close(); // 关闭session
            sessionFactory.close(); // 关闭session工厂
    }

    @Test
    public void testPersist(){
        Configuration configuration=new Configuration().configure(); // 实例化配置文件
        ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
        SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
        Session session=sessionFactory.openSession(); // 生成一个session
        session.beginTransaction(); // 开启事务

        User user = new User();
        user.setName("张三");
        user.setBirthDay(new Date(System.currentTimeMillis()));
        session.persist(user);

        session.getTransaction().commit(); // 提交事务
        session.close(); // 关闭session
        sessionFactory.close(); // 关闭session工厂
    }
}

2.删除
删除一条记录使用delete
该代码段是在如上的类中增加的,所谓需要把这个段代码写入以上

@Test
    public void testDelete(){
        Configuration configuration=new Configuration().configure(); // 实例化配置文件
        ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
        SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
        Session session=sessionFactory.openSession(); // 生成一个session
        session.beginTransaction(); // 开启事务


        User user = new User();
        user.setId(2);
        //这样删除只能通过id来删除
        //user.setName("张三2");//该语句不能删除
        session.delete(user);

        session.getTransaction().commit(); // 提交事务
        session.close(); // 关闭session
        sessionFactory.close(); // 关闭session工厂
    }

3.修改
修改使用Update,SaveOrUpdate,merge方法
这里就不做代码的解析了,基本上都是Entity和session对象的使用。

4查询
查询的方式有多种
1)本地SQL查询
重点
String sql = “select * from t_user2 where id<:value”;
Query query = session.createSQLQuery(sql).addEntity(User.class);//这里如果不addEntity后面将无法使用
query.setInteger(“value”,4);

这里控制台打印的SQL语句为:
Hibernate: select * from t_user2 where id

@Test
    public void testSQLQuery(){
Configuration configuration=new Configuration().configure(); // 实例化配置文件
        ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
        SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
        Session session=sessionFactory.openSession(); // 生成一个session
        session.beginTransaction(); // 开启事务

        String sql = "select * from t_user2 where id<:value";
        Query query = session.createSQLQuery(sql).addEntity(User.class);
        query.setInteger("value", 4);
        List<User> list = query.list();
        for(User s:list){
            System.out.println(s);
        }
        session.getTransaction().commit(); // 提交事务
        session.close(); // 关闭session
        sessionFactory.close(); // 关闭session工厂
    }

2)HQL查询
形式上和SQL很类似

@Test
    public void testHQLQuery(){
        Configuration configuration=new Configuration().configure(); // 实例化配置文件
        ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
        SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
        Session session=sessionFactory.openSession(); // 生成一个session
        session.beginTransaction(); // 开启事务

        String hql = "from User where id<:value";
        Query query = session.createQuery(hql);
        query.setInteger("value", 4);
        List<User> list = query.list();
        for(User s:list){
            System.out.println(s);
        }
        session.getTransaction().commit(); // 提交事务
        session.close(); // 关闭session
        sessionFactory.close(); // 关闭session工厂
    }

分页和唯一值
分页的时候使用
query.setFirstResult(offset);
query.setMaxResults(length);
当确定我们查询查询值是唯一 的时候,query.uniqueResult()就可以返回唯一对象。

3)QBC查询
不多说,直接上代码,放在之前的类里使用JUnit执行就好了。

@Test
    public void testQBC(){
        Configuration configuration=new Configuration().configure(); // 实例化配置文件
        ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
        SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
        Session session=sessionFactory.openSession(); // 生成一个session
        session.beginTransaction(); // 开启事务

        Criteria criteria = session.createCriteria(User.class);
        List<User> list = criteria.list();
        for(User s:list){
            System.out.println(s);
        }


        session.getTransaction().commit(); // 提交事务
        session.close(); // 关闭session
        sessionFactory.close(); // 关闭session工厂
    }


    @Test
    public void testQBC2(){
        Configuration configuration=new Configuration().configure(); // 实例化配置文件
        ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
        SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
        Session session=sessionFactory.openSession(); // 生成一个session
        session.beginTransaction(); // 开启事务

        Criteria criteria = session.createCriteria(User.class);
        Criterion criterion = Restrictions.lt("id",4);
        criteria.addOrder(Order.desc("id"));
        criteria.add(criterion);
        List<User> list = criteria.list();
        for(User s:list){
            System.out.println(s);
        }


        session.getTransaction().commit(); // 提交事务
        session.close(); // 关闭session
        sessionFactory.close(); // 关闭session工厂
    }

更多查询细节请见详情

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值