JavaWeb_(Hibernate框架)Hibernate中重要的api
Hibernate中重要的api
- Configuration
- SessionFactory
- Session(重点)
- Transaction
在Dao层中UserDao.java使用Hibernate向数据库中添加注册的用户
public void addUser(User user) { //使用Hibernate //得到配置信息 Configuration config = new Configuration().configure(); //创建sessionFactiory对象 SessionFactory sessionFactory = config.buildSessionFactory(); //获取session Session session = sessionFactory.openSession(); //打开事务 Transaction transaction = session.beginTransaction(); //存储User对象 session.save(user); //提交事务 transaction.commit(); //关闭资源 session.close(); }
Configuration:管理我们的配置文件的信息的
//使用Hibernate(并没有去读取hibernate.cfg.xml) Configuration config1 = new Configuration();
config1.configure();
在Hibernate底层实现configure()方法时会默认在classpath下面(即从src目录下开始查找)寻找hibernate.cfg.xml,并进行配置,当然也可以自己指定hibernate.cfg.xml文件位置:
configuration.configure("/com/db/hibernate.cfg.xml");
configure()方法源码:
public Configuration configure() throws HibernateException { return configure( StandardServiceRegistryBuilder.DEFAULT_CFG_RESOURCE_NAME ); }
DEFAULT_CFG_RESOURCE_NAME静态String在StandardServiceRegistryBuilder有定义
public static final String final String DEFAULT_CFG_RESOURCE_NAMEDEFAULT_CFG_RESOURCE_NAME = "hibernate.cfg.xml";
所以src下hibernate.cfg配置文件名字不要写错,如果有修改,要与StandardServiceRegistryBuilder.java中的final String DEFAULT_CFG_RESOURCE_NAME一一对应
SessionFactory:创建session(数据库核心对象)的工厂
简单来说就是创建session对象
sessionFactory负责保证和使用所有的配置信息,消耗内存资源很大,所以我们要保证一个web项目中,只创建一个sessionFactory
Configuration 类负责管理 Hibernate 的配置信息。包括如下内容:
Hibernate 运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。
持久化类与数据表的映射关系(*.hbm.xml 文件)
Session对象的增、删、改、查
//增加用户 public void addUser(User user) { //使用Hibernate(并没有去读取hibernate.cfg.xml) Configuration config1 = new Configuration(); config1.configure(); //得到sessionFactory 功能:创建session(数据库核心对象)的工厂 // 简单来说就是创建session对象 //sessionfactory负责保存和使用所有配置信息,消耗内存和资源大 // 线程安全 // 保证一个web项目中,只创建一个 SessionFactory factory = config1.buildSessionFactory(); //创建session对象 Session openSession = factory.openSession(); //得到配置信息 Configuration config = new Configuration().configure(); //创建sessionFactory对象 SessionFactory sessionFactory = config.buildSessionFactory(); //获取session Session session = sessionFactory.openSession(); //打开事务 Transaction transcation = session.beginTransaction(); //存储user对象 session.save(user); //关闭事务 session.close(); } //删除用户 public void deleteUser() { Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); Session session = factory.openSession(); Transaction transcation = session.beginTransaction(); //得到id为d03de4eb-e033-41c1-9da0-c9f155713e18的对象 User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18"); session.delete(user); transcation.commit(); session.close(); } //修改用户 public void ChangeUser() { //读取hibernate.cfg.xml Configuration config = new Configuration().configure(); //获取sessionFactory工厂 SessionFactory factory = config.buildSessionFactory(); //获取session Session session = factory.openSession(); //开启事务 Transaction transaction = session.beginTransaction(); //根据id,得到session User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18"); //修改名字,将对象改名为lGary user.setUsername("lGary"); //更新数据库中的值 session.update(user); //提交事务 transaction.commit(); //关闭session session.close(); } //查询用户 public void findUser() { Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); Session openSession = factory.openSession(); Transaction transaction = openSession.beginTransaction(); User user = openSession.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18"); System.out.println(user); transaction.commit(); openSession.close(); }
package com.Gary.dao; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.Gary.domain.User; public class UserDao { //增加用户 public void addUser(User user) { //使用Hibernate(并没有去读取hibernate.cfg.xml) Configuration config1 = new Configuration(); config1.configure(); //得到sessionFactory 功能:创建session(数据库核心对象)的工厂 // 简单来说就是创建session对象 //sessionfactory负责保存和使用所有配置信息,消耗内存和资源大 // 线程安全 // 保证一个web项目中,只创建一个 SessionFactory factory = config1.buildSessionFactory(); //创建session对象 Session openSession = factory.openSession(); //得到配置信息 Configuration config = new Configuration().configure(); //创建sessionFactory对象 SessionFactory sessionFactory = config.buildSessionFactory(); //获取session Session session = sessionFactory.openSession(); //打开事务 Transaction transcation = session.beginTransaction(); //存储user对象 session.save(user); //关闭事务 session.close(); } //删除用户 public void deleteUser() { Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); Session session = factory.openSession(); Transaction transcation = session.beginTransaction(); //得到id为d03de4eb-e033-41c1-9da0-c9f155713e18的对象 User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18"); session.delete(user); transcation.commit(); session.close(); } //修改用户 public void ChangeUser() { //读取hibernate.cfg.xml Configuration config = new Configuration().configure(); //获取sessionFactory工厂 SessionFactory factory = config.buildSessionFactory(); //获取session Session session = factory.openSession(); //开启事务 Transaction transaction = session.beginTransaction(); //根据id,得到session User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18"); //修改名字,将对象改名为lGary user.setUsername("lGary"); //更新数据库中的值 session.update(user); //提交事务 transaction.commit(); //关闭session session.close(); } //查询用户 public void findUser() { Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); Session openSession = factory.openSession(); Transaction transaction = openSession.beginTransaction(); User user = openSession.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18"); System.out.println(user); transaction.commit(); openSession.close(); } }
Transaction:事务
1、hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式,所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。
2、如果想让hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的connection后,设置其为自动提交事务模式。(注意:通常并不推荐这样做)
//打开事务 Transaction transcation = session.beginTransaction(); //关闭事务 session.close();