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…