增
User user = new User();
user.setId(1);
user.setUsername("admin");
user.setPassword("admin");
删
User user = new User();
user.setId(2);
// delete
session.delete(user);
查
User user = new User();
user.setId(2);
user.setUsername("user1");
user.setPassword("123-user");
// update
session.update(user);
工具类
将重复代码块包装成工具类,方便使用。
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.Session;
import table.StudentEntity;
import java.util.Properties;
public class Main {
public static void main(String[] args) {
Session session =HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
transaction.commit();
session.close();
}
}
Session
Session 与Connection类似。
起连接数据库的作用,是与数据库交互的桥梁。
完成增删改查的操作。
但Session不是线程安全,在方法中使用。
常用API
- 保存方法:Serializable save(Object obj) (返回ID)
- 查询方法: T get(class c,Serializable id)
- 查询方法: T load(class c,Serializable id)
get/load: 的区别:
1:get 立即加载,发生SQL语句去查询,load 延迟加载。执行到代码时不会立即发生SQL语句去查询,当真正使用到对象时才会发生SQL语句。
2:当查询不到时,get会返回null,load 则会返回 ObjectNotFoundException。
3:get 返回真是对象,load 返回代理对象。
修改
public class Main {
public static void main(String[] args) {
Session session =HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
StudentEntity studentEntity = session.load(StudentEntity.class,2);
studentEntity.setName("wije2");
session.update(studentEntity);
transaction.commit();
session.close();
}
先查询再修改,也可以直接修改
查询所有:
public static void main(String[] args) {
Session session =HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
StudentEntity studentEntity =new StudentEntity();
Query query = (Query) session.createQuery("from StudentEntity ");
List<StudentEntity> list = query.list();
for (StudentEntity studentEntity1: list){
System.out.println(studentEntity);
}
transaction.commit();
session.close();
}
删除
public class Main {
public static void main(String[] args) {
Session session =HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
StudentEntity studentEntity = session.load(StudentEntity.class,9);
session.delete(studentEntity);
transaction.commit();
session.close();
}
}
先查询再删除(级联删除),也可以直接删除,但推荐前者。
Transaction
事务对象,两个API。
如果不配置c3p0,可以不写。内置连接池可以提交,但最好加上。
- commit()
- rollback()