如何程序化的构造Hibernate配置 // How to initialize Hibernate programmably
Java为什么被人诟病,因为一切都是过度设计。Hibernate其实就是实现了一套JPA的ORM,不过用极度冗赘的配置方式,nodejs Sequelize.js,甚至Python SQLAlchemy,都比Java的实现优雅的多。当然这个是历史问题了,就没必要抱怨了。
许多时候,我们不需要用hibernate.cfg.xml,并没有程序化的简单可控。
下面开始实战。
假设使用了Maven系统,首先确认hibernate-core已经作为依赖添加到pom.xml。
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>5.2.16.Final</version>
- </dependency>
下面添加一个User类作为范例。
- package com.jcube.mies.admin;
- import java.util.UUID;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.Table;
- @Entity
- @Table(name = "User")
- public class User {
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- @Column(name = "id", unique = true, nullable = false)
- private Long id;
- @Column(name = "uuid", length = 32, unique = true, nullable = false)
- private UUID uuid;
- @Column(name = "name", length = 32, unique = true, nullable = false)
- private String name;
- public User() {
- uuid = UUID.randomUUID();
- }
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- public UUID getUuid() {
- return uuid;
- }
- public void setUuid(UUID uuid) {
- this.uuid = uuid;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
对于Annoataion的用法,可以参考JPA和Hibernate的文档。
这里用于示范的User类有3个成员变量,分别是id,这个是数据库的主键;然后还有个uuid,使用的是Java的UUID类型,全局唯一标示符;还有个name,一个字符串,代表名字。
其实通过这个类,已经足够让Hibernate生成数据表了。
下面程序化的构造SessionFactory,这个算是Hibernate的基本API接口。
- package com.sample;
- public class Launcher {
- private static SessionFactory sessionFactory = null;
- public static void main(String[] args) {
- // Create the session factory.
- try {
- Configuration cfg = new Configuration();
- cfg.setProperty("hibernate.show_sql", "true");
- cfg.setProperty("hibernate.format_sql", "true");
- cfg.setProperty("hibernate.use_sql_comments", "true");
- cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
- cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
- cfg.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/testdb");
- cfg.setProperty("hibernate.connection.username", "testuser");
- cfg.setProperty("hibernate.connection.password", "testpwd");
- cfg.setProperty("hibernate.hbm2ddl.auto", "create");
- cfg.addAnnotatedClass(User.class);
- StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties());
- sessionFactory = cfg.buildSessionFactory(builder.build());
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
一堆的setProperty()配置。
hibernate.show_sql,
hibernate.format_sql
use_sql_comments
这里设置为true,用户调试输出。
然后用户配置数据库,包括地址,用户名密码等等。
最后直接调用addAnnotatedClass(),用来直接告诉Hibernate配置,我们需要映射这个类。
完毕。
如何程序化的构造Hibernate配置 // How to initialize Hibernate programmably的更多相关文章
- Hibernate配置方式
Hibernate配置方式 Hibernate给人的感受是灵活的,要达到同一个目的,我们可以使用几种不同的办法.就拿Hibernate配置来说,常用的有如下三种方式,任选其一. 在 hibernate ...
- Hibernate 系列 04 - Hibernate 配置相关的类
引导目录: Hibernate 系列教程 目录 前言: 通过上一篇的增删改查小练习之后,咱们大概已经掌握了Hibernate的基本用法. 我们发现,在调用Hibernate API的过程中,虽然Hib ...
- 攻城狮在路上(壹) Hibernate(十五)--- Hibernate的高级配置
一.配置数据库连接池: 1.使用默认的数据库连接池: Hibernate提供了默认了数据库连接池,它的实现类为DriverManegerConnectionProvider,如果在Hibernate的 ...
- 【转】Hibernate 配置
转自:http://www.blogjava.net/19851985lili/articles/108128.html 由于Hibernate是为了能在各种不同环境下工作而设计的, 因此存在着大量的 ...
- 配置和创建一个hibernate简单应用
1.配置 到http://hibernate.org/orm/下载hibernate包然后解压 在eclipse中新建一个java project,如名为hibernate_test 再所建工程中新建 ...
- Hibernate配置文档详解
Hibernate配置文档有框架总部署文档hibernate.cfg.xml 和映射类的配置文档 ***.hbm.xml hibernate.cfg.xml(文件位置直接放在src源文件夹即可) (在 ...
- Hibernate配置Log4J,很有参考价值的
hibernate3 自带的默认的日志框架是slf4j,hibernate3的slf只是一个日志的接口,而hibernate3 自带默认的日志框架,在实际开发中很少有公司或者是项目中用到,这里记录一种 ...
- Spring MVC+Spring +Hibernate配置事务,但是事务不起作用
最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...
- Hibernate 配置 转(http://blog.csdn.net/b671900/article/details/39156065)
做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再“自己”建立一变VO.意思是,在项目设计时,要么 ...
随机推荐
- iOS URL Schemes与漏洞的碰撞组合
iOS URL Schemes与漏洞的碰撞组合 前言 iOS URL Schemes,这个单词对于大多数人来说可能有些陌生,但是类似下面这张图的提示大部分人应该都经常看见: 今天要探究的就是:了解iO ...
- idea之debug
[转载]原文地址:https://www.cnblogs.com/nihaorz/p/7613967.html 在Intellij IDEA中使用Debug Debug用来追踪代码的运行流程,通常在程 ...
- [Bash]LeetCode195. 第十行 | Tenth Line
Given a text file file.txt, print just the 10th line of the file. Example: Assume that file.txt has ...
- [C#]批量修改文件后缀名
代码: /// <summary> /// 修改文件后缀 /// </summary> /// <param name="extension"> ...
- 知识扩展--if...else...与switch...case...的执行原理
一.简述 编程语言中的条件分支结构有两种:if-else和switch-case,这两种条件分支之间可以相互转换,但是也存在一些区别,那么什么时候该用if-else,什么时候该用switch-case ...
- Java并发编程-volatile可见性的介绍
要学习好Java的多线程,就一定得对volatile关键字的作用机制了熟于胸.最近博主看了大量关于volatile的相关博客,对其有了一点初步的理解和认识,下面通过自己的话叙述整理一遍. 有什么用? ...
- nginx 关于client_max_body_size client_body_buffer_size配置
最近生产环境在这两个参数之间遇到过几次坑.这里记录下.client_max_body_sizeclient_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,在“Conten ...
- python获取当前路径
python获取当前执行命令的路径: #!/usr/bin/env python # -*# coding: utf-8 -*- import os print os.getcwd() python获 ...
- 【CDH篇】---CDH从初识到搭建到应用
一.前述 CDH(Cloudera's Distribution, including Apache Hadoop)是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache ...
- Python内置函数(45)——object
英文文档: class objectReturn a new featureless object. object is a base for all classes. It has the meth ...