转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/hibernate/806.html
由于最新写cocos2dx动作编辑器的解析和框架所以没更新,那么从今天开始继续来学习Hibernate,那么接着第二篇文章讲解,那么首先copy,第二篇的第一个Annotation的项目改个名字“LogForHibernate”;
首先搭建log4j环境;
第一步我们之前设置过的User Libraries继续添加打印日志相关的配置,(ps.其实日志的控制台打印,对于我们Dev来说至关重要,一方面了解当前程序运行的情况即时找到BUG出处~,另外一方面log4j日志能为我们),添加如下jar包到Himi的MyHibernate(自定义的User Libraries):
首先Himi的MyHibernate删除slf4-nop-1.5.8.jar 包,然后换成log4j的实现如下第一个jar包:
第一个jar包 /apache-log4j-1.2.15/log4j-1.2.15.jar
继续添加第二个jar包 /slf4j-1.5.8/slf4j-1.5.8/slf4j-log4j12-1.5.8.jar
(这个slf4j-log4j12-1.5.8.jar,其实就是将slf4j 转换成log4j 日志的“适配器”;)
接下来我们需要配置一下log4j的配置文件,默认这个配置文件名,约定俗成:“log4j.properties”
不用手动创建,直接到如下路径索取:
/hibernate-distribution-3.3.2.GA/project/etc/log4j.properties
copy到项目中即可,与“hibernate.cfg.xml”放置同一级目录,OK,直接运行项目观察控制台,会发现很多debug信息,有些我们先用不到,OK,打开log4j.properties配置文件,改成如下:
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
41
42
43
44
45
46
47
|
### direct log messages to stdout ###
log4j
.
appender
.
stdout
=
org
.
apache
.
log4j
.
ConsoleAppender
log4j
.
appender
.
stdout
.
Target
=
System
.
out
log4j
.
appender
.
stdout
.
layout
=
org
.
apache
.
log4j
.
PatternLayout
log4j
.
appender
.
stdout
.
layout
.
ConversionPattern
=
%
d
{
ABSOLUTE
}
%
5p
%
c
{
1
}
:
%
L
-
%
m
%
n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j
.
rootLogger
=
warn
,
stdout
#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug
### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug
### log just the SQL
#log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug
### log schema export/update ###
log4j
.
logger
.
org
.
hibernate
.
tool
.
hbm2ddl
=
debug
### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug
### log cache activity ###
#log4j.logger.org.hibernate.cache=debug
### log transaction activity
#log4j.logger.org.hibernate.transaction=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
|
这里我们只留下,log4j.logger.org.hibernate.tool.hbm2ddl=debug ,DDL的输出即可;
OK,Himi再次运行项目打印如下:
1
2
3
4
5
6
7
|
00
:
58
:
31
,
450
INFO
SchemaExport
:
226
-
Running
hbm2ddl
schema
export
00
:
58
:
31
,
451
DEBUG
SchemaExport
:
242
-
import
file
not
found
:
/
import
.
sql
00
:
58
:
31
,
452
INFO
SchemaExport
:
251
-
exporting
generated
schema
to
database
00
:
58
:
31
,
452
DEBUG
SchemaExport
:
377
-
drop
table
if
exists
People
00
:
58
:
31
,
462
DEBUG
SchemaExport
:
377
-
create
table
People
(
id
integer
not
null
,
age
integer
not
null
,
birthday
varchar
(
255
)
,
name
varchar
(
255
)
,
title
varchar
(
255
)
,
primary
key
(
id
)
)
00
:
58
:
31
,
565
INFO
SchemaExport
:
268
-
schema
export
complete
Hibernate
:
insert
into
People
(
age
,
birthday
,
name
,
title
,
id
)
values
(
?
,
?
,
?
,
?
,
?
)
|
这次看起来就非常清晰了。
//————–Himi 分割线—————
下面介绍 Junit的环境搭建;
copy 刚才的”LogForHibernate”项目,换名:“JunitForHibernate”;
OK,添加所需资源jar包,这里Himi添加到项目path中的为:junit-4.7.jar 包;
下一步,右键new->JUnit Test Case,如下图:
然后选择我们需要测试的方法:
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
41
42
43
44
|
package
com
.
himi
;
import
org
.
hibernate
.
Session
;
import
org
.
hibernate
.
SessionFactory
;
import
org
.
hibernate
.
cfg
.
AnnotationConfiguration
;
import
org
.
junit
.
AfterClass
;
import
org
.
junit
.
BeforeClass
;
import
org
.
junit
.
Test
;
public
class
PeopleTest
{
public
static
SessionFactory
sf
=
null
;
//在类始化之前执行的方法
@
BeforeClass
public
static
void
beforeClass
(
)
{
sf
=
new
AnnotationConfiguration
(
)
.
configure
(
)
.
buildSessionFactory
(
)
;
}
@
Test
public
void
test
(
)
{
People
people
=
new
People
(
)
;
// 新建我们需要存储的类对象,并且设置其对象的一些属性
people
.
setId
(
1
)
;
people
.
setName
(
"Himi"
)
;
people
.
setAge
(
23
)
;
people
.
setTitle
(
"CTO"
)
;
people
.
setBirthday
(
"1990-01-01"
)
;
// 这里注意了,cfg.configure()读取配置文件的时候,如果你的hibernate的文件名不采用默认的“hibernate.cfg.xml”的话,那么这里传入你定义的配置文件路径
// buildSessionFactory();得到一个创建Session的工场
Session
ss
=
sf
.
openSession
(
)
;
// 这里的Session导入import
// org.hibernate.Session;不要使用class经典的,因为可能会过时
ss
.
beginTransaction
(
)
;
// OK,将操作放入事务中
ss
.
save
(
people
)
;
// 保存你的对象
ss
.
getTransaction
(
)
.
commit
(
)
;
// 得到事务并提交
ss
.
close
(
)
;
// Session关闭
}
//在类结束之后执行的方法
@
AfterClass
public
static
void
afterClass
(
)
{
sf
.
close
(
)
;
// 工厂关闭
}
}
|
OK,就到这里,感冒了 早睡觉~晚安 各位;