Configuration配置对象

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值