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(){ //自己写测试代码 } } |