【JAVA】Hibernate 之 创建数据库对象

Hibernate 之 创建数据库对象

Session

其实session相当于hibernate当中连接数据库的一个媒介,它就是一个操作数据库的对象。

session与connection,是多对一的关系。把对象保存在关系数据库中需要调用session的各种方法,如:save()、update()、delete()、createQuery()等。

  • 如何获得session对象?

    1. openSession

    2. getCurrenSession(!这种方式需要在配置文件汇总进行配置,否则将会报错

      如果是本地事务(jdbc事务)

      ​ thread

      如果是全局事务(jta事务)

      ​ jta

    两者的区别:

    1. getCurrenSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出。
    2. openSession每次创建新的session对象,而getCurrentSession使用现有的session对象。

transaction

  • hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式。所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。 !!一定要记得开启事务

单一主键

  • assigned 由java应用程序负责生成(手工赋值);
  • native 由底层数据库自动生成标志符,如果是MySQL就是increment,如果是Oracle就是sequence,等等。

组件属性

  • 实体类中的某个属性属于用户自定义的类的对象。
  • 个人理解:在原来的表结构基础上增加了用户自定义的字段。
<component name="address" class="Address">
    <property name="postcode" column="POSTCODE"></property>
    <property name="phone" column="PHONE"></property>
    <property name="address" column="ADDRESS"></property>
</component>

单表CRUB操作实例

  • save 保存对象
  • update 修改对象
  • delete 删除对象
  • get/load (查询单个记录)

应该将所有操作完成以后再提交事务。

public class SchoolCourseTest {
    private SessionFactory seesionFactory;
    private Session session;
    private Transaction transaction;

    public static void main(String[] args) {
        SessionFactory seesionFactory;
        Session session;
        Transaction transaction;
        Configuration cfg;
        ServiceRegistry serviceRegistry;

        Timestamp time = new Timestamp(System.currentTimeMillis());
        SchoolCourse sc = new SchoolCourse(5,"算法分析",2,1,time,"cxz","none");
//        sc.setId(4);
//        sc.setCourseName("JAVA");
//        sc.setSchoolTerm(1);
//        sc.setStatus(2);
//        sc.setCreatedDate(time);
//        sc.setCreater("cxz");
//        sc.setMemo("none");

        //获得配置对象
        cfg = new Configuration().configure();

        //获得服务注册独享
        serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();

        //获得seesionFactory对象
        seesionFactory = cfg.buildSessionFactory(serviceRegistry);

        //获得session对象
        session = seesionFactory.openSession();

        transaction = session.beginTransaction();

        //save 保存对象
//        session.save(sc);
        //get / load(查询单个对象)
        sc = (SchoolCourse)session.get(SchoolCourse.class,1);
        System.out.print(sc);

        sc = (SchoolCourse)session.load(SchoolCourse.class,2);
        System.out.print(sc);

        //update 更新对象
        sc = (SchoolCourse)session.get(SchoolCourse.class,3);
        sc.setMemo("update");
        System.out.print("memo:"+sc.getMemo());
        session.update(sc);

        //delete 删除对象
        sc = (SchoolCourse)session.get(SchoolCourse.class,7);
        session.delete(sc);

        //提交事务
        transaction.commit();

        //关闭会话对象
        session.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值