博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate入门实例
阅读量:4361 次
发布时间:2019-06-07

本文共 6638 字,大约阅读时间需要 22 分钟。

1. 环境配置

1.1 hiberante环境配置

hibernate可实现面向对象的数据存储。hibernate的官网: 官网上选择hibernate ORM,可以下载最新的hibernate,还有配套的document教程  。下载到的hibernate文件夹中有document文档(hibernate\documentation\manual\en-US\html_single)。发现hibernate4.3.1的文件夹中的文档和网站上提供的答案不太一样,官网的文档更详细一些,还附有toturial的源代码。

打开eclipse->windows->preferences->java->build path->user libraries,点击new,新建一个library,可取名为hibernate。点击Add JARs,选择hibernate->lib->required中的所有jar文件,另外还需要加上数据库的connector文件。因为使用的是mysql,所以我这里用到的mysql-connector-java的jar文件。这个jar文件从哪里得到呢?安装mysql服务器产生的文件夹里面是没有jar文件的。我们需要另下载一个MySQL的JDBC jar包。可以从mysql的官网上下载:http://dev.mysql.com/downloads/connector/j/ 下载后得到一个msi文件,双击及可安装。安装后,默认会产生文件夹C:\Program Files (x86)\MySQL\MySQL Connector J ,这里就有一个mysql-connector-java-x.x.x-bin.jar包了。

1.2 mysql数据库配置

安装mysql服务器,设置root的密码为root。启动mysql服务器,新建数据库hibernate,并新建表student。

1
2
3
4
5
# mysql -uroot -proot
>
create 
database 
hiberante;
> use hibernate;
>
create 
table 
student(id
int 
primary 
key
,
name 
varchar
(20), age
int
);
> quit;

2. 实例代码

新建一个java工程,假设取名为HibernateHelloWorld。在src下新那一个package,可取名为com.sun.hibernate.model

2.1 类代码

新建一个简单的类,放在com.sun.hibernate.model包下。内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package 
com.sun.hibernate.model;
 
public 
class 
Student {
    
private 
int 
id;
    
private 
String name;
    
private 
int 
age;
 
    
public 
int 
getId() {
        
return 
id;
    
}
    
public 
void 
setId(
int 
id) {
        
this
.id = id;
    
}
    
public 
String getName() {
        
return 
name;
    
}
    
public 
void 
setName(String name) {
        
this
.name = name;
    
}
    
public 
int 
getAge() {
        
return 
age;
    
}
    
public 
void 
setAge(
int 
age) {
        
this
.age = age;
    
}
 
}

2.2 配置hibernate配置文件

hibernate\projec\etc中的hiberante.cfg.xml可以作为hibernate的配置文档,或者可使用hibernate\documentation\manual\en-US\html_single\index.html作为模板。在src文件夹下新建一个文件,并命名为hibernate.cfg.xml。(不可命名为其他文件名)最基础的配置文件可参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version=
'1.0' 
encoding=
'utf-8'
?>
<!DOCTYPE hibernate-configuration PUBLIC
        
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        
""
>
     
<hibernate-configuration>
    
<session-factory>
     
    
<!-- Database connection settings -->
    
<property name=
"connection.driver_class"
>com.mysql.jdbc.Driver</property>
    
<property name=
"connection.url"
>jdbc:mysql:
//localhost/hibernate</property>
    
<property name=
"connection.username"
>root</property>
    
<property name=
"connection.password"
>root</property>
         
    
<!-- JDBC connection pool (use the built-in) -->
    
<!-- <property name=
"connection.pool_size"
>
1
</property> -->
         
    
<!-- SQL dialect -->
    
<property name=
"dialect"
>org.hibernate.dialect.MySQLDialect</property>
         
    
<!-- Echo all executed SQL to stdout -->
    
<property name=
"show_sql"
>
true
</property>
         
    
<!-- Enable Hibernate's automatic session context management -->
    
<!--<property name=
"current_session_context_class"
>thread</property>-->
         
    
<!-- Drop and re-create the database schema on startup -->
    
<!-- <property name=
"hbm2ddl.auto"
>create</property> -->
         
    
<!-- Disable the second-level cache -->
    
<property name=
"cache.provider_class"
>org.hibernate.cache.NoCacheProvider</property>
     
    
<mapping resource=
"com/sun/hibernate/model/Student.hbm.xml"
/>
         
    
</session-factory>
</hibernate-configuration>

mapping resource处的值可根据包名和类名做修改。若类名为Student,则此处的类配置文件必为:Student.hbm.xml。

2.3 类mapping文件

新建一个文件,命名为Student.hbm.xml,放在com.sun.hibernate.model包下。内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version=
"1.0" 
encoding=
"UTF-8"
?>
<!DOCTYPE hibernate-mapping PUBLIC
    
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    
""
>
 
<hibernate-mapping
package
=
"com.sun.hibernate.model"
>
    
<
class 
name=
"Student"
>
        
<id name=
"id"
></id>
        
<property name=
"name"
></property>
        
<property name=
"age"
></property>
    
</
class
>
</hibernate-mapping>

注意文件开始处的配置,此处与hibernate.cfg.xml不一样。如果配置的与hiberante.cfg.xml一样,运行时会提示错误:“文档根元素 "hibernate-mapping" 必须匹配 DOCTYPE 根 "hibernate-configuration"  ”

2.4 StudentTest测试类

新增Student.java的junit测试类StudentTest.java,放在com.sun.hibernate.model包下代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package 
com.sun.hibernate.model;
 
import 
org.hibernate.Session;
import 
org.hibernate.SessionFactory;
import 
org.hibernate.cfg.Configuration;
 
public 
class 
StudentTest {
 
    
public 
static 
void 
main(String[] args){
        
Student s =
new 
Student();
        
s.setId(
1
);
        
s.setName(
"s1"
);
        
s.setAge(
1
);
         
        
Configuration cfg =
new 
Configuration();
        
SessionFactory sf = cfg.configure().buildSessionFactory();
         
        
Session session = sf.openSession();
        
session.beginTransaction();
        
session.save(s);
        
session.getTransaction().commit();
        
session.close();
        
sf.close();    
    
}
}

2.5. 运行结果

运行StudentTest.java这个类,虽然提示输入成功。去数据库查询后,可发现数据已存储到student数据表中。虽然myeclipse会提示buildSessionFactory()这个函数被deprecated,但实际上程序还是可以运行成功的。

3. 使用annotation

因为使用annotation比较方便,使用annotation就可以不用写XXX.hbm.xml文件了。

3.1 新建类

敲@后应该出现提示的,如果没有出现,在Window->Preferences->Java->Editor->Content Assist,在Auto activation triggers forJava中增加@即可。Teacher.java类与Student类内容基本相同,以@开头的内容为annotation。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package 
com.sun.hibernate.model;
 
import 
javax.persistence.Entity;
import 
javax.persistence.Id;
 
@Entity
public 
class 
Teacher {
     
    
@Id
    
public 
int 
getId() {
        
return 
id;
    
}
    
public 
void 
setId(
int 
id) {
        
this
.id = id;
    
}
    
public 
String getName() {
        
return 
name;
    
}
    
public 
void 
setName(String name) {
        
this
.name = name;
    
}
    
public 
int 
getAge() {
        
return 
age;
    
}
    
public 
void 
setAge(
int 
age) {
        
this
.age = age;
    
}
    
public 
int 
getTitle() {
        
return 
title;
    
}
    
public 
void 
setTitle(String title) {
        
this
.title = title;
    
}
     
    
private 
int 
id;
    
private 
String name;
    
private 
int 
age;
    
private 
String title;
     
}

3.2 更新hibernate.cfg.xml

在原hibernate.cfg.xml文件的mapping以下标红内容。

1
2
<mapping resource=
"com/sun/hibernate/model/Student.hbm.xml"
/>
<mapping
class
=
"com.sun.hiberante.model.Teacher"
/>

4.3 新建TeacherTest.java类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import 
org.hibernate.SessionFactory;
import 
org.hibernate.cfg.AnnotationConfiguration;
import 
org.hibernate.cfg.Configuration;
 
public 
class 
TeacherTest {
 
    
public 
static 
void 
main(String[] args){
        
Teacher t =
new 
Teacher();
        
t.setId(
1
);
        
t.setName(
"t1"
);
        
t.setAge(
1
);
        
t.setTitle(
"middel"
);
         
        
Configuration cfg =
new 
AnnotationConfiguration();
        
SessionFactory sf = cfg.configure().buildSessionFactory();
        
Session session = sf.openSession();
        
session.beginTransaction();
        
session.save(t);
        
session.getTransaction().commit();
        
session.close();
        
sf.close();
    
}
 
}

 3.3 运行

在数据库中新建teacher数据表:

1
2
3
4
# mysql -uroot -proot
> use hibernate;
> create table teacher(id
int 
primary key, name varchar(
20
), age
int
, title varchar(
20
));
> quit;

运行TeacherTest.java这个类,虽然提示输入成功。去数据库查询后,可发现数据已存储到teacher数据表中。

转载于:https://www.cnblogs.com/jin256/p/3956361.html

你可能感兴趣的文章
Redis的简单动态字符串实现
查看>>
putty network error:software caused connection abort
查看>>
存储过程 <3> 和函数的区别
查看>>
高级service之ipc ADIL用法
查看>>
Django框架-基础篇
查看>>
Leetcode: Binary Tree Maximum Path Sum
查看>>
通过虚拟环境创建并开始一个django
查看>>
关于 input[type="button"] , button
查看>>
Android ViewDragHelper全然解析 自己定义ViewGroup神器
查看>>
c++ 基础 const char* 转 char*
查看>>
JS-- 小细节--你悟到了什么?
查看>>
收款 借贷
查看>>
Gson关于抽象类的序列化与反序列化
查看>>
Java面向对象之类和对象
查看>>
Oracle数据库提权(dba权限执行系统命令)
查看>>
Hydra爆破神器使用
查看>>
java.util.zip.ZipException: duplicate entry(重复依赖多版本的类库)
查看>>
Run MVC in older version of IIS
查看>>
Ajax 监听
查看>>
隐藏"站长统计"图标
查看>>