添加对象到数据库
// 添加对象到数据库
// 1.加载配置文件
// 直接调用configure() 系统会默认读取 hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
// 2.获取 SessionFactory 对象 相当于获取连接池对象 sessionFactory是线程安全的
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 3.从工厂中获取一个Session对象
// openSession() 获取一个全新的Session
Session session = sessionFactory.openSession();
// 向数据库插入对象
User user = new User();
user.setUsername("hanhee");
user.setPassword("426433");
// 4.使用Session对象开启一个事务 返回一个事务对象
Transaction transaction = session.beginTransaction();
// 包裹的要执行的任务
session.save(user);
// 5.提交事务
transaction.commit();
// 6.关闭资源
session.close();
sessionFactory.close();
修改对象
// 修改对象
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// 1.获取对象 根据Id获取
User user = session.get(User.class, 11);
// 2.修改对象
user.setUsername("hanhee");
// 3.把对象再保存一遍 注意:修改的时候就用update 保存用save
session.update(user);
transaction.commit();
session.close();
sessionFactory.close();
get 和 load方法区别
相同:都能进行对象的查询
不同: load方式的查询方式 是 懒加载(延迟加载) load方法被执行时 不会跟get方法一样
立即生成sql语句和执行 而是生成一个代理对象 直接返回 这时才会去生成sql语句 查询数据 利用延迟加载 提供了hibernate的执行效率
查询
// 查询
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User user = session.load(User.class, 11);
transaction.commit();
session.close();
sessionFactory.close();
// 这时代理对象 才会使用Session去查询数据库
// 而Session已经销毁了 报错
System.out.println(user);
删除(按id删除)
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// 1.先查对象 把该对象删除
// User user = session.get(User.class, 11);
// session.delete(user);
// 2.创建一个对象 只赋值id 然后删除
User user = new User();
user.setId(11);
session.delete(user);
transaction.commit();
session.close();
sessionFactory.close();
System.out.println(user);
使用HQL查询
// 获取session对象
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
// 查询方法
// 返回的是 保存查询结果的对象
Query query = session.createQuery("from User",User.class);
//Query query = session.createQuery("from com.lanou3g.User");
// 获取到查询结果的集合
List<User> list = query.list();
System.out.println(list);
transaction.commit();
session.close();
Sql语句查询
// 获取session对象
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
//直接使用sql语句查询
NativeQuery<Object[]> createNativeQuery = session.createNativeQuery("select * from user");
List<Object[]> list = createNativeQuery.list();
//[[Ljava.lang.Object;@69c43e48, [Ljava.lang.Object;@1804f60d, [Ljava.lang.Object;@3a80515c, [Ljava.lang.Object;@547e29a4]
//list中保存了四个对象 每一个对象是一个Object[]
//四条数据对应四个Object[]
//遍历
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
for (Object object : objects) {
System.out.println(object);
}
}
transaction.commit();
session.close();