idea 2017 创建java_IntelliJ IDEA 2017创建第一个Hibernate 5程序

本文在IntelliJ IDEA 2017.2.1下创建第一个Hibernate 5.2.10项目。本文只介绍Hibernate作为ORM框架如何以面向对象的思想操纵数据库,所以只是建立Java项目;如果将Hibernate应用于Java Web三层结构中Dao层(数据访问层),则需要建立Java Web项目。

一、准备工作

本例程所使用的版本:

IntelliJ IDEA 2017.2.1 + MySQL Community Server 5.7.19 + Hibernate-Release-5.2.10.Final + Mysql-Connector-Java-5.1.43 + JUnit 4.12(Hibernate作为数据访问层框架,故本机需要安装数据库和在项目中添加相应的JDBC驱动)。

所需IDE和数据库软件:

IntelliJ IDEA 2017下载

MySQL Community Server 5.7 下载

所需框架和JAR包:

Hibernate 5下载

MySQL-JDBC驱动

JUnit4

二、创建项目流程

新建项目:

4627b0dd38baa88cef24ceea567b6625.png

选择Java(或者Java Enterprise),勾选“Hibernate”。由于IDEA集成了Hibernate,可以选择Hibernate集成的Hibernate 5.2.10,也可以选择自己下载好的Hibernate框架。若选择“Download”,则点击Next:

0c3dfb2173f39c4ffdef94f93c976433.png

或者选择“Use library”,则使用本地已经下载好的lib,点击“Create”直接导入即可:

f3f9e9b609e608c41b1b9bd9398b0ecd.png

一般只需导入 hibernate-5.2.10\required\下10个JAR包即可:

d63ad1bff5af7a4567b8ed9bdf6f66ab.png

点击Next:

a93b5abff937586e974b2775f6632c3c.png

设置项目名和项目所在位置,然后点击Finish:

2c788b7c4eaeec080ad40dded3b0687d.png

项目构建完成后的项目结构如下,会自动生成hibernate.cfg.xml文件和Main.java(可以删除此文件)文件:

9e0f7d22a09dc4134b81d76265f36840.png

依次打开“File > Project Structure”:

e2684a1297f2794b84527f13f9c2a3fd.png

点击“Modules > Dependencies”,点击“+”,添加MySQL-JDBC驱动和JUnit4:

b5e28d9884d287abf65668eba976e897.png

点击New Library,选择从Maven仓库(Maven仓库即类似于手机上的应用商店,Maven仓库把绝大多数jar包和框架集中起来便于用户下载使用)下载jar包还是导入本地已经下载的jar包:

03deb0e1a4f46e584d9f059aef85a96e.png

若从Maven下载jar包,则在搜索栏中输入jar包名,支持模糊搜索:

93ff30f6c12cbc199bf2d91cbda8113b.png

点击Add Selected:

7bac517098b04920042dda56c1826a25.png

点击OK:

7da935a1de599a679e80591ac8e5376c.png

所有jar包添加成功:

95b91d75a79f760775913d7729ce9c2d.png

修改hibernate.cfg.xml文件,并创建实体类StudentEntity.java文件和与实体对应的ORM映射StudentEntity.hbm.xml文件,创建一个测试类StudentTest.java:

74d463a91de677b903aaa8359a29a628.png

StudentEntity.java代码如下:packagecom.rcnjtech.entity;

importjava.util.Date;

publicclassStudentEntity {

privateint id;

private String name;

private String sex;

//注意使用java.util.Date包下的日期类型

private Date birthday;

publicStudentEntity() {

}

publicStudentEntity(int id, String name, String sex, Date birthday) {

this.id = id;

this.name = name;

this.sex = sex;

this.birthday = birthday;

}

publicintgetId() {

return id;

}

publicvoidsetId(int id) {

this.id = id;

}

public String getName() {

return name;

}

publicvoidsetName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

publicvoidsetSex(String sex) {

this.sex = sex;

}

public Date getBirthday() {

return birthday;

}

publicvoidsetBirthday(Date birthday) {

this.birthday = birthday;

}

}

StudentEntity.hbm.xml代码如下:<?xml  version="1.0" encoding="utf-8" ?>

hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

hibernate.cfg.xml代码如下:<?xml  version='1.0' encoding='utf-8'?>

hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD//EN"

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

jdbc:mysql://localhost:3306/mvc?useUnicode=true&characterEncoding=UTF-8

com.mysql.jdbc.Driver

root

5820MS

org.hibernate.dialect.MySQL5Dialect

true

true

create

StudentTest.java代码如下:importcom.rcnjtech.entity.StudentEntity;

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.Transaction;

importorg.hibernate.cfg.Configuration;

importorg.junit.After;

importorg.junit.Before;

importorg.junit.Test;

importjava.util.Date;

publicclassStudentTest {

private SessionFactory sessionFactory;

private Session session;

private Transaction transaction;

@Before

publicvoidinit() {

Configuration config = new Configuration().configure();

sessionFactory = config.buildSessionFactory();

session = sessionFactory.openSession();

transaction = session.beginTransaction();

}

@After

publicvoiddestroy() {

transaction.commit();

session.close();

sessionFactory.close();

}

@Test

publicvoidtestStudent() {

StudentEntity student = new StudentEntity(1, "张三", "男", new Date());

session.save(student);

}

}

进行单元测试,运行StudentTest.java里的testStudent()方法,即向数据库创建表并添加一条数据,单元测试通过:

0ef3e9036e42c820179b42d768b896f5.png

打开MySQL 5.7 Command Line Client,发现MVC数据库下成功建立了Student表,同时也成功向Student表中添加了一条数据:1 | 张三 | 男 | 2017-08-03 22:01:57。

f548c24761cbaa11f984cf26bb21c6da.png

至此,在IntelliJ IDEA 2017.2.1下的第一个Hibernate 5.2.10项目就成功配置并运行了。

三、遇到一些问题

1、单元测试通过,并且也成功向数据库中添加表和数据,但项目仍有报错的地方,但此处的可以忽略,因为并没有错,可按照下图所示方法消除红色信息。

d352ea79b89bd5d06be5b36d444108a1.png

2、关于Dialect属性的设置。当dialect设置为org.hibernate.dialect.MySQLDialect时,单元测试插入一条数据,发现会报了很多错误,令人头皮发麻。

11b32abd59fb02ad3c5ea9666ce17f56.png

f4ad7df3dab1d2174458b2ccd36e1ebe.png

5e028bc16cf3c1172525656934ac2e3c.png

然而当dialect设置为org.hibernate.dialect.MySQL5Dialect时,单元测试正常通过,数据库里也成功插入一条数据。

7aa8b8683fc3bf43f59d8c9b37cac0f2.png

ad5b34afd9a2bacb648c7cd88dd94f5b.png

查看org.hibernate.dialect.MySQL5Dialect和org.hibernate.dialect.MySQLDialect源码,MySQL5Dialect继承于MySQLDialect,并且从类注释可以看出MySQL5Dialect适用于MySQL 5.x版本,MySQLDialect适用于MySQL 5之前的版本。

org.hibernate.dialect.MySQL5Dialect.java:/**

* An SQL dialect for MySQL 5.x specific features.

*

* @author Steve Ebersole

*/

publicclassMySQL5DialectextendsMySQLDialect {

....

}

org.hibernate.dialect.MySQLDialect.java:

/**

* An SQL dialect for MySQL (prior to 5.x).

*

* @author Gavin King

*/

@SuppressWarnings("deprecation")

publicclassMySQLDialectextendsDialect {

....

}

故当MySQL 版本在5.0以上时dialect属性建议设置为org.hibernate.dialect.MySQL5Dialect。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值