0
点赞
收藏
分享

微信扫一扫

Configuration配置对象


文章目录

  • ​​Configuration对象​​
  • ​​用于加载对象​​
  • ​​加载映射文件​​
  • ​​SessionFactory工厂​​
  • ​​获取session会话​​
  • ​​Transaction事务​​
  • ​​session中的方法​​
  • ​​save方法​​
  • ​​update方法​​
  • ​​get,load方法​​
  • ​​delete方法​​

Configuration对象

Hibernate有两种形式的配置文件:默认情况下 上边两种文件都要放在src目录下
hiberbate.cfg.xml
通常使用xml配置对象 可以配置更丰富的内容
hibernate.properties
用于配置key/value形式的内容 key不能重复 配置有局限性 一般不用

用于加载对象

直接new Configuration构造方法加载的是hibernate.properties文件
new Configuration().configre()方法加载的是hibernate.cfg.xml文件(configre(文件路径) 方法可以指定路径)

加载映射文件

一般来说直接配置在hibernate.cfg.xml中

<mapping resource="org/ccit/com/domain/User.hbm.xml"/>

使用configuration对象的addResource()方法

configure.addResource("org/ccit//com/domain/User.hbm.xml");

使用configuration对象的addClass()方法 (addClass()方法自动添加后缀)

configure.addClass(User.class);

public Configuration addClass(Class persistentClass) throws MappingException {
String mappingResourceName = persistentClass.getName().replace('.', '/') + ".hbm.xml";
log.info("Reading mappings from resource: " + mappingResourceName);
return this.addResource(mappingResourceName, persistentClass.getClassLoader());
}

SessionFactory工厂

相当于java连接池 管理所有的session
通过Configuration对象获取SessionFactory对象

SessionFactory sessionFactory = configure.buildSessionFactory();

SessionFactory还用于缓存配置信息 (数据库配置信息 映射文件 预定义HQL语句 等)
SessionFactory线程安全 多个线程同时访问 不会出现线程并发访问问题

获取session会话

1,factory.openSession() 获取一个全新的session
2,factory.getCurrentSession()获取一个当前线程绑定的session
使用这种方法 必须在hibernate.cgf.xml文件配置

<!--        hibernate支持 将创建的session绑定到本地线程中 底层使用ThreadLocal 在程序之间共享session 如果提交或事务回滚 底层自动关闭session-->
property name="hibernate.current_session_context_class">thread</property>

第二种方法在同一线程中获取相同的session

new Thread(){
@Override
public void run() {
System.out.println(sessionFactory.getCurrentSession().hashCode());
System.out.println(sessionFactory.getCurrentSession().hashCode());
}
}.start();

Transaction事务

事务可以在heibernate.cfg.xml中配置 自动提交事务

<!--  是否自动提交事务 -->
<property name="hibernate.connection.autocommit">true</property>

如果不配置 可以通过session对象获得

//开启事务
Transaction transaction = session.getTransaction();
//开启事务后 数据才会存入到数据库中
transaction.begin();
//保存 直接把对象保存到数据库
User user = new User();
user.setUsername("LIANG");
user.setPassword("2233");
session.save(user);
//4 提交事务
//transaction.rollback();事务回滚
transaction.commit();

session中的方法

save方法

插入数据

User user = new User();
user.setUsername("LIANG");
user.setPassword("2233");
session.save(user);

update方法

//1,获取一个对象 
User user=(User)session.get(User.class,6);
//2,调用set方法 直接相当于更新
user.setUsername()
//也可以添加
//session.save(user)
//session.update(user)
//根据id判断 是否存在存在调用update() 不存在调用save()
//session.saveorupdate(user)

get,load方法

get方法是直接加载数据库
load是懒加载 用的时候才会查询数据库
load方法返回的是对象的一个代理

//get查询 根据id查询 hibernate会根据类名查表 如果没有查到 返回null值
User user=(User)session.get(User.class,1);
//load查询,如果没有查到 会抛出ObjectNotFonundException异常
User user = (User)session.load(User.class, 1);

delete方法

//1,获取一个对象 
User user=session.get(User.class,1);
//2,删除对象
user.delete(user);
//只要对象中有id 并且id在数据库中存在 就可删除成功
User user1=new User();
user1.setUid(1);
session.delete(user1);


举报

相关推荐

0 条评论