Hibernate 学习总结

一:hibernate(是一个开源的轻量级(就是不需要依赖其他就可以运行)框架)是应用在dao层(持久化层)的一个框架,是对数据库的crud操作(就是增删改查操作),就是对jdbc进行的封装,不在写复杂的SQL语句,只需要在配置文件中配置即可。

二:MVC思想 就是(M:模型    V:视图    C:控制器)

三:hibernate使用的是ORM思想对数据库进行crud操作

        ORM(object relational mapping)对象关系映射

        就是实体类和数据库的表一一对应(所以不需要操作数据库表,而是操作实体类对象即可),看下图即可

        


四:hibernate入门案例

    4.1:入门案例的步骤:

            4.1.1 导包  ..............    

           4.1.2  创建实体类(注: 使用hibernate不需要手动创建表,hibernate会帮把表创建,但是必须得配置才可以)

                

        4.1.3:配置映射配置文件:

                配置实体类和数据库表的一一对应关系(映射关系)————使用xml配置

                xml文件的位置和名称没有固定要求(个人建议和实体类放一起,名字随意)

                引入dtd的约束

                配置映射关系:

                            

           4.1.4: 配置hibernate的核心配置文件

            引入约束

            位置:在src下面;

            名称:如果单独使用hibernate时候,名称固定  是hibernate.cfg.xml(我们这里使用这个)

                        如果和spring一起使用的时候,名称就不固定

            核心配置文件中: 

                            第一部分:需要配置数据库的信息

                                

                            第二部分:配置hibernate的信息(可选)(上面说hibernate会自动生成表,必须得配置这句话)

                            


                        第三部分:配置映射文件(映入映射文件)

                        

               4.1.5  测试demo

                     

五:hibernate的实体类的编写规则

        5.1:属性私有,生成get,set方法

        5.2 :要求实体类中有一个属性作为唯一值

        5.3  :类型建议使用包装类型

                    int——Integer        char——Charracter  其它都是首字母大写就可以

        5.4:主键生成的策略(方式)

                    5.4.1:native:就是一般的那种..........

                    5.4.2:uuid:这里不做解释.......


六:实现crud操作

        6.1:添加:

        

         6.2:根据id查询

        

         6.3:  修改:

            

            6.4:删除:

            



    七:hibernate的实体类对象的状态

            6.1:瞬时态:对象里面没有id值,对象与session没有关联

                      就是在程序中有数据,而在数据库中没有数据,并且数据连接断开

            6.2:持久态:对象里有id值,对象与session没有关联

                    就是在程序中和数据库中都有数据,并且数据连接没有持续连接中。

            6.3:托管态:对象里面有id值,对象与session没有关联

                    就是在在持久态的时候,数据库的连接断开,所有程序中的数据都成为游离态



八:hibernate的一级缓存:(hibernate的缓存是一个优化的方式)

        8.1:hibernate的一级缓存默认是打开的

        8.2:作用范围:是session范围,session的创建到死亡

        8.3:一级缓存存储的数据   必须是持久态


九:hibernate的一对多操作(重要)

        9.1 :创建两个实体类:例如  客户和联系人

        9.2: 让两个实体类之间互相表示

                  9.2.1: 在客户里表示多个联系人(使用set集合)并且生成get,set方法

                

                9.2.2:在联系人中表示客户

        

        9.3:配置映射关系

               完成基本的配置的时候。在配置一对多的关系

                9.3.1:在客户映射文件中:表示所有联系人

                        

                9.3.2:在联系人的映射文件中,表示所属客户

                

             9.4:创建核心配置配件

                引入映射配置文件....

                

    十:测试一对多demo

                    这样写的时候:需要一个在多的一方中配置一下


                

其他操作略去..................

十一:多对多操作

        11.1:创建两个实体类

        11.2:两个类互相表示(都用set集合表示)

         11.3:  在映射配置文件中互相表示(以角色和用户来举例)

                



        11.4:在核心配置文件中引入映射文件

            

十二:多对多级联保存

        12.1:根据用户保存角色

            12.1.1:在用户的映射文件中set标签中进行配置

            

            12.1.2:写代码

                创建用户和角色对象,把角色放到用户里面,最终保存用户就可以了

                        

//演示多对多修级联保存

    @Test

    publicvoid testSave() {

       SessionFactory sessionFactory = null;

       Session session = null;

       Transaction tx = null;

        try {

           //得到sessionFactory

           sessionFactory = HibernateUtils.getSessionFactory();

           //得到session

           session = sessionFactory.openSession();

           //开启事务

           tx = session.beginTransaction();

          

           //添加两个用户,为每个用户添加两个角色

           //1 创建对象

           User user1 = new User();

           user1.setUser_name("lucy");

           user1.setUser_password("123");

          

           User user2 = new User();

           user2.setUser_name("mary");

           user2.setUser_password("456");

          

           Role r1 = new Role();

           r1.setRole_name("总经理");

           r1.setRole_memo("总经理");

          

           Role r2 = new Role();

           r2.setRole_name("秘书");

           r2.setRole_memo("秘书");

          

           Role r3 = new Role();

           r3.setRole_name("保安");

           r3.setRole_memo("保安");

          

           //2 建立关系把角色放到用户里面

           // user1 --r1/r2

           user1.getSetRole().add(r1);

           user1.getSetRole().add(r2);

          

           // user2-- r2/r3

           user2.getSetRole().add(r2);

           user2.getSetRole().add(r3);

          

           //3 保存用户

           session.save(user1);

           session.save(user2);

          

           //提交事务

           tx.commit();

 

       }catch(Exception e) {

           tx.rollback();

       }finally {

           session.close();

           //sessionFactory不需要关闭

           sessionFactory.close();

       }

    }


其他操作略去................

十三:hibernate的查询方式

        13.1:对象导航擦查询

                查询某个客户里面所有联系人过程,使用对象导航实现



        13.2:oid查询

        

        13.3:hql查询:

        

    



        13.4:QBC查询

              













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值