hibernate常用的Api

187 阅读2分钟

Session

获取session

//不同的组合框架获取SessionFactory的方式不同,但是不影响其他使用
SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
Session session = sessionFactory.openSession();

开启事务和提交事务

//这里需要注意的是开启和提交事务如果交给Spring,那么这个开启和提交就可以省略了
Transaction transaction = session.beginTransaction();
...
transaction.commit();

增删改查

添加方法

Session session = sessionFactory.openSession();
//开启事务 (如果交给spring管理事务将省略这个代码)
Transaction transaction = session.beginTransaction();
//添加方法
session.save(new User(null,"zhangsan","123456"));
//提交事务(如果交给spring管理事务将省略这个代码)
transaction.commit();

删除方法

Session session = sessionFactory.openSession();
//开启事务(如果交给spring管理事务将省略这个代码)
Transaction transaction = session.beginTransaction();
//删除user表id为1的方法
session.delete(new User(1,null,null));
//提交事务(如果交给spring管理事务将省略这个代码)
transaction.commit();

修改方法

Session session = sessionFactory.openSession();
//开启事务(如果交给spring管理事务将省略这个代码)
Transaction transaction = session.beginTransaction();
//修改user表id为1的,把用户信息改为新的数据,这里id作为条件
session.update(new User(1,"新用户名","新密码"));
//提交事务(如果交给spring管理事务将省略这个代码)
transaction.commit();

查询单条记录

Session session = sessionFactory.openSession();
//查询id为1的用户
User user = session.get(User.class, 1);

Query使用方法

query使用前准备工作

创建数据库表语句

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL auto_increment,
  `password01` varchar(10) default NULL,
  `username01` varchar(255) default NULL,
  `name` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) 

INSERT INTO `t_user` VALUES ('2', '123456', 'zhangsan', 'asdasdxdadysfsdz');
INSERT INTO `t_user` VALUES ('10', '13', '123', 's');

User类

package com.po;

import javax.persistence.*;
import java.io.Serializable;
@Entity//告诉hibernate 这个类是映射
@Table(name = "t_user")   //映射的表示t_user
public class User implements Serializable {
    @GeneratedValue(strategy = GenerationType.IDENTITY) //id生成策略是自增长
    @Id //主键
    private Integer id;

    @Column(name = "username01")
    private String username;

    @Column(name = "password01",length = 10)
    private String password;


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public User() {
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

query查询多个user对象

SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
Session session = sessionFactory.openSession();
/*
这里是hql语句不是sql语句 hql语句操作的是对象,sql语句操作的是表
这里from和sql的from是一个意思 User不是表名是映射类的类名
*/
String hql = "from User"; 
Query query = session.createQuery(hql);
List<User> list = query.list();

list.forEach(user ->{
    System.out.println(user.getId()+"  "+user.getUsername()+"  "+user.getPassword());
});

query查询多个Object数组

SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
Session session = sessionFactory.openSession();
//只要是带select的语句那么查询出来的就是数组,它把一条记录的数据存到一个Object数组里面了
Query query = session.createQuery("select id,username,password from User");


List<Object[]> list = query.list();

list.forEach(objectarr ->{
    System.out.println
            ("用户id:"+objectarr[0]+"  用户名:"+objectarr[1]+"  密码:"+objectarr[2]);
});

query占位符

SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
Session session = sessionFactory.openSession();
//只要是带select的语句那么查询出来的就是数组,它把一条记录的数据存到一个Object数组里面了
Query query = session.createQuery
    ("select id,username,password from User where id = :id");
query.setParameter("id",1);

List<Object[]> list = query.list();
list.forEach(objectarr ->{
    System.out.println
            ("用户id:"+objectarr[0]+"  用户名:"+objectarr[1]+"  密码:"+objectarr[2]);
});

有关其他基础请参阅 juejin.cn/user/175884…