一个Hibernate的hello world项目
程序员文章站
2022-03-02 22:41:08
...
一个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();
}
}
编译,运行,搞定。
上一篇: mavenWebStageDay19
下一篇: redisWebStageDay18
推荐阅读
-
Hibernate通过SQL查询常量时只返回第一个字符问题的解决方法
-
Docker搭建简单的应用栈与容器Hello World访问详解
-
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
-
java在线运行工具(教你创建一个普通的 Java 项目)
-
VS2010怎么新建包含两个form的HELLO WORLD项目?
-
五个靠谱的在家就能赚钱的网赚项目(总有一个适合你)
-
荐 使用IDEA搭建一个简单的JavaWeb图书管理项目(详细步骤指导、提供源码)
-
一个基于Net Core3.0的WPF框架Hello World实例
-
asp.net core 一个中小型项目实战的起手式——Swagger配置
-
Python编程入门之Hello World的三种实现方式