之前已经过滤一下hibernate的简单的用法,但是近期有点时间,所以重新看下视频,敲下代码,翻下笔记,写博客与大家分享一下。 

hibernate简介

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

来自百度百科

我对hibernate的看法

其实对于很多的概念,比如什么jpa orm之类的刚刚开始入门的时候可以说是让我自己头晕,天花乱坠的解释触不及防,当我使用了hibernate之后我也就渐渐的了解orm,刚刚入门我就觉得自己先不要太过于深究了,框架就拿来用就行了。

用了之后发觉hibernate真的挺好,节省了我们的很多时间,不用程序员自己编写SQL语句,而是通过对象的形式去操作数据库,当然还有就是一些需要配合HQL的地方,个人感觉蛮好的。

不过以对象的形式去映射表,用对象操作数据库,SQL语言的生成掌握在hibernate的手中也暴露了一些问题,你怎么去控制它生成的SQL等等等

创建项目、搭建环境

现在开始搭建我们的开发环境,这里我使用的是maven项目

项目结构图

如果没有尝试过maven,可以在博客上搜一下,然后配置一下,你会爱上它的

这里我在porm.xml中引入了相关的依赖

  1. <dependencies>
  2. <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
  3. <dependency>
  4. <groupId>org.hibernate</groupId>
  5. <artifactId>hibernate-core</artifactId>
  6. <version>5.2.10.Final</version>
  7. </dependency>
  8. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  9. <dependency>
  10. <groupId>mysql</groupId>
  11. <artifactId>mysql-connector-java</artifactId>
  12. <version>5.1.43</version>
  13. </dependency>
  14. </dependencies>

通过添加了以上的依赖,jar已经就自动的添加到了项目中了,所以现在剩下的就是编码和配置了

生成pojo(java对象)并写映射文件

Customer对象

别问我这是哪里来的,直接拿来用一下就行了

  1. public class Customer {
  2. /*
  3. * CREATE TABLE `cst_customer` (
  4. `cust_id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
  5. `cust_name` VARCHAR(32) NOT NULL COMMENT '客户名称(公司名称)',
  6. `cust_source` VARCHAR(32) DEFAULT NULL COMMENT '客户信息来源',
  7. `cust_industry` VARCHAR(32) DEFAULT NULL COMMENT '客户所属行业',
  8. `cust_level` VARCHAR(32) DEFAULT NULL COMMENT '客户级别',
  9. `cust_linkman` VARCHAR(64) DEFAULT NULL COMMENT '联系人',
  10. `cust_phone` VARCHAR(64) DEFAULT NULL COMMENT '固定电话',
  11. `cust_mobile` VARCHAR(16) DEFAULT NULL COMMENT '移动电话',
  12. PRIMARY KEY (`cust_id`)
  13. ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  14. */
  15. private Long cust_id;
  16. private String cust_name;
  17. private String cust_source;
  18. private String cust_industry;
  19. private String cust_level;
  20. private String cust_linkman;
  21. private String cust_phone;
  22. private String cust_mobile;
  23. public Long getCust_id() {
  24. return cust_id;
  25. }
  26. public void setCust_id(Long cust_id) {
  27. this.cust_id = cust_id;
  28. }
  29. public String getCust_name() {
  30. return cust_name;
  31. }
  32. public void setCust_name(String cust_name) {
  33. this.cust_name = cust_name;
  34. }
  35. public String getCust_source() {
  36. return cust_source;
  37. }
  38. public void setCust_source(String cust_source) {
  39. this.cust_source = cust_source;
  40. }
  41. public String getCust_industry() {
  42. return cust_industry;
  43. }
  44. public void setCust_industry(String cust_industry) {
  45. this.cust_industry = cust_industry;
  46. }
  47. public String getCust_level() {
  48. return cust_level;
  49. }
  50. public void setCust_level(String cust_level) {
  51. this.cust_level = cust_level;
  52. }
  53. public String getCust_linkman() {
  54. return cust_linkman;
  55. }
  56. public void setCust_linkman(String cust_linkman) {
  57. this.cust_linkman = cust_linkman;
  58. }
  59. public String getCust_phone() {
  60. return cust_phone;
  61. }
  62. public void setCust_phone(String cust_phone) {
  63. this.cust_phone = cust_phone;
  64. }
  65. public String getCust_mobile() {
  66. return cust_mobile;
  67. }
  68. public void setCust_mobile(String cust_mobile) {
  69. this.cust_mobile = cust_mobile;
  70. }
  71. @Override
  72. public String toString() {
  73. return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + "]";
  74. }
  75. }

customer.hbm.xml是一个关于对象的映射文件,它解释了对象中的一些属性在数据库中的表示方式,文件有一定的命名格式,就是后缀需要使用.hbm.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="cn.lger.domain">
  6. <!--声明对象Customer和表cst_customer是关联的,当然了这不是必须的-->
  7. <class name="Customer" table="cst_customer">
  8. <!--
  9. 声明表中的每一个字段对应的对象中的属性
  10. 除了id其他的为非必须的
  11. -->
  12. <id name="cust_id" column="cust_id">
  13. <generator class="increment"/>
  14. </id>
  15. <property name="cust_name" column="cust_name" />
  16. <property name="cust_source" column="cust_source" />
  17. <property name="cust_industry" column="cust_industry" />
  18. <property name="cust_level" column="cust_level" />
  19. <property name="cust_linkman" column="cust_linkman" />
  20. <property name="cust_phone" column="cust_phone" />
  21. <property name="cust_mobile" column="cust_mobile" />
  22. </class>
  23. </hibernate-mapping>

配置hibernate.cfg.xml

现在接下来就是配置hibernate的配置文件,这里也是有命名规则的,就是后缀需要用.cfg.xml,并且将hibernate.cfg.xml放置于根目录classpath下(src),至于是为什么这么做,在测试中的注释有解释

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <!--一个配置文件中仅有的一个sessionFactory-->
  7. <session-factory>
  8. <!--连接数据库的基本操作-->
  9. <property name="hibernate.connection.username">root</property>
  10. <property name="hibernate.connection.password">root</property>
  11. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  12. <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_base</property>
  13. <!--
  14. hibernate.hbm2ddl.auto这个参数配置是在hibernate启动的时候对于表的操作的措施
  15. create 自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
  16. create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
  17. update 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
  18. validate 校验.不自动生成表.每次启动会校验数据库中表是否正确.
  19. -->
  20. <property name="hibernate.hbm2ddl.auto">update</property>
  21. <!--下列为非必须配置,只是为了开发方便-->
  22. <!--hibernate.show_sql为true的时候可以在控制台打印出sql-->
  23. <property name="hibernate.show_sql">true</property>
  24. <!--hibernate.format_sql为true可以在打印sql的时候格式化,不然sql就是一行,不利于我们观看-->
  25. <property name="hibernate.format_sql">true</property>
  26. <!--加入映射文件-->
  27. <mapping resource="customer.hbm.xml"/>
  28. </session-factory>
  29. </hibernate-configuration>

运行测试

接下来我创建了一个测试类,用于测试是否成功运行

  1. public class TestInsertCustomer {
  2. @Test
  3. public void test01(){
  4. Configuration configuration = new Configuration();
  5. //初始化hibernate的配置,这里默认的是配置根目录下的hibernate.cfg.xml
  6. //如果不想用这个函数,或者说不想将配置文件放于根目录可以使用configure(String resource)或configure(URL url)....
  7. configuration.configure();
  8. //从会话工厂中拿取session
  9. SessionFactory sessionFactory = configuration.buildSessionFactory();
  10. //打开会话
  11. Session session = sessionFactory.openSession();
  12. //开启事务
  13. Transaction transaction = session.beginTransaction();
  14. //操作数据库部分
  15. Customer customer = new Customer();
  16. customer.setCust_name("张三");
  17. customer.setCust_mobile("1231222");
  18. //将customer保存到数据库
  19. session.save(customer);
  20. transaction.commit();
  21. session.close();
  22. sessionFactory.close();
  23. }
  24. }

当然了,这里可能会有疑问,就是说我们根本不存在这个cst_customer表,它能将数据放进去吗?答案是可以,这是因为hibernate会根据对象创建表。

完整代码可以上github下载

我的hibernate学习记录(一)的更多相关文章

  1. 我的hibernate学习记录(二)

    通过上一篇文章我的hibernate学习记录(一)基本上的入门了hibernate,但是,里面还有还多东西是通过迷迷糊糊的记忆,或者说copy直接弄进去的,所以这篇文章就需要对上篇的一些文件.对象进行 ...

  2. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  3. hibernate学习四(关系映射一对一与组件映射)

    一.关系映射简介 在数据库中,表与表的关系,仅有外键.但使用hibernate后,为面向对象的编程,对象与对象的关系多样化:如 一对一,一对多,多对多,并具有单向和双向之分. 开始练习前,复制上一次项 ...

  4. hibernate学习三(使用Annotation,注解)

    一.新建一个工程hibernate_02_HelloWorld_Annotation(复制01工程并重命名); 二.新建一个实体类teacher.java,数据库中新建teacher表; import ...

  5. hibernate学习二(HelloWorld)

    一.建立hibernate配置文件 在工程Hibernate_01_HelloWorld下的src上建立hibernate.cfg.xml,打开hibernate-release-4.3.11.Fin ...

  6. hibernate学习一(hibernate简介与准备)

    一.hibernate简介 Hibernate是一个开放源代码的对象-关系映射(Object/Relational Mapping 即 ORM)框架,它对JDBC进行了非常轻量级的对象封装,它将POJ ...

  7. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  8. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  9. Hibernate学习——映射关系

    学习记录 O(∩_∩)O . 如果你恰巧路过,希望你能停下脚步瞧一瞧,不足之处望指出,感激不尽~ 使用工具: 1.eclipse   2.hibernate压缩包(hibernate_4.3.11)  ...

随机推荐

  1. Protocol Buffers与FlatBuffers效率对比

    Protocol Buffers是Google跨语言.跨平台的通用序列化库.FlatBuffers同样出自Google,而且也跨语言跨平台,但更强调效率,专门为游戏开发打造.在游戏界混了几年,各种各样 ...

  2. mybatis 详解(四)------properties以及别名定义

    上一篇博客我们介绍了mybatis的增删改查入门实例,我们发现在 mybatis-configuration.xml 的配置文件中,对数据库的配置都是硬编码在这个xml文件中,如下图,那么我们如何改进 ...

  3. MyBatis String类型传递参数注意事项

    Mybatis查询sql传入一个字符串传参数,报There is no getter for property named 'ids' in 'class java.lang.String'. 后来改 ...

  4. Fancytree Javascript Tree的入门使用

    Fancytree Javascript Tree的入门使用 一.概念----是做什么的能干什么 Fancytree是一个Javascript控件,它依赖于: <script src=" ...

  5. css2--背景

    ## CSS2 背景##### background-color 设置背景颜色 ##### background-image 设置背景图片- ````background-image:url(&quo ...

  6. netstat命令---输出网络相关的信息

    简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...

  7. 让你快速了解并掌握如何进行iOS开发技能

    首先你要花点时间针对objective-c语言的学习:毕竟这个是iOS开发的基础(你也可以尝试用Swift,但此项目只是针对OC),编程套路其实都是差不多,多写多想多实践:关于环境的搭建就不在本文进行 ...

  8. mui开发app前言(一)

    dcloud mui开发app前言 大一那会就听说html5快要发布了,前景无量,厉害到能写操作系统==|||(什么???蛤?) 似乎html5标准还没正式发布那会,使用hybrid模式开发app已经 ...

  9. 开源作业调度工具实现开源的Datax、Sqoop、Kettle等ETL工具的作业批量自动化调度

    1.阿里开源软件:DataX DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳 ...

  10. Mac实用操作技巧(三)

    远程协助 很多场景下需要用到远程协助,比如你遇到了某个搞不定的bug需要他人帮助,但是别人却不在身边,这时就需要别人通过网络来远程协助你解决问题.在Windows下有不少优秀软件,比如TeamView ...