Java为什么被人诟病,因为一切都是过度设计。Hibernate其实就是实现了一套JPA的ORM,不过用极度冗赘的配置方式,nodejs Sequelize.js,甚至Python SQLAlchemy,都比Java的实现优雅的多。当然这个是历史问题了,就没必要抱怨了。

许多时候,我们不需要用hibernate.cfg.xml,并没有程序化的简单可控。

下面开始实战。

假设使用了Maven系统,首先确认hibernate-core已经作为依赖添加到pom.xml。

  1. <dependency>
  2. <groupId>org.hibernate</groupId>
  3. <artifactId>hibernate-core</artifactId>
  4. <version>5.2.16.Final</version>
  5. </dependency>

下面添加一个User类作为范例。

  1. package com.jcube.mies.admin;
  2.  
  3. import java.util.UUID;
  4.  
  5. import javax.persistence.Column;
  6. import javax.persistence.Entity;
  7. import javax.persistence.GeneratedValue;
  8. import javax.persistence.GenerationType;
  9. import javax.persistence.Id;
  10. import javax.persistence.Table;
  11.  
  12. @Entity
  13. @Table(name = "User")
  14. public class User {
  15.  
  16. @Id
  17. @GeneratedValue(strategy = GenerationType.AUTO)
  18. @Column(name = "id", unique = true, nullable = false)
  19. private Long id;
  20.  
  21. @Column(name = "uuid", length = 32, unique = true, nullable = false)
  22. private UUID uuid;
  23.  
  24. @Column(name = "name", length = 32, unique = true, nullable = false)
  25. private String name;
  26.  
  27. public User() {
  28. uuid = UUID.randomUUID();
  29. }
  30.  
  31. public Long getId() {
  32. return id;
  33. }
  34.  
  35. public void setId(Long id) {
  36. this.id = id;
  37. }
  38.  
  39. public UUID getUuid() {
  40. return uuid;
  41. }
  42.  
  43. public void setUuid(UUID uuid) {
  44. this.uuid = uuid;
  45. }
  46.  
  47. public String getName() {
  48. return name;
  49. }
  50.  
  51. public void setName(String name) {
  52. this.name = name;
  53. }
  54. }

对于Annoataion的用法,可以参考JPA和Hibernate的文档。

这里用于示范的User类有3个成员变量,分别是id,这个是数据库的主键;然后还有个uuid,使用的是Java的UUID类型,全局唯一标示符;还有个name,一个字符串,代表名字。

其实通过这个类,已经足够让Hibernate生成数据表了。

下面程序化的构造SessionFactory,这个算是Hibernate的基本API接口。

  1. package com.sample;
  2.  
  3. public class Launcher {
  4.  
  5. private static SessionFactory sessionFactory = null;
  6.  
  7. public static void main(String[] args) {
  8.  
  9. // Create the session factory.
  10. try {
  11. Configuration cfg = new Configuration();
  12. cfg.setProperty("hibernate.show_sql", "true");
  13. cfg.setProperty("hibernate.format_sql", "true");
  14. cfg.setProperty("hibernate.use_sql_comments", "true");
  15. cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
  16. cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
  17. cfg.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/testdb");
  18. cfg.setProperty("hibernate.connection.username", "testuser");
  19. cfg.setProperty("hibernate.connection.password", "testpwd");
  20. cfg.setProperty("hibernate.hbm2ddl.auto", "create");
  21. cfg.addAnnotatedClass(User.class);
  22.  
  23. StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties());
  24. sessionFactory = cfg.buildSessionFactory(builder.build());
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27.  
  28. System.exit(1);
  29. }
  30.  
  31. }

一堆的setProperty()配置。

hibernate.show_sql,
hibernate.format_sql
use_sql_comments

这里设置为true,用户调试输出。

然后用户配置数据库,包括地址,用户名密码等等。

最后直接调用addAnnotatedClass(),用来直接告诉Hibernate配置,我们需要映射这个类。

完毕。

如何程序化的构造Hibernate配置 // How to initialize Hibernate programmably的更多相关文章

  1. Hibernate配置方式

    Hibernate配置方式 Hibernate给人的感受是灵活的,要达到同一个目的,我们可以使用几种不同的办法.就拿Hibernate配置来说,常用的有如下三种方式,任选其一. 在 hibernate ...

  2. Hibernate 系列 04 - Hibernate 配置相关的类

    引导目录: Hibernate 系列教程 目录 前言: 通过上一篇的增删改查小练习之后,咱们大概已经掌握了Hibernate的基本用法. 我们发现,在调用Hibernate API的过程中,虽然Hib ...

  3. 攻城狮在路上(壹) Hibernate(十五)--- Hibernate的高级配置

    一.配置数据库连接池: 1.使用默认的数据库连接池: Hibernate提供了默认了数据库连接池,它的实现类为DriverManegerConnectionProvider,如果在Hibernate的 ...

  4. 【转】Hibernate 配置

    转自:http://www.blogjava.net/19851985lili/articles/108128.html 由于Hibernate是为了能在各种不同环境下工作而设计的, 因此存在着大量的 ...

  5. 配置和创建一个hibernate简单应用

    1.配置 到http://hibernate.org/orm/下载hibernate包然后解压 在eclipse中新建一个java project,如名为hibernate_test 再所建工程中新建 ...

  6. Hibernate配置文档详解

    Hibernate配置文档有框架总部署文档hibernate.cfg.xml 和映射类的配置文档 ***.hbm.xml hibernate.cfg.xml(文件位置直接放在src源文件夹即可) (在 ...

  7. Hibernate配置Log4J,很有参考价值的

    hibernate3 自带的默认的日志框架是slf4j,hibernate3的slf只是一个日志的接口,而hibernate3 自带默认的日志框架,在实际开发中很少有公司或者是项目中用到,这里记录一种 ...

  8. Spring MVC+Spring +Hibernate配置事务,但是事务不起作用

    最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...

  9. Hibernate 配置 转(http://blog.csdn.net/b671900/article/details/39156065)

    做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再“自己”建立一变VO.意思是,在项目设计时,要么 ...

随机推荐

  1. Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

    本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解. 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端. 代码的所有说明,都直接作为 ...

  2. [Swift]LeetCode575. 分糖果 | Distribute Candies

    Given an integer array with even length, where different numbers in this array represent different k ...

  3. [Swift]LeetCode654. 最大二叉树 | Maximum Binary Tree

    Given an integer array with no duplicates. A maximum tree building on this array is defined as follo ...

  4. [Swift]LeetCode984. 不含 AAA 或 BBB 的字符串 | String Without AAA or BBB

    Given two integers A and B, return any string S such that: S has length A + B and contains exactly A ...

  5. Python--(爬虫与数据库的连接)

    (每一天都是属于你的!) Python对于初学后巩固基础的人还是更多的来接触python爬虫会更好一些,在Python爬虫中包含很多基础部分知识,并且在项目中会提升你的成功感!加油! 我在工作之余时间 ...

  6. PyPI可以使用的几个国内源

    参考 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(dou ...

  7. C++中的to_string()函数[C++11支持]

    C++ -> 字符串库 -> std::basic_string 定义于头文件 std::string to_string(int value); (1) (C++11起) std::st ...

  8. 在 Vue 结合 Axios 使用过程 中 post 方法,后台无法接受到数据问题

    关于在 vue 中 使用 axios 相关 bug 首先,我们来看下 axios 的 github 传送门 axios 然后我们再介绍下 axios 的作者的 github 传送门 Matt 最后,我 ...

  9. 使用Spring Cloud搭建服务注册中心

    我们在之前的博客中已经介绍过阿里的分布式服务框架dubbo[Linux上安装Zookeeper以及一些注意事项][一个简单的案例带你入门Dubbo分布式框架],但是小伙伴们应该也看到了,阿里的dubb ...

  10. ASP.NET Core多环境配置文件问题

    前言 在我们开发的过程中,往往会有这几个环境,Dev.QA.Pre和Pro. 当然不同的环境可能大家的叫法会有点不一样. 最常遇到的问题,或许就是不同环境的配置文件问题! 一个环境一个配置文件是很常见 ...