您的位置:首页 > 编程语言 > Java开发

实例讲解-整合iBATIS和Spring在WEB开发中的应用

2006-10-11 14:28 609 查看
T_USERS 用户信息主表
字段名字段说明字段类型
SQL
CREATE TABLE T_USERS (
userid NUMBER(6,0) NOT NULL,
usertypeid CHAR(2) NOT NULL,
ualias VARCHAR2(20) NOT NULL,
password VARCHAR2(30) NULL,
email VARCHAR2(30) NOT NULL,
realname VARCHAR2(20) NULL
);
CREATE UNIQUE INDEX XAK1T_USERS ON T_USERS
( ualias ASC );
CREATE UNIQUE INDEX XAK2T_USERS ON T_USERS
( email ASC );
ALTER TABLE T_USERS ADD ( PRIMARY KEY (userid) ) ;

T_USER_INFO 用户信息辅表
字段名字段说明字段类型
SQL
CREATE TABLE T_USER_INFO (
userid NUMBER(6,0) NOT NULL,
regdate DATE NULL,
lastlogdate DATE NULL,
logtimes NUMBER(6) NULL
);
ALTER TABLE T_USER_INFO ADD ( PRIMARY KEY (userid) ) ;
ALTER TABLE T_USER_INFO ADD ( FOREIGN KEY (userid) REFERENCES T_USERS ) ;

SEQUENCE Sequence_userid 用户流水号产生
SQL
INCREMENT BY 1
START WITH 1
MAXVALUE 999999
MINVALUE 1
NOCYCLE
NOORDER
;

|-wysm(2)
|-netstar(3)
|-domain(4) (POJO)
|-persistence(4) (持久化层)
|-iface(5) (DAO 接口)
|-sqlmapdao(5) (iBATIS DAO实现)
|-sql(6) (iBATIS sqlmap定义文件)
|-service(4) (FACADE接口)
|-ibatis(5) (FACADE iBATIS实现)
|-test(4)(JAVA环境测试)

com.wysm.netstar.persistence.sqlmapdao.sql/sql-map-config.xml
<!DOCTYPE sqlMapConfig PUBLIC '-//ibatis.apache.org//DTD SQL Map Config 2.0//EN'
'http://ibatis.apache.org/dtd/sql-map-config-2.dtd'>
<sqlMapConfig>
<properties resource='com/wysm/netstar/properties/database.properties'/>
<transactionManager type='JDBC'>
<dataSource type='SIMPLE'>
<property value='${driver}' name='JDBC.Driver'/>
<property value='${url}' name='JDBC.ConnectionURL'/>
<property value='${username}' name='JDBC.Username'/>
<property value='${password}' name='JDBC.Password'/>
</dataSource>
</transactionManager>
<sqlMap resource='com/wysm/netstar/persistence/sqlmapdao/sql/User.xml'/>
<sqlMap resource='com/wysm/netstar/persistence/sqlmapdao/sql/Sequence.xml'/>
<sqlMap resource='com/wysm/netstar/persistence/sqlmapdao/sql/UserInfo.xml'/>
</sqlMapConfig>

数据库连接属性文件 com.wysm.netstar.properties.database.properties
# Database Connectivity Properties
####################################
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:ORA92SER
username=netstar
password=netstar

com.wysm.netstar.persistence.sqlmapdao.sql/Sequence.xml
<!DOCTYPE sqlMap PUBLIC '-//ibatis.apache.org//DTD SQL Map 2.0//EN'
'http://ibatis.apache.org/dtd/sql-map-2.dtd'>
<sqlMap namespace='Sequence'>
<select id='getSequenceUserId' result
select sequence_userid.nextval from dual
</select>
</sqlMap>

com.wysm.netstar.persistence.sqlmapdao.sql/User.xml
<!DOCTYPE sqlMap PUBLIC '-//ibatis.apache.org//DTD SQL Map 2.0//EN'
'http://ibatis.apache.org/dtd/sql-map-2.dtd'>
<sqlMap namespace='User'>
<typeAlias alias='user' type='com.wysm.netstar.domain.User'/>
<select id='getUserByUserAlias' resultparameter/> SELECT
USERID as userId,
UALIAS as userAlias,
PASSWORD as password,
REALNAME as realName,
EMAIL as email,
USERTYPEID as userTypeId
FROM T_USERS
WHERE UALIAS = #userAlias#
</select>
<select id='getUserByUserAliasAndPassword' resultparameter/> SELECT
USERID as userId,
UALIAS as userAlias,
PASSWORD as password,
REALNAME as realName,
EMAIL as email,
USERTYPEID as userTypeId
FROM T_USERS
WHERE UALIAS = #userAlias# AND
PASSWORD = #password#
</select>
<select id='getUserByEmail' resultparameter/> SELECT
USERID as userId,
UALIAS as userAlias,
PASSWORD as password,
REALNAME as realName,
EMAIL as email,
USERTYPEID as userTypeId
FROM T_USERS
WHERE EMAIL=#email#
</select>
<update id='updateUser' parameter/> UPDATE T_USERS SET
UALIAS= #userAlias#,
PASSWORD=#password#,
REALNAME=#realName#,
EMAIL = #email#,
USERTYPEID = #userTypeId#
WHERE USERID = #userId#
</update>
<insert id='insertUser' parameter/> INSERT INTO T_USERS
(USERID,
UALIAS,
PASSWORD,
REALNAME,
EMAIL,
USERTYPEID)
VALUES
(#userId#, #userAlias#,#password#,#realName#, #email#, #userTypeId#)
</insert>
<delete id='deleteUser' parameter/>DELETE FROM T_USERS
WHERE USERID=#userId#
</delete>
<select id='existUserId' parameter/>select count(*) FROM T_USERS
WHERE USERID=#userId#
</select>
</sqlMap>
com.wysm.netstar.persistence.sqlmapdao.sql/UserInfo.xml
<!DOCTYPE sqlMap PUBLIC '-//ibatis.apache.org//DTD SQL Map 2.0//EN'
'http://ibatis.apache.org/dtd/sql-map-2.dtd'>
<sqlMap namespace='User'>
<typeAlias alias='userInfo' type='com.wysm.netstar.domain.UserInfo'/>
<select id='getUserInfoByUserId' resultparameter/> SELECT
USERID,
REGDATE,
LASTLOGDATE,
LOGTIMES
FROM T_USER_INFO
WHERE USERID = #userId#
</select>
<update id='updateUserInfo' parameter/> UPDATE T_USER_INFO SET
REGDATE= #regDate#,
LASTLOGDATE=#lastLogDate#,
LOGTIMES=#logTimes#
WHERE USERID = #userId#
</update>
<insert id='insertUserInfo' parameter/> INSERT INTO T_USER_INFO
(USERID,
REGDATE,
LASTLOGDATE,
LOGTIMES)
VALUES
(#userId#, #regDate#,#lastLogDate#,#logTimes#)
</insert>
<delete id='deleteUserInfo' parameter/> DELETE FROM T_USER_INFO
WHERE USERID=#userId#
</delete>
</sqlMap>

com.wysm.netstar.domain.User.java
import java.io.*;

public class User implements Serializable {
private Integer userId;
private String userAlias;
private String password;
private String realName;
private String email;
private String userTypeId;
public User() {
}

public User(Integer userId) {
this.userId=userId;
}

public User(String userAlias) {
this.userAlias=userAlias;
}

public User(String userAlias,String password) {
this.userAlias=userAlias;
this.password=password;
}

public void setUserId(Integer userId) {
this.userId = userId;
}

public void setUserAlias(String userAlias) {
this.userAlias = userAlias;
}

public void setPassword(String password) {
this.password = password;
}

public void setUserTypeId(String userTypeId) {

this.userTypeId = userTypeId;
}

public void setRealName(String realName) {
this.realName = realName;
}

public void setEmail(String email) {
this.email = email;
}

public Integer getUserId() {
return userId;
}

public String getUserAlias() {
return userAlias;
}

public String getPassword() {
return password;
}

public String getUserTypeId() {

return userTypeId;
}

public String getRealName() {
return realName;
}

public String getEmail() {
return email;
}
}

com.wysm.netstar.domain.UserInfo.java
import java.util.*;
import java.io.Serializable;
public class UserInfo implements Serializable {
private Integer userId;
private Date regDate;
private Date lastLogDate;
private Integer logTimes;
public UserInfo() {
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public void setRegDate(Date regDate) {
this.regDate = regDate;
}
public void setLastLogDate(Date lastLogDate) {
this.lastLogDate = lastLogDate;
}
public void setLogTimes(Integer logTimes) {
this.logTimes = logTimes;
}
public Integer getUserId() {
return userId;
}
public Date getRegDate() {
return regDate;
}
public Date getLastLogDate() {
return lastLogDate;
}
public Integer getLogTimes() {
return logTimes;
}
}

com.wysm.netstar.persistence.iface.BaseDao.java
public interface BaseDao {
}

com.wysm.netstar.persistence.iface.SequenceDao.java
public interface SequenceDao extends BaseDao {
Integer getSequenceUserId();
}

com.wysm.netstar.persistence.iface.UserDao.java
import com.wysm.netstar.domain.User;
import java.util.List;

public interface UserDao extends BaseDao {
public abstract List getUser(String userAlias);
public abstract List getUserByEmail(String email);
public abstract List getUser(String userAlias,String password);
public abstract void insertUser(User user);
public abstract void updateUser(User user);
public abstract boolean existUserId(Integer userid);
}

com.wysm.netstar.persistence.iface.UserInfoDao.java
import com.wysm.netstar.domain.UserInfo;

public interface UserInfoDao extends BaseDao {
public abstract UserInfo getUserInfo(Integer userId);
public abstract void insertUserInfo(UserInfo userInfo);
public abstract void updateUserInfo(UserInfo userInfo);
}

com.wysm.netstar.persistence.sqlmapdao.BaseSqlMapDao.java
import com.ibatis.dao.client.DaoManager;
import com.ibatis.dao.client.template.SqlMapDaoTemplate;
public class BaseSqlMapDao extends SqlMapDaoTemplate {
protected static final int PAGE_SIZE = 4;
public BaseSqlMapDao(DaoManager daoManager) {
super(daoManager);
}
}

com.wysm.netstar.persistence.sqlmapdao.SequenceSqlMapDao.java
import com.ibatis.dao.client.DaoManager;
import com.wysm.netstar.persistence.iface.SequenceDao;
public class SequenceSqlMapDao extends BaseSqlMapDao implements SequenceDao {
public SequenceSqlMapDao(DaoManager daoManager) {
super(daoManager);
}
public Integer getSequenceUserId(){
return (Integer)queryForObject('getSequenceUserId',new Object());
}
}

com.wysm.netstar.persistence.sqlmapdao.UserSqlMapDao.java
import com.ibatis.dao.client.DaoManager;
import com.wysm.netstar.domain.User;
import com.wysm.netstar.persistence.iface.UserDao;
import java.util.List;
import org.apache.log4j.Logger;
public class UserSqlMapDao extends BaseSqlMapDao implements UserDao {
static Logger logger=Logger.getLogger(UserSqlMapDao.class);
public UserSqlMapDao(DaoManager daoManager) {
super(daoManager);
logger.debug('In UserSqlMapDao daoManager null='+(daoManager==null));
}
public List getUser(String userAlias){
return queryForList('getUserByUserAlias',userAlias);
}
public List getUser(String userAlias,String password){
User user=new User(userAlias,password);
return queryForList('getUserByUserAliasAndPassword',user);
}
public void insertUser(User user){
update('insertUser', user);
}
public void updateUser(User user){
update('updateUser', user);
}
public List getUserByEmail(String email){
return queryForList('getUserByEmail',email);
}
public boolean existUserId(Integer userid){
Integer cnt=(Integer)this.queryForObject('existUserId',userid);
return cnt.intValue()>0;
}
}

com.wysm.netstar.persistence.sqlmapdao.UserInfoSqlMapDao.java
import com.ibatis.dao.client.DaoManager;
import com.wysm.netstar.persistence.iface.UserInfoDao;
import com.wysm.netstar.domain.UserInfo;
public class UserInfoSqlMapDao extends BaseSqlMapDao implements UserInfoDao {
public UserInfoSqlMapDao(DaoManager daoManager) {
super(daoManager);
}
public UserInfo getUserInfo(Integer userId){
return (UserInfo)queryForObject('getUserInfoByUserId',userId);
}
public void insertUserInfo(UserInfo userInfo){
update('insertUserInfo', userInfo);
}
public void updateUserInfo(UserInfo userInfo){
update('insertUserInfo', userInfo);
}
}

com.wysm.netstar.persistence.sqlmapdao.UserInfoSqlMapDao.java
import com.wysm.netstar.domain.User;
public interface UserService {
public void addNewUser(User user);//增加新用户
public boolean existUserAlias(String userAlias);//检查用户别名是否已经存在
public User existUser(String userAlias,String password);//用户密码验证
public boolean existEmail(String email);//检查EMAIL是否已经存在
public boolean existUserId(Integer userId);//用户流水号验证
}

com.wysm.netstar.service.ibatis.UserServiceImpl.java
import java.util.*;
import org.apache.log4j.*;
import com.ibatis.dao.client.*;
import com.wysm.netstar.domain.*;
import com.wysm.netstar.persistence.iface.*;
import com.wysm.netstar.service.*;
public class UserServiceImpl implements UserService {
private UserDao userDao;
private SequenceDao sequenceDao;
private UserInfoDao userInfoDao;
private DaoManager daoMgr;
static Logger logger=Logger.getLogger(UserServiceImpl.class);
public UserServiceImpl() {
// daoMgr = DaoConfig.getDaoManager();
// this.userDao=(UserDao)daoMgr.getDao(UserDao.class);
}
private void initDaos(){
if (userDao==null){
this.userDao=(UserDao)daoMgr.getDao(UserDao.class);
this.sequenceDao=(SequenceDao)daoMgr.getDao(SequenceDao.class);
this.userInfoDao=(UserInfoDao)daoMgr.getDao(UserInfoDao.class);
}
}
public void addNewUser(User user){
Integer id=sequenceDao.getSequenceUserId();
user.setUserId(id);
UserInfo userInfo=new UserInfo();
userInfo.setUserId(id);
userInfo.setLastLogDate(null);
userInfo.setLogTimes(new Integer(0));
userInfo.setRegDate(new Date());
try{
daoMgr.startTransaction();
userDao.insertUser(user);
userInfoDao.insertUserInfo(userInfo);
daoMgr.commitTransaction();
}catch(Exception ex){
ex.printStackTrace();
}finally{
daoMgr.endTransaction();
}
}
public boolean existUserAlias(String userAlias){
List users=userDao.getUser(userAlias);
if (users!=null&&users.size()>0)
return true;
return false;
}
public User existUser(String userAlias,String password){
List users=userDao.getUser(userAlias,password);
if (users!=null&&users.size()>0)
return (User)users.get(0);
return null;
}
public boolean existEmail(String email){
List users=userDao.getUserByEmail(email);
if (users!=null&&users.size()>0)
return true;
return false;
}
public void setDaoMgr(DaoManager daoMgr) {
this.daoMgr = daoMgr;
}

public void setSequenceDao(SequenceDao sequenceDao) {
this.sequenceDao = sequenceDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void setUserInfoDao(UserInfoDao userInfoDao) {
this.userInfoDao = userInfoDao;
}
public boolean existUserId(Integer userId){
if (userId.intValue()==0)
return false;
return userDao.existUserId(userId);
}
}
com.wysm.netstar.persistence/dao.xml
<!DOCTYPE daoConfig
PUBLIC '-//ibatis.apache.org//DTD DAO Configuration 2.0//EN'
'http://ibatis.apache.org/dtd/dao-2.dtd'>

<daoConfig>

<context>

<transactionManager type='SQLMAP'>
<property name='SqlMapConfigResource'
value='com/wysm/netstar/persistence/sqlmapdao/sql/sql-map-config.xml'/>
</transactionManager>

<dao interface='com.wysm.netstar.persistence.iface.UserDao'
implementation='com.wysm.netstar.persistence.sqlmapdao.UserSqlMapDao'/>

<dao interface='com.wysm.netstar.persistence.iface.SequenceDao'
implementation='com.wysm.netstar.persistence.sqlmapdao.SequenceSqlMapDao'/>

<dao interface='com.wysm.netstar.persistence.iface.UserInfoDao'
implementation='com.wysm.netstar.persistence.sqlmapdao.UserInfoSqlMapDao'/>

</context>

</daoConfig>

com.wysm.netstar.persistence.DaoConfig.java
import com.ibatis.common.resources.Resources;
import com.ibatis.dao.client.DaoManager;
import com.ibatis.dao.client.DaoManagerBuilder;
import java.io.Reader;
import java.util.Properties;
import org.apache.log4j.Logger;
public class DaoConfig {
private static final String resource = 'com/wysm/netstar/persistence/dao.xml';
private static final DaoManager daoManager;
static Logger logger=Logger.getLogger(DaoConfig.class);
static {
try {
daoManager = newDaoManager(null);
} catch (Exception e) {
throw new RuntimeException('Description. Cause: ' + e, e);
}
}
public static DaoManager getDaoManager() {
return daoManager;
}
public static DaoManager newDaoManager(Properties props) {
try {
Reader reader = Resources.getResourceAsReader(resource);
return DaoManagerBuilder.buildDaoManager(reader, props);
} catch (Exception e) {
throw new RuntimeException('Could not initialize DaoConfig. Cause: ' + e, e);
}
}
}

applicationContext.xml这个文件应该放在WEB包的 WEB-INF/下
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>
<bean id='daoManager' factory-method = 'getDaoManager'/>

<bean id='sequenceDao' factory-bean = 'daoManager' factory-method='getDao'>
<constructor-arg>
<value>com.wysm.netstar.persistence.iface.SequenceDao</value>
</constructor-arg>
</bean>

<bean id='userDao' factory-bean = 'daoManager' factory-method='getDao'>
<constructor-arg>
<value>com.wysm.netstar.persistence.iface.UserDao</value>
</constructor-arg>
</bean>

<bean id='userInfoDao' factory-bean = 'daoManager' factory-method='getDao'>
<constructor-arg>
<value>com.wysm.netstar.persistence.iface.UserInfoDao</value>
</constructor-arg>
</bean>

<bean name='userService' singleton='false'>
<property name='daoMgr'>
<ref bean='daoManager'/>
</property>
<property name='sequenceDao'>
<ref bean='sequenceDao'/>
</property>
<property name='userDao'>
<ref bean='userDao'/>
</property>
<property name='userInfoDao'>
<ref bean='userInfoDao'/>
</property>
</bean>

<bean name='userService' singleton='false'>
<property name='daoMgr'>
<ref bean='daoManager'/>
</property>
<property name='sequenceDao'>
<ref bean='sequenceDao'/>
</property>
<property name='userDao'>
<ref bean='userDao'/>
</property>
<property name='useInfoDao'>
<ref bean='useInfoDao'/>
</property>
</bean>

</beans>

com.wysm.netstar.test.SpringTestCase.java
import junit.framework.TestCase;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.wysm.netstar.actions.CatalogAction;
import com.wysm.netstar.service.UserService;
import com.wysm.netstar.domain.Catalog;
import java.util.List;
public class SpringTestCase extends TestCase {
private UserService userService;
private Catalog catalog;
protected void setUp() throws Exception {
super.setUp();
ApplicationContext ctx=new FileSystemXmlApplicationContext( 'D:/JBProject/NetStarv0.1/netstar/WEB-INF/applicationContext.xml');
userService =(UserService)ctx.getBean('UserService');
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testSave(){
//自己写测试代码
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: