2019独角兽企业重金招聘Python工程师标准>>>

最近接触的老项目,总是爱用hibernate,维护起来觉得很麻烦,这里随便总结一下hibernate的特点。

首先:

1.hibernate可以直接对java实例操作,达到数据库的增删改查作用,但是这个实例,只对应一个表。

2.hibernate可以通过编写hql语句,达成自定义SQL查询,但是返回结果,可能是一个map,而无法直接对应成JAVA实例,要自己组装查询结果。

3.hibernate可以通过创建配置文件,配置文件里,定义一个复杂的JAVA实例Class,对应数据库中一个复杂的视图table,并指定在这个复杂视图中,多个表之间的one-to-one, one-to-many, many-to-many关系,和指定哪个字段作为关联条件。而在复杂的java实例中,根据一对一还是一对多的关系,创建其他表的实例作为成员变量,接收其他表的查询结果。既查询一次这个复杂的java实例,就等于关联查询了好多张表。

该文件的命名,一般以XXXX.hbm.xml结尾。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping auto-import="false"><class name="com.nstc.cpm.biz.acm.Account" table="V_CPM_BKUNIT_ACCOUNT" lazy="true"><id name="id" type="java.lang.Integer"><column name="ACCOUNT_ID" /><generator class="sequence"><param name="sequence">S_CPM_BOOK_UNIT</param></generator></id><discriminator column="ACC_CLASS" /><version name="version" type="java.lang.Integer"><column name="VERSION_COLUMN" /></version><many-to-one name="customer" class="com.nstc.cpm.biz.acm.Customer" fetch="join" outer-join="true"><column name="CUST_ID" /></many-to-one><many-to-one name="subject" class="com.nstc.cpm.biz.acm.Subject" fetch="join"><column name="SUBJECT_ID" length="8" not-null="true" /></many-to-one><many-to-one name="currency" class="com.nstc.cpm.biz.model.BCurrency"fetch="select" update="false" insert="false"><column name="CUR_CODE" not-null="true" /></many-to-one><property name="number" type="java.lang.String" unique="true"><column name="ACCOUNT_NO" length="32" not-null="true" /></property><one-to-one name="accIntr"  class="com.nstc.cpm.biz.acm.DefaultAccIntr" property-ref="accountId"/><many-to-one name="type" class="com.nstc.cpm.biz.acm.AccountType" fetch="select" not-null="true"><column name="TYPE_ID" length="8" /></many-to-one><many-to-one name="bizType" class="com.nstc.cpm.biz.model.BizType" fetch="select"><column name="BTY_ID" length="6" /></many-to-one><many-to-one name="smartBizType" class="com.nstc.cpm.biz.model.SmartBizType" fetch="select"><column name="SMART_BTY_ID" /></many-to-one><property name="name" type="java.lang.String"><column name="ACCOUNT_NAME" length="128" /></property><property name="openDate" type="java.util.Date"><column name="OPEN_DATE" length="7" /></property><property name="endDate" type="java.util.Date"><column name="END_DATE" length="7" /></property><property name="interBranchFlag" type="java.lang.Integer"><column name="INTER_BRANCH_FLAG"  /></property><property name="currencyNo" type="java.lang.String"><column name="CUR_CODE" length="32" not-null="true" /></property><!-- MODIFY BY ZHUQW FOR ZMJT-388 START 20170815 --><many-to-one name="branch" class="com.nstc.cpm.biz.model.Branch" fetch="join"><column name="BRANCH_NO" length="8" not-null="true" /></many-to-one><!-- MODIFY BY ZHUQW FOR ZMJT-388 END 20170815 --><property name="balanceDir" type="java.lang.Integer"><column name="BALANCE_DIR"  /></property><property name="state" type="java.lang.Integer"><column name="ACCOUNT_STATE"  /></property><property name="clearDate" type="java.util.Date"><column name="CLEAR_DATE"/></property><property name="floorAmount" type="java.lang.Double"><column name="FLOOR_AMOUNT" /></property><property name="sourceId" type="java.lang.String"><column name="SOURCE_MARK" length="32" /></property><property name="thirdCustomerId" type="java.lang.Integer"><column name="THIRD_CUSTOM_ID"  /></property><property name="initBalance" type="java.lang.Double"><column name="INIT_BALANCE"/></property><property name="sleepState" type="java.lang.Integer"><column name="SLEEP_STATE"/></property><property name="accTxDate" type="java.util.Date"><column name="ACCOUNT_TX_DATE"/></property><property name="sleepSDate" type="java.util.Date"><column name="SLEEP_SDATE"/></property><property name="sleepEDate" type="java.util.Date"><column name="SLEEP_EDATE"/></property><set name="intrSbUnits" inverse="true"><key><column name="CPM_ACCOUNT_ID" not-null="true" /></key><one-to-many class="com.nstc.cpm.biz.acm.StandingBookUnit" /></set><subclass name="com.nstc.cpm.biz.acm.CustomerAccount" discriminator-value="CustomerAccount"><subclass name="com.nstc.cpm.biz.acm.EntitySettlementAccount" discriminator-value="EntitySettlementAccount"><subclass name="com.nstc.cpm.biz.acm.DemandDepositAccount" discriminator-value="DemandDepositAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><subclass name="com.nstc.cpm.biz.acm.VirtualSettlementAccount" discriminator-value="VirtualSettlementAccount"><subclass name="com.nstc.cpm.biz.acm.CustLinkageAccount" discriminator-value="CustLinkageAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><subclass name="com.nstc.cpm.biz.acm.DepositAccount" discriminator-value="DepositAccount"><subclass name="com.nstc.cpm.biz.acm.FixedDepositAccount" discriminator-value="FixedDepositAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><subclass name="com.nstc.cpm.biz.acm.CallDepositAccount" discriminator-value="CallDepositAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><subclass name="com.nstc.cpm.biz.acm.MarginDepositAccount" discriminator-value="MarginDepositAccount"><subclass name="com.nstc.cpm.biz.acm.MarginDemandDepositAccount" discriminator-value="MarginDemandDepositAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><subclass name="com.nstc.cpm.biz.acm.MarginFixedDepositAccount" discriminator-value="MarginFixedDepositAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><subclass name="com.nstc.cpm.biz.acm.LoanAccount" discriminator-value="LoanAccount"><subclass name="com.nstc.cpm.biz.acm.CommonLoanAccount" discriminator-value="CommonLoanAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><subclass name="com.nstc.cpm.biz.acm.SyndicatedLoanAccount" discriminator-value="SyndicatedLoanAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><subclass name="com.nstc.cpm.biz.acm.BankAccount" discriminator-value="BankAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><subclass name="com.nstc.cpm.biz.acm.InsideAccountingAccount" discriminator-value="InsideAccountingAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><subclass name="com.nstc.cpm.biz.acm.OffSheetAccountingAccount" discriminator-value="OffSheetAccountingAccount"><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></subclass><sql-delete>delete from CPM_BOOK_UNIT a where a.ACCOUNT_ID=? AND A.VERSION_COLUMN = ?</sql-delete></class>
</hibernate-mapping>

4.hibernate基于JPA,通过注解的方式,来完成数据库的增删改查。使用这个方式,类的成员属性,都需要加上注解,标识这个成员属性,对应表的哪个字段,是否是主键,是否是关联条件。同样的,实体类新增了成员变量,而改变量不对应表的字段时,也要加上注解,标识该字段与表无关。

在多表关联查询的时候,父类查询结果,持有子类查询结果时,还要在父类中还需要持有子查询类的实体类对象,并添加注解,标识改子查询是one-to-one还是one-to-many类型,如果是one-to-many,就需要持有子表实体类的集合作为成员变量。

以上,是我在项目中,遇到的hibernate几种用法。

下面,我们来说一下mybatis,实际上mybatis主要有两种用法:

1.基于注解的,在dao文件中,定义SQL方法,而在每个自定义的SQL方法上,编写mybatis的注解,来对数据库进行操作。但是缺点是多表关联查询,需要编写的SQL比较复杂,使用注解的方式,会更复杂。所以我们一般不用。

2.基于配置文件,基于配置文件的mybatis用法比较常见,有点是,适合编写复杂,超长的sql语句,而且配套的动态sql子句,用起来很好用。

转载于:https://my.oschina.net/xiaoyoung/blog/3013175

关于hibernate的一些小记相关推荐

  1. myeclipse hbm2java_myeclipse试用小记----Hibernate多对一双向关联(2)

    myeclipse试用小记----Hibernate多对一双向关联(2) 在上篇文章"myeclipse试用小记----Hibernate多对一单向关联(1)"中,讲到了" ...

  2. myeclipse试用小记----Hibernate多对一双向关联(2)

    myeclipse试用小记----Hibernate多对一双向关联(2) 在上篇文章"myeclipse试用小记----Hibernate多对一单向关联(1)"中,讲到了" ...

  3. hibernate小记

    1. <mapping class="com.bjsxt.hibernate.model.Teacher"/><!-- Annotation --> < ...

  4. hibernate join fetch

    那天去了达内,试听了2个小时的课,刚好讲的他们的当当网项目,讲hibernate表关系映射这段来了,不过也够呛,投影仪看的眼睛点都不舒服,当时讲的也没认真听,听了个大概,就记住那个老师一句话了,说是有 ...

  5. Java JPA学习与使用小记

    什么是JPA JPA之于ORM(持久层框架,如MyBatis.Hibernate等)正如JDBC之于数据库驱动. JDBC是Java语言定义的一套标准,规范了客户端程序访问关系数据库(如MySQL.O ...

  6. java面试常见问题之Hibernate总结

    1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象.) Ø  OID检索(按照对象的OID来检索对象.) Ø  HQL检索(使用面向对象的HQL查询语言.) ...

  7. Spring中启用Hibernate二级缓存步骤

    1.在applicationContext.xml配置文件中SessionFactory  bean中配置缓存 <!-- 配置会话工厂对象 --> <bean id="se ...

  8. ssh(Struts+spring+Hibernate)三大框架整合-简述

    ssh(Struts+spring+Hibernate)三大框架配合使用来开发项目,是目前javaee最流行的开发方式,必须掌握: 注意: 为了稳健起见,每加入一个框架,我们就需要测试一下,必须通过才 ...

  9. Hibernate框架第二天

    ### Hibernate的持久化类 ### ---------- **什么是持久化类** 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为 ...

最新文章

  1. MySQL的系统数据库是_mysql数据库系统
  2. 一起学nRF51xx 3 -  gpiote
  3. 动图 + 源码,演示 Java 中常用数据结构执行过程及原理
  4. JVM:gc什么时候开始?System.gc()能保证gc一定发生吗?
  5. 上海2014计算机职称考试理论题,2014年上海市高校计算机一级考试8套理论题含答案...
  6. 杭州阿里、海康、网易等组成 的HR 联盟对打工人的影响
  7. js 将多个对象合并成一个对象 assign方法
  8. 华为root_传Mate40系列12月率先升级鸿蒙OS 华为官方回应:真相原来是这样
  9. linux:nohup 不生成 nohup.out的方法
  10. 什么是内网、外网?内网、外网有啥区别?
  11. 【Linux】下载暂停后如何恢复
  12. 数仓及其维度(分层)建模(ODS DWD DWS DWT ADS)
  13. Python-集合练习(协助学生做问卷调查)
  14. SpringBoot+Hibernate配置
  15. 20-40K/月,百度车联网招聘多岗位Android工程师(地点:深圳)
  16. 移动通讯技术的发展历史
  17. 转帖:励建书:数学有助于大众理性思维的培养
  18. 1688API详情接口调用示例
  19. (P13)元组:戴上了枷锁的列表
  20. 模型泛化技巧“随机权重平均(Stochastic Weight Averaging, SWA)”介绍与Pytorch Lightning的SWA实现讲解

热门文章

  1. java字段描述符_Java 的方法签名与字段类型表示-[Ljava.lang.String;
  2. createsolidcaret 后 很快就不闪烁了_【文献推送】Adv. Mater. | 单分散硅基闪烁体实现X射线介导的深层肿瘤光动力治疗...
  3. java程序设计教程课后题,一文轻松搞定
  4. 北大cls_战报 | 第七届CLS“联合杯”篮球联赛
  5. php转化成json数组,php怎么实现数组转json,php把json转化成数组
  6. 凉山州计算机等级考试时间,2020年四川凉山中考考试时间及科目安排(已公布)...
  7. 远程桌面服务器怎么重启计算机,电脑怎么样远程重新启动
  8. docker 容器 exited_docker常用命令整理
  9. 武林c语言,c语言printf函数的使用
  10. 嘉兴市计算机技工学校,嘉兴市高级技工学校2021年招生简章