这个 NamingStrategy 扩展类是 DLOG4J 项目用来自动配置 Hibernate 的 Bean 与表名之间映射关系。
例如 Bean 名为 User,那么对应的表名是 dlog_user ,另外也包含对一些字段名进行映射。
标签: Hibernate NamingStrategy DLOG4J
[1].[代码] DlogNamingStrategy.java 跳至 [1] [2]
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
48
|
/**
* DlogNamingStrategy.java of DLOG4J_E40
* 作者: Winter Lau
* 时间: 2008-1-4
* 项目主页: <a href="http://www.dlog4j.com/">http://www.dlog4j.com</a>
*/
package
com.dlog4j.dbaccess;
import
java.util.HashMap;
import
org.apache.commons.lang.StringUtils;
import
org.hibernate.cfg.ImprovedNamingStrategy;
/**
* DLOG4J项目的表名命名策略
*/
class
DlogNamingStrategy
extends
ImprovedNamingStrategy {
private
final
static
String PREFIX =
"dlog_"
;
private
final
static
String PACKAGE =
"com.dlog4j.beans."
;
private
final
static
String POSTFIX =
"Bean"
;
@Override
public
String classToTableName(String className) {
if
(className.startsWith(PACKAGE))
className = className.substring(PACKAGE.length());
return
PREFIX +
super
.classToTableName(StringUtils.substringBeforeLast(className, POSTFIX));
}
@Override
public
String propertyToColumnName(String propertyName) {
int
idx = propertyName.lastIndexOf(
'.'
);
if
(idx >=
0
)
propertyName = propertyName.substring(idx+
1
);
String cn = properties.get(propertyName);
if
(cn !=
null
)
return
cn;
return
super
.propertyToColumnName(propertyName);
}
/**
* 默认的字段名映射方式
*/
protected
final
static
HashMap<String, String> properties =
new
HashMap<String, String>(){{
put(
"user"
,
"username"
);
put(
"site"
,
"site_name"
);
put(
"parent"
,
"parent_id"
);
}};
}
|
[2].[代码] 使用方法 跳至 [1] [2]
1
|
cfg =
new
Configuration().setNamingStrategy(
new
DlogNamingStrategy()).configure(cfg_path);
|