一、目录结构:
二、相关代码:
<1> 、DAO
<1> 、DAO
package
com.xh.hibernate.dao;
public
interface
DAO {
}
package
com.xh.hibernate.dao;
import
java.util.List;
import
com.xh.hibernate.vo.User;
public
interface
UserDAO
extends
DAO {
public
List getUsers();
public
User getUser(Integer userId);
public
void
saveUser(User user);
public
void
removeUser(Integer userId);
public
void
updateUser(User user);
}
<2>
、UserDAOImpl
package
com.xh.hibernate.dao.impl;
import
java.util.List;
import
org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import
com.xh.hibernate.dao.UserDAO;
import
com.xh.hibernate.vo.User;
public
class
UserDAOImpl
extends
HibernateDaoSupport
implements
UserDAO {
private
Log
log
= LogFactory.getLog(UserDAOImpl.
class
);
public
List getUsers() {
return
getHibernateTemplate().find(
"from User"
);
}
public
User getUser(Integer id) {
return
(User) getHibernateTemplate().get(User.
class
, id);
}
public
void
saveUser(User user) {
getHibernateTemplate().saveOrUpdate(user);
if
(
log
.isDebugEnabled()) {
log
.debug(
"userId set to: "
+ user.getId());
}
}
public
void
removeUser(Integer id) {
Object user = getHibernateTemplate().load(User.
class
, id);
getHibernateTemplate().delete(user);
}
public
void
updateUser(User user) {
getHibernateTemplate().update(user);
if
(
log
.isDebugEnabled()) {
log
.debug(
"update set to: "
+ user.getId());
}
}
}
<1>
、AbstractUser
package
com.xh.hibernate.vo;
import
java.io.Serializable;
public
abstract
class
AbstractUser
implements
Serializable {
private
int
hashValue
= 0;
private
java.lang.Integer
id
;
private
java.lang.String
firstname
;
private
java.lang.String
lastname
;
public
AbstractUser() {
}
public
AbstractUser(java.lang.Integer id) {
this
.setId(id);
}
public
java.lang.Integer getId() {
return
id
;
}
public
void
setId(java.lang.Integer id) {
this
.
hashValue
= 0;
this
.
id
= id;
}
public
java.lang.String getFirstname() {
return
this
.
firstname
;
}
public
void
setFirstname(java.lang.String firstname) {
this
.
firstname
= firstname;
}
public
java.lang.String getLastname() {
return
this
.
lastname
;
}
public
void
setLastname(java.lang.String lastname) {
this
.
lastname
= lastname;
}
public
boolean
equals(Object rhs) {
if
(rhs ==
null
)
return
false
;
if
(!(rhs
instanceof
User))
return
false
;
User that = (User) rhs;
if
(
this
.getId() ==
null
|| that.getId() ==
null
)
return
false
;
return
(
this
.getId().equals(that.getId()));
}
public
int
hashCode() {
if
(
this
.
hashValue
== 0) {
int
result = 17;
int
idValue =
this
.getId() ==
null
? 0 :
this
.getId().hashCode();
result = result * 37 + idValue;
this
.
hashValue
= result;
}
return
this
.
hashValue
;
}
}
<2>
、User
package
com.xh.hibernate.vo;
import
java.io.Serializable;
public
class
User
extends
AbstractUser
implements
Serializable {
private
static
final
long
serialVersionUID
= 7867396135472865699L;
public
User() {
}
public
User(java.lang.Integer id) {
super
(id);
}
}
<3>
、User.hbm.xml
<?
xml
version
=
"1.0"
encoding
=
"GBK"
?>
<!
DOCTYPE
hibernate-mapping
PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<
hibernate-mapping
package
=
"com.xh.hibernate.vo"
>
<
class
name
=
"User"
table
=
"user_tab"
>
<
id
name
=
"id"
column
=
"id"
type
=
"integer"
>
<
generator
class
=
"increment"
/>
</
id
>
<
property
name
=
"firstname"
column
=
"firstname"
type
=
"string"
not-null
=
"true"
/>
<
property
name
=
"lastname"
column
=
"lastname"
type
=
"string"
not-null
=
"true"
/>
</
class
>
</
hibernate-mapping
>
<1>
、UserManager
package
com.xh.spring.service;
import
java.util.List;
import
com.xh.hibernate.vo.User;
public
interface
UserManager {
public
List getUsers();
public
User getUser(String s);
public
void
saveUser(User user);
public
void
removeUser(String s);
public
void
updateUser(User use);
}
<2>、
UserManagerImpl
package
com.xh.spring.service.impl;
import
java.util.List;
import
org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory;
import
com.xh.hibernate.dao.UserDAO;
import
com.xh.hibernate.vo.User;
import
com.xh.spring.service.UserManager;
public
class
UserManagerImpl
implements
UserManager {
private
static
Log
log
;
private
UserDAO
dao
;
public
UserManagerImpl() {
}
public
void
setUserDAO(UserDAO dao) {
this
.
dao
= dao;
}
public
List getUsers() {
return
dao
.getUsers();
}
public
User getUser(String userId) {
User user =
dao
.getUser(Integer.valueOf(userId));
if
(user ==
null
)
log
.warn(
"userId '"
+ userId +
"' not found in database."
);
return
user;
}
public
void
saveUser(User user) {
dao
.saveUser(user);
}
public
void
removeUser(String userId) {
dao
.removeUser(Integer.valueOf(userId));
}
public
void
updateUser(User user) {
dao
.updateUser(user);
}
static
{
log
= LogFactory
.getLog(com.xh.spring.service.impl.UserManagerImpl.
class
);
}
}
<3>、UserManagerTest
package
com.xh.junit;
import
java.util.List;
import
junit.framework.TestCase;
import
org.apache.commons.logging.Log;
import
org.apache.commons.logging.LogFactory;
import
org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
import
com.xh.hibernate.vo.User;
import
com.xh.spring.service.UserManager;
public
class
UserManagerTest
extends
TestCase {
private
static
Log
log
= LogFactory.getLog(UserManager.
class
);
private
ApplicationContext
ctx
;
private
User
user
;
private
UserManager
mgr
;
protected
void
setUp()
throws
Exception {
String paths[] = {
"/applicationContext.xml"
};
ctx
=
new
ClassPathXmlApplicationContext(paths);
mgr
= (UserManager)
ctx
.getBean(
"userManager"
);
super
.setUp();
}
public
void
testSaveUser() {
user
=
new
User();
user
.setFirstname(
"
分类
"
);
user
.setLastname(
"
信息
"
);
mgr
.saveUser(
user
);
assertNotNull(
user
.getId());
if
(
log
.isDebugEnabled())
log
.debug(
"removing user..."
);
String userId =
user
.getId().toString();
mgr
.removeUser(userId);
user
=
mgr
.getUser(userId);
assertNull(
"MdlUser object found in database"
,
user
);
}
public
List testGetUsers() {
// ...
return
null
;
}
public
User testGetUser() {
// ...
return
null
;
}
public
void
testUpdateUser() {
// ...
}
public
void
testRemoveUser() {
// ...
}
protected
void
tearDown()
throws
Exception {
user
=
null
;
mgr
=
null
;
super
.tearDown();
}
}
<1>
、applicationContext.xml
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee
=
"http://www.springframework.org/schema/jee"
xsi:schemaLocation
=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"
>
<
bean
id
=
"dataSource"
class
=
"org.apache.commons.dbcp.BasicDataSource"
destroy-method
=
"close"
>
<
property
name
=
"driverClassName"
>
<
value
>
com.mysql.jdbc.Driver
</
value
>
</
property
>
<
property
name
=
"url"
>
<
value
>
jdbc:mysql://192.168.3.110:3306/DBName?useUnicode=true
&
characterEncoding=GBK
</
value
>
</
property
>
<
property
name
=
"username"
>
<
value
>
root
</
value
>
</
property
>
<
property
name
=
"password"
>
<
value
>
root
</
value
>
</
property
>
</
bean
>
<!-- Hibernate SessionFactory -->
<
bean
id
=
"sessionFactory"
class
=
"org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
<
property
name
=
"dataSource"
>
<
ref
local
=
"dataSource"
/>
</
property
>
<
property
name
=
"mappingResources"
>
<
list
>
<
value
>
com/xh/hibernate/vo/User.hbm.xml
</
value
>
</
list
>
</
property
>
<
property
name
=
"hibernateProperties"
>
<
props
>
<
prop
key
=
"hibernate.dialect"
>
org.hibernate.dialect.MySQLDialect
</
prop
>
<
prop
key
=
"hibernate.show_sql"
>
true
</
prop
>
<!--
<prop key="hibernate.hbm2ddl.auto">create</prop>
-->
</
props
>
</
property
>
</
bean
>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<
bean
id
=
"transactionManager"
class
=
"org.springframework.orm.hibernate3.HibernateTransactionManager"
>
<
property
name
=
"sessionFactory"
>
<
ref
local
=
"sessionFactory"
/>
</
property
>
</
bean
>
<!-- Add DAOs here -->
<
bean
id
=
"userDAO"
class
=
"com.xh.hibernate.dao.impl.UserDAOImpl"
>
<
property
name
=
"sessionFactory"
>
<
ref
local
=
"sessionFactory"
/>
</
property
>
</
bean
>
<!-- Add Managers here -->
<
bean
id
=
"userManagerTarget"
class
=
"com.xh.spring.service.impl.UserManagerImpl"
>
<
property
name
=
"userDAO"
>
<
ref
local
=
"userDAO"
/>
</
property
>
</
bean
>
<
bean
id
=
"userManager"
class
=
"org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
>
<
property
name
=
"transactionManager"
>
<
ref
local
=
"transactionManager"
/>
</
property
>
<
property
name
=
"target"
>
<
ref
local
=
"userManagerTarget"
/>
</
property
>
<
property
name
=
"transactionAttributes"
>
<
props
>
<
prop
key
=
"save*"
>
PROPAGATION_REQUIRED
</
prop
>
<
prop
key
=
"remove*"
>
PROPAGATION_REQUIRED
</
prop
>
<
prop
key
=
"update*"
>
PROPAGATION_REQUIRED
</
prop
>
<
prop
key
=
"*"
>
PROPAGATION_REQUIRED,readOnly
</
prop
>
</
props
>
</
property
>
</
bean
>
</
beans
>