一个Hibernate的hello world项目

一个Hibernate的hello world项目

文章来源这里 ,本文大部分都是照抄的啦,因为我当初的目的只是通过动手了解hibernate。

编写的环境:

  • Ubuntu16.04
  • openjdk8
  • mariadb
  • maven

各种安装过程略去。

1. 构建maven项目

1.1 搭建目录结构

cd到想要创建项目的目录,例如/tmp/hibernate,执行下列mvn命令:

$ mvn archetype:generate \
    -DgroupId=com.example \
    -DartifactId=HelloHibernate \
    -DarchetypeArtifactId=maven-archetype-quickstart \
    -DinteractiveMode=false \
$ tree 
.
└── HelloHibernate
    ├── pom.xml
    └── src
        ├── main
        │   └── java
        │       └── com
        │           └── example
        │               └── App.java
        └── test
            └── java
                └── com
                    └── example
                        └── AppTest.java

10 directories, 3 files

创建之后的目录结构如上。

接下来建一个资源目录、编译应该不会报错。

$ mkdir HelloHibernate/src/main/resources
$ cd HelloHibernate
$ mvn compile

1.2 配置pom.xml

用下面的代码替换掉原来的pom.xml。注意mariadb的dialect是后来才支持的,hibernate版本要求要比较新。

<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>HelloHibernate</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>HelloHibernate</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>
        UTF-8
    </project.build.sourceEncoding>
  </properties>

  <build>
    <plugins>
      <!-- enable Java 8 support -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.5.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <!-- this plugin allows us to run 
           project using simple command:
           $ mvn exec:java -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
            <mainClass>com.example.App</mainClass>
          <arguments></arguments>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <!-- Hibernate library -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>5.3.6.Final</version>
    </dependency>

    <!-- needed if you want to use new java.time API -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-java8</artifactId>
      <version>5.3.6.Final</version>
    </dependency>

    <!-- needed if you want to use javax.validation -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>5.2.4.Final</version>
    </dependency>

    <!-- needed if you want to use javax.validation -->
    <dependency>
      <groupId>javax.el</groupId>
      <artifactId>javax.el-api</artifactId>
      <version>2.2.4</version>
    </dependency>

    <!-- PostgreSql driver, if you use another DB change
             this dependency -->
    <dependency>
      <groupId>org.mariadb.jdbc</groupId>
      <artifactId>mariadb-java-client</artifactId>
      <version>1.1.7</version>
    </dependency>

    <!-- Log4j library -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
  </dependencies>
</project>

上面的xml代码添加了各种依赖,替换之后编译、运行,应该能看到Hello World!

$ mvn compile
$ mvn exec:java

2. 配置文件和代码

2.1 log4j配置

在resources目录下新建log4j.xml,内容如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="false"
     xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="file" 
                class="org.apache.log4j.RollingFileAppender">
        <!-- name of log file: -->
        <!-- 日志文件名 -->
        <param name="file" value="hibernate_tutorial.log" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="[%d{HH:mm:ss}] %m%n" />
        </layout>
    </appender>

    <appender name="console" 
                class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" 
                   value="[%d{HH:mm:ss}] %m%n"/>
        </layout>
    </appender>

    <!-- change log level to DEBUG
         if you want more detailed
         logs from Hibernate -->
    <logger name="org.hibernate">
        <level value="ERROR"/>
    </logger>
    
    <!-- log SQL queries executed by
         Hibernate library -->
    <logger name="org.hibernate.SQL">
        <level value="DEBUG"/>
    </logger>

    <!-- log values of SQL queries parameters -->
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder">
        <level value="TRACE" />
    </logger>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="file" />
        <appender-ref ref="console" />
    </root>

</log4j:configuration>

修改App.java,验证log4j的可用性。

package com.example;

import org.apache.log4j.Logger;

public class App 
{
    private static final Logger logger = 
                        Logger.getLogger(App.class);

    public static void main(String[] args)
    {
        logger.debug("Hello, World!");
    }
}

编译运行,你会看到生成了日志文件hibernate_tutorial.log,里面有Hello World。

2.2 准备数据库

建好数据库和表,详细操作略去,本文下面将使用testdb数据库,testtable表,root用户,pass密码。

2.3 配置hibernate

在resources目录下新建hibernate_cfg.xml配置文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration>
  <session-factory>
    <!-- Database connection settings -->
    <property name="hibernate.dialect">org.hibernate.dialect.MariaDBDialect</property>
    <property name="hibernate.connection.driver_class">org.mariadb.jdbc.Driver</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">pass</property>
    <property name="hibernate.connection.url">jdbc:mariadb://127.0.0.1:3306/testdb</property>
    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>
    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
    <!-- Log SQL queries -->
    <!-- 将会把执行的sql语句记录到日志 -->
    <property name="format_sql">true</property>
    <property name="use_sql_comments">true</property>
    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">create</property>
    <!-- MAPPINGS -->
    <!-- 指明需要使用hibernate的类 -->
    <mapping class="com.example.model.TestEntity"/>
  </session-factory>
</hibernate-configuration>

2.4 创建TestEntity类

新建目录src/main/java/com/example/model,编写代码src/main/java/com/example/model/TestEntity.java

package com.example.model;

import javax.persistence.*;

// 看这里,这里,有个注解呀
@Entity
// 又发现一个注解,你猜这是啥
@Table(name = "testtable")
public class TestEntity {
    
   
    @Id
    @GeneratedValue	 // 表示自动生成
    private Long id;

    @Column(unique = true)
    private String name;

    public TestEntity() { }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return String.format("User id: %d, name: %s", getId(), getName());
    }
}

除了使用上面的注解表明entity之外,其实还可以用xml文件,扩展名为.hbm.xml不过注解用得比较多。

编写代码存储Entity

修改App.java如下:

package com.example;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

import com.example.model.*;

public class App 
{
    private static final Logger logger = Logger.getLogger(App.class);

    public static void main(String[] args)
    {
        // read configuration and build session factory
        // 读取配置文件,构建会话工厂
        final SessionFactory sessionFactory = new Configuration()
            .configure("hibernate_cfg.xml")
            .buildSessionFactory();

        // create session, open transaction and save test entity to db
        // 创建会话,创建事务,保存到数据库
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();

        try {
            TestEntity testEntity = new TestEntity();
            testEntity.setName("super foo");

            session.persist(testEntity);
            tx.commit();
        }
        catch (Exception e) {
            tx.rollback();
            logger.error("cannot commit transaction", e);
        }
        finally {
            session.close();
        }

        // clean up
        sessionFactory.close();
    }
}

编译,运行,搞定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值