zoukankan      html  css  js  c++  java
  • 如何程序化的构造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配置,我们需要映射这个类。

    完毕。

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/Jedimaster/p/8746283.html
Copyright © 2011-2022 走看看