当前位置:必发365电子游戏 > 编程 > 必发365电子游戏1、Hibernate映射文件开发,使用Hibernate可解决以上问题
必发365电子游戏1、Hibernate映射文件开发,使用Hibernate可解决以上问题
2019-12-19

Hibernate大旨技艺简要介绍

什么是Hibernate

  1. Hibernate概念
    Hibernate是数量访问层的框架,对JDBC实行了打包,是真对数据库访问建议的面向对象的解决方案。
  2. Hibernate的作用
    应用Hibernate能够一贯访谈对象,Hibernate自动将次访问转变成SQL实行,从而达到简单介绍访谈数据库的目标,简化了数额访谈层的代码开荒。

1、Hibernate映射文件开拓

为啥要选用Hibernate

必发365电子游戏,    Hibernate映射文件就是项目中*.hbm.xml文件,其根本是水到渠成各要素的配置,包涵根元素、类成分、定义主键、设置主键生成方法、定义属性以致关系映射。上面风流洒脱大器晚成单独表明:

Hibernate与JDBC对比

运用JDBC具备以下劣势:

应用Hibernate可一挥而就上述难题

(1)根元素<hibernate-mapping>

Hibernate与MyBatis对比

    映射文件的根元素是<hibernate-mapping>,每一个*.hbm.xml文件都有唯生机勃勃的三个根成分。该因素包蕴以下属性:package、schema、catalog、default-cascade、default-access、default-lazy、auto-import等。

共性

    <hibernate-mapping>成分允许嵌套三个<class>映射。不过最佳的做法是二个长久化类对应三个辉映文件。举例,一个长久化类名称是User,则命名称为User.hbm.xml。

MyBatis

(2)类元素<class>

Hibernate

    <class>是<hibernate>的子成分,用以定义一个持久化类与数据表的映照关系。该成分包以下属 性:name、table、discriminator-value、mutable、schema、catalog、proxy、dynamic-update、dynamic-insert、select-before-update、polymorphism、where、persister、batch-size、optimistic-lock、lazy、entity-name、check、rowid、subselect、abstract。

(3)定义主键

    在关周全据库表中,主键用来甄别记录,并保险每条记下的唯一性。在Java语言中,通过比非常多个变量所援引对象的内部存款和储蓄器地址是同样,大概正如三个目的援用的对象值是不是风流罗曼蒂克律来推断四个对象是还是不是等于。Hibernate为了化解两个之间的例外,使用对象标志符(OID)来标志对象的唯风流倜傥性。OID是关周全据库中主键在Java对象模型中的等价物。在运行时,Hibernate依照OID来维系Java对象和数据库表中著录的相应关系。

    平时选拔数据库表中主键属性id来定义Java类中的主键,两个是逐豆蔻梢头对应涉及。

(4)设置主键生成方法

      常常选择<generator>成分来钦赐相应的主键,比如如下示例代码中id正是主键:

 

<hibernate-mapping package="com.demo.hibernate.beans">

    <class name="User" table="user">
        <id name="id" column="ID" type="integer">
            <generator class="native"/>
        </id>

        <property name="username" column="username" type="string" />
        <property name="password" column="password" type="string" />
        <property name="email" column="email" type="string" />
    </class>

</hibernate-mapping>

 

(5)定义属性

    在数据库表中,每壹性情质都会相应三个相应的数据类型,那么举办ORM关联映射生成的Java类,每多个成员变量也是有三个对应的数据类型。举例,int、long、String

、char、date、text等,个中date和text等在Java代码中不是数据类型,但在这里边是充任hibernate映射的放置映射类型属性。

    平时能够使用<property>元一向定义非主键属性。

(6)关联映射

    关联映射相同关全面据库中实体之间的附和关系,但是这里表示的照射后转移的持久化类之间的关联,富含以下几类别型:<many-to-one>、<one-to-one>、<one-to-many>、<many-to-many>。

 

2、Hibernate主旨编制程序

    用Hibernate开采基于长久层的应用时,第大器晚成件业务应该是耳闻则诵它的编制程序接口。主要蕴含以下几个核心类的采纳:

      Configuration装载配置类

      SessionFactory创建Session类

      Session数据库操作类

      Transcation事务操作类

    常用的主旨接口包蕴以下四个:Session、SessionFactory、Configuration、Transaction、Query和Criteria。其切实涉及如下图朝气蓬勃所示:

 必发365电子游戏 1

图风度翩翩:接口类的产生关系

    上边简要说Bellamy下多少个宗旨类的功能:

(1)Configuration装载配置类

    Configuration接口的效果与利益是对Hibernate实行安插,以至对它进行运维。在Hibernate运行进度中,Configuration类的实例首先定位映射文书档案的岗位,读取那个安插,然后制造二个SessionFactory对象。

(2)SessionFactory创建Session类

    SessionFactory在Hibernate中实际上起到了三个缓冲区的职能,它缓冲了Hibernate自动生成的SQL语句以致此外的映照数据,还缓冲了一些以后有超级大大概重新利用的数码。

(3)Session数据库操作类

    Session的机要功效是提供对映射的实体类实例的创导、读取和删除操作。

(4)Transcation事务操作类

    Transaction接口是对实在事物完结的叁个架空,这么些完结包涵JDBC的事务、JTA中的UserTransaction、以至能够是CORBA事务。那样设计的指标是为着让开垦者能够使用贰个集结工作的操作分界面,使得自个儿的品类方可在区别的景况和容器之间方便地移植。

 

3、使用Query进行HQL语句询问

    Query接口完结对数据库及悠久化对象的询问操作,它能够有二种表明方式:HQL语言依然地点数据库的SQL语句。Query日常被用来绑定查询参数、约束查询记录数据,并最终实行查询操作。

    要得到Query对象,必要采用Session的createQuery(卡塔尔国函数来实践查询,查询的参数是依据HQL语法的,其询问的指标是Hibernate的长久化对象名,Hibernate会依据该对象名找到要寻觅的表名。具体使用如下:

(1)不带参数的查询

    代码示比如下:

     Query query = session.createQuery(“from User”);

(2)带参数的询问

   代码示比方下:

     Query query = session.createQuery(“from User where username =: username”);

     Query.setString(“username”,”admin”);

(3)取得List结果集

    代码示比方下:

     List list = query.list();

(4)拿到迭代列表结果集

    代码示比如下:

     Iterator it1 = query.iterate();

     Iterator it2 = query.list().iterator();

     while(it2.hasNext()){

         User user = (User)it2.next();

     }

(5)得到一个目的

    示例代码如下:

     Query query = session.createQuery(“from User where username=?”);

     Query.setString(0,”admin”);

     User user = (User)query.uniqueResult();

必发365电子游戏1、Hibernate映射文件开发,使用Hibernate可解决以上问题。(6)标量查询

    示例代码如下:

      Iterator results = session.createQuery(“select user.username,count(user.email) from User user group by user.username”).list().iterator();

(7)分页查询

    示例代码如下:

     Query query = session.createQuery(“from User”);

     query.setFirstResult(10);

     query.setMaxResult(20);

     List list = query.list();

(8)创建SQL查询

    示例代码如下:

     List users = session.createSQLQuery(“select {user.*} from User{user}”).list();

    

4、使用Criteria实行规范查询

    Criteria接口和Query接口特别左近,它同意你成立并实行面向对象的法则查询。

与之绝没有错是,固然你希望能够动态的应用API举办面向对象查询,而非在Java代码中放到字符串,那么接收Criteria可以直达如此的指标。以下是其实际使用:

(1)创建Criteria实例

    实例代码如下:

     Criteria criteria = session.createCriteria(User.class);

     criteria.setMaxResult(50);

     List users = criteria.list();

(2)增加查询条件

    实例代码如下:

     Criteria criteria = session.createCriteria(User.class);                                                              criteria.add(Restrictions.like(“username”,”admin%”));

     criteria.add(Restrictions.like(“ID”,1,10));

     List users = criteria.list();

(3)加多排序条件

    实例代码如下:

     List users = session.createCriteria(User.class).add(Restrictions.like(“username”,”admin”)).addOrder(Order.asc(“username”)).addOrder(Order.desc(“password”)).setMaxResults(50).list();

(4)使用示例查询

    示例代码如下:

     User user = new User();

     User.setUsername(“admin”);

     List results = session.createCriteria(User.class).add(Example.create(user)).list();