1

来源:互联网 发布:360mac版在哪下载 编辑:程序博客网 时间:2024/06/16 16:06

Struts2 + spring + ibatis development example

环境: myeclipse + mysql + tomcat 

首先,建立数据库(数据库名: test).

view plain
  1. -- ----------------------------  
  2. -- Table structure for `person`  
  3. -- ----------------------------  
  4. DROP TABLE IF EXISTS `person`;  
  5. CREATE TABLE `person` (  
  6.   `id` int(11) NOT NULL auto_increment,  
  7.   `namevarchar(30) NOT NULL,  
  8.   `age` int(11) NOT NULL,  
  9.   `money` int(11) NOT NULL,  
  10.   PRIMARY KEY  (`id`)  
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
  12.   
  13. -- ----------------------------  
  14. -- Records of person  
  15. -- ----------------------------  
  16. INSERT INTO `person` VALUES ('1''sun''20''10000');  
  17. INSERT INTO `person` VALUES ('2''kiler''15''20000');  
  18. INSERT INTO `person` VALUES ('4''qq''23''1122');  
  19. INSERT INTO `person` VALUES ('5''dd''34''32544');  
  20. INSERT INTO `person` VALUES ('6''hj''14''1250');  
  21. INSERT INTO `person` VALUES ('7''wer''21''3213');  
  22.   
  23. -- ----------------------------  
  24. -- Table structure for `user`  
  25. -- ----------------------------  
  26. DROP TABLE IF EXISTS `user`;  
  27. CREATE TABLE `user` (  
  28.   `userID` int(11) NOT NULL auto_increment,  
  29.   `userName` varchar(20) NOT NULL,  
  30.   `passwordvarchar(30) NOT NULL,  
  31.   PRIMARY KEY  (`userID`)  
  32. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
  33.   
  34. -- ----------------------------  
  35. -- Records of user  
  36. -- ----------------------------  
  37. INSERT INTO `userVALUES ('1''admin''admin');  

然后,工程文件如下:


DAO 层

一个新的的实体类,和数据库两张表映射关系: user 表和Person表.

User.java

view plain
  1. package com.login.vo;  
  2.   
  3. public class User {  
  4.       
  5.     private Integer id;  
  6.       
  7.     private String userName;  
  8.       
  9.     private String password;  
  10.   
  11.     /**set,get**/  
  12.   
  13. }  
Person.java

view plain
  1. package com.login.vo;  
  2.   
  3. public class Person {  
  4.       
  5.     private Integer id;  
  6.       
  7.     private String name;  
  8.       
  9.     private Integer age;  
  10.       
  11.     private Integer money;  
  12.   
  13.     /**set,get**/  
  14.   
  15. }  
2. 新建DAO类

UserDao.java 

view plain
  1. package com.login.dao;  
  2.   
  3. public interface UserDao {  
  4.       
  5.     public String queryPassword(String userName) throws Exception;  
  6.   
  7. }  
PersonDao.java

view plain
  1. package com.login.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.login.vo.Person;  
  6.   
  7. public interface PersonDao {  
  8.       
  9.     public void addPerson(Person person) throws Exception;  
  10.       
  11.     public void deletePerson(Integer id) throws Exception;  
  12.       
  13.     public void updatePerson(Person person) throws Exception;  
  14.       
  15.     public Person queryPerson(Integer id) throws Exception;  
  16.       
  17.     public List<Person> queryPersonList(Person condition) throws Exception;  
  18.   
  19. }  
3 新建DAO实现类

UserDaoImpl.java

view plain
  1. package com.login.dao.impl;  
  2.   
  3. import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
  4.   
  5. import com.login.dao.UserDao;  
  6.   
  7. public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao {  
  8.   
  9.     public String queryPassword(String userName) throws Exception {  
  10.         return (String) this.getSqlMapClientTemplate().queryForObject("queryPassword", userName);  
  11.     }  
  12.   
  13. }  
PersonDaoImpl.java 
view plain
  1. package com.login.dao.impl;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
  6.   
  7. import com.login.dao.PersonDao;  
  8. import com.login.vo.Person;  
  9.   
  10. public class PersonDaoImpl extends SqlMapClientDaoSupport implements  
  11.         PersonDao {  
  12.   
  13.     public void addPerson(Person person) throws Exception {  
  14.         // TODO Auto-generated method stub  
  15.         this.getSqlMapClientTemplate().insert("addPerson", person);  
  16.     }  
  17.   
  18.     public void deletePerson(Integer id) throws Exception {  
  19.         // TODO Auto-generated method stub  
  20.         this.getSqlMapClientTemplate().delete("deletePerson", id);  
  21.     }  
  22.   
  23.     public Person queryPerson(Integer id) throws Exception {  
  24.         // TODO Auto-generated method stub  
  25.         return (Person) this.getSqlMapClientTemplate().queryForObject("queryPerson", id);  
  26.     }  
  27.   
  28.     @SuppressWarnings("unchecked")  
  29.     public List<Person> queryPersonList(Person condition) throws Exception {  
  30.         // TODO Auto-generated method stub  
  31.         return this.getSqlMapClientTemplate().queryForList("queryPersonList", condition);  
  32.     }  
  33.   
  34.     public void updatePerson(Person person) throws Exception {  
  35.         // TODO Auto-generated method stub  
  36.         this.getSqlMapClientTemplate().update("updatePerson", person);  
  37.     }  
  38.   
  39. }  
4 新建ibatis文件,SqlMapConfig.xml 放置在根目录, 其他放置在  com.login.ibatis

sqlMapConfig.xml

view plain
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE sqlMapConfig        
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"        
  4.     "  
  5.       
  6. <sqlMapConfig>  
  7.       
  8.     <sqlMap resource="com/login/ibatis/User.xml"/>  
  9.     <sqlMap resource="com/login/ibatis/Person.xml"/>  
  10.       
  11. </sqlMapConfig>  
User.xml 
view plain
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE sqlMap        
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"        
  4.     "  
  5.   
  6. <sqlMap>  
  7.   
  8.     <typeAlias alias="user" type="com.login.vo.User"/>  
  9.       
  10.     <select id="queryPassword" parameterClass="java.lang.String" resultClass="String">  
  11.         SELECT password FROM user WHERE userName = #userName#  
  12.     </select>  
  13.   
  14. </sqlMap>  
Person.xml 
view plain
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE sqlMap        
  3.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"        
  4.     "  
  5.   
  6. <sqlMap>  
  7.     <typeAlias alias="person" type="com.login.vo.Person"/>  
  8.       
  9.     <insert id="addPerson" parameterClass="person">  
  10.         INSERT INTO person(name, age, money)  
  11.         VALUES(#name#, #age#, #money#)  
  12.     </insert>  
  13.       
  14.     <delete id="deletePerson" parameterClass="java.lang.Integer">  
  15.         DELETE FROM person  
  16.         WHERE id = #id#  
  17.     </delete>  
  18.       
  19.     <update id="updatePerson" parameterClass="person">  
  20.         UPDATE person  
  21.         SET name = #name#, age = #age#, money = #money#  
  22.         WHERE id = #id#  
  23.     </update>  
  24.       
  25.     <select id="queryPerson" parameterClass="java.lang.Integer" resultClass="person">  
  26.         SELECT * FROM person   
  27.         WHERE id = #id#  
  28.     </select>  
  29.       
  30.     <select id="queryPersonList" parameterClass="person" resultClass="person">  
  31.         SELECT * FROM person  
  32.         <dynamic prepend=" WHERE ">  
  33.             <isNotEmpty prepend=" AND " property="name">name REGEXP #name#</isNotEmpty>  
  34.             <isNotEmpty prepend=" AND " property="age">age REGEXP #age#</isNotEmpty>  
  35.             <isNotEmpty prepend=" AND " property="money">money REGEXP #money#</isNotEmpty>  
  36.         </dynamic>  
  37.         ORDER BY money DESC  
  38.     </select>  
  39.   
  40. </sqlMap>  

逻辑服务层

1. 新建一个service类

LoginService.java

view plain
  1. package com.login.service;  
  2.   
  3. import com.login.vo.User;  
  4.   
  5. public interface LoginService {  
  6.       
  7.     public boolean login(User user) throws Exception;  
  8.   
  9. }  
PersonService.java

view plain
  1. package com.login.service;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.login.vo.Person;  
  6.   
  7. public interface PersonService {  
  8.   
  9.     public void addPerson(Person person) throws Exception;  
  10.   
  11.     public void deletePerson(Integer id) throws Exception;  
  12.   
  13.     public void updatePerson(Person person) throws Exception;  
  14.   
  15.     public Person queryPerson(Integer id) throws Exception;  
  16.   
  17.     public List<Person> queryPersonList(Person condition) throws Exception;  
  18.   
  19. }  
新建service实现类

view plain
  1. package com.login.service.impl;  
  2.   
  3. import com.login.dao.UserDao;  
  4. import com.login.service.LoginService;  
  5. import com.login.vo.User;  
  6.   
  7. public class LoginServiceImpl implements LoginService {  
  8.       
  9.     private UserDao userDao;  
  10.   
  11.     public boolean login(User user) throws Exception {  
  12.           
  13.         String password = userDao.queryPassword(user.getUserName());  
  14.           
  15.         if(user.getPassword().equals(password)) {  
  16.             return true;  
  17.         }  
  18.           
  19.         return false;  
  20.     }  
  21.   
  22.     /**userDao set,get**/  
  23.   
  24. }  
PersonServiceImpl.java

view plain
  1. import java.util.List;  
  2.   
  3. import com.login.dao.PersonDao;  
  4. import com.login.service.PersonService;  
  5. import com.login.vo.Person;  
  6.   
  7. public class PersonServiceImpl implements PersonService {  
  8.       
  9.     private PersonDao personDao;  
  10.   
  11.     public void addPerson(Person person) throws Exception {  
  12.         // TODO Auto-generated method stub  
  13.         personDao.addPerson(person);  
  14.     }  
  15.   
  16.     public void deletePerson(Integer id) throws Exception {  
  17.         // TODO Auto-generated method stub  
  18.         personDao.deletePerson(id);  
  19.     }  
  20.   
  21.     public Person queryPerson(Integer id) throws Exception {  
  22.         // TODO Auto-generated method stub  
  23.         return personDao.queryPerson(id);  
  24.     }  
  25.   
  26.     public List<Person> queryPersonList(Person condition) throws Exception {  
  27.         // TODO Auto-generated method stub  
  28.         return personDao.queryPersonList(condition);  
  29.     }  
  30.   
  31.     public void updatePerson(Person person) throws Exception {  
  32.         // TODO Auto-generated method stub  
  33.         personDao.updatePerson(person);  
  34.     }  
  35.   
  36.     /**personDao set,get**/  
  37.   
  38. }  

新建Spring配置文件,这里将对不同的层建议不同的spring配置文件,简化配置文件。一个配置data source(applicationContent -comm.xml),其他的用来配置DAO,SERVICE,ACTION.

applicationContent-comm.xml

view plain
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="  
  4.     xmlns:xsi="  
  5.     xmlns:p="  
  6.     xsi:schemaLocation="   
  7.   
  8.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  9.         <property name="driverClassName">  
  10.             <value>com.mysql.jdbc.Driver</value>  
  11.         </property>  
  12.         <property name="url">  
  13.             <value>jdbc:mysql://127.0.0.1:3306/test</value>  
  14.         </property>  
  15.         <property name="username">  
  16.             <value>root</value>  
  17.         </property>  
  18.         <property name="password">  
  19.             <value>root</value>  
  20.         </property>  
  21.     </bean>  
  22.       
  23.     <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  24.         <property name="dataSource">  
  25.             <ref bean="dataSource"/>  
  26.         </property>  
  27.         <property name="configLocations">  
  28.             <value>/WEB-INF/classes/sqlMapConfig.xml</value>  
  29.         </property>  
  30.     </bean>  
  31.       
  32. </beans>  
applicationContent-dao.xml

view plain
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="  
  4.     xmlns:xsi="  
  5.     xmlns:p="  
  6.     xsi:schemaLocation="   
  7.   
  8.     <bean id="userDao" class="com.login.dao.impl.UserDaoImpl">  
  9.         <property name="sqlMapClient">  
  10.             <ref bean="sqlMapClient"/>  
  11.         </property>  
  12.     </bean>  
  13.       
  14.     <bean id="personDao" class="com.login.dao.impl.PersonDaoImpl">  
  15.         <property name="sqlMapClient">  
  16.             <ref bean="sqlMapClient"/>  
  17.         </property>  
  18.     </bean>  
  19.   
  20. </beans>  
the applicationContent-service.xml

view plain
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="  
  4.     xmlns:xsi="  
  5.     xmlns:p="  
  6.     xsi:schemaLocation="   
  7.   
  8.     <bean id="loginService" class="com.login.service.impl.LoginServiceImpl">  
  9.         <property name="userDao">  
  10.             <ref bean="userDao"/>  
  11.         </property>  
  12.     </bean>  
  13.       
  14.     <bean id="personService" class="com.login.service.impl.PersonServiceImpl">  
  15.         <property name="personDao">  
  16.             <ref bean="personDao"/>  
  17.         </property>  
  18.     </bean>  
  19.   
  20. </beans>  


视图层

1.新建一个action类

LoginAction.java

view plain
  1. package com.login.action;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import com.login.service.LoginService;  
  6. import com.login.vo.User;  
  7. import com.opensymphony.xwork2.ActionContext;  
  8. import com.opensymphony.xwork2.ActionSupport;  
  9.   
  10. public class LoginAction extends ActionSupport {  
  11.   
  12.     /**  
  13.      *   
  14.      */  
  15.     private static final long serialVersionUID = 1L;  
  16.       
  17.     private LoginService loginService;  
  18.       
  19.     private User user;  
  20.   
  21.     @Override  
  22.     public String execute() {  
  23.         try {  
  24.             if(null == user) {  
  25.                 return INPUT;  
  26.             }  
  27.               
  28.             boolean isLogin = loginService.login(user);  
  29.               
  30.             //?session  
  31.             if(isLogin) {  
  32.                 Map<String, Object> session = ActionContext.getContext().getSession();  
  33.                 session.put("login_user", user.getUserName());  
  34.                 return SUCCESS;  
  35.             }  
  36.               
  37.         } catch (Exception e) {  
  38.             e.printStackTrace();  
  39.         }  
  40.           
  41.         return ERROR;  
  42.     }  
  43.       
  44.     public String logOut() {  
  45.         Map<String, Object> session = ActionContext.getContext().getSession();  
  46.         session.remove("login_user");  
  47.         user = null;  
  48.         return SUCCESS;  
  49.     }  
  50.   
  51.     /**loginServiceuser set,get**/  
  52.   
  53. }  
view plain
  1.   
PersonAction.java 
view plain
  1. package com.login.action;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.login.service.PersonService;  
  6. import com.login.vo.Person;  
  7. import com.opensymphony.xwork2.ActionSupport;  
  8.   
  9. public class PersonAction extends ActionSupport {  
  10.       
  11.     /** 
  12.      *  
  13.      */  
  14.     private static final long serialVersionUID = 1L;  
  15.   
  16.     private PersonService personService;  
  17.       
  18.     private Person person;  
  19.       
  20.     //  
  21.     private Person condition;  
  22.       
  23.     private List<Person> list;  
  24.       
  25.     private Integer id;  
  26.   
  27.     public String query() {  
  28.         // TODO Auto-generated method stub  
  29.         try {  
  30.             list = personService.queryPersonList(condition);  
  31.             return SUCCESS;  
  32.               
  33.         } catch (Exception e) {  
  34.             // TODO: handle exception  
  35.             e.printStackTrace();  
  36.         }  
  37.           
  38.         return ERROR;  
  39.     }  
  40.       
  41.     public String toAdd() {  
  42.         return "toAdd";  
  43.     }  
  44.       
  45.     public String add() {  
  46.         try {  
  47.             personService.addPerson(person);  
  48.               
  49.             return "add";  
  50.         } catch (Exception e) {  
  51.             // TODO: handle exception  
  52.             e.printStackTrace();  
  53.         }  
  54.           
  55.         return ERROR;  
  56.     }  
  57.       
  58.     public String delete() {  
  59.         try {  
  60.             personService.deletePerson(id);  
  61.             return "delete";  
  62.         } catch (Exception e) {  
  63.             // TODO: handle exception  
  64.             e.printStackTrace();  
  65.         }  
  66.           
  67.         return ERROR;  
  68.     }  
  69.       
  70.     public String toUpdate() {  
  71.         try {  
  72.             person = personService.queryPerson(id);  
  73.             return "toUpdate";  
  74.         } catch (Exception e) {  
  75.             // TODO: handle exception  
  76.             e.printStackTrace();  
  77.         }  
  78.           
  79.         return ERROR;  
  80.     }  
  81.       
  82.     public String update() {  
  83.         try {  
  84.             personService.updatePerson(person);  
  85.             return "update";  
  86.         } catch (Exception e) {  
  87.             // TODO: handle exception  
  88.             e.printStackTrace();  
  89.         }  
  90.           
  91.         return ERROR;  
  92.     }  
  93.       
  94.     /**personService?person?condition?idlist set,get**/  
  95.   
  96. }  

2.新建一个拦截器

这样做需要登录信息保存到session,可自己考虑其他方法,或者不用。

view plain
  1. package com.login.intecept;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import com.opensymphony.xwork2.Action;  
  6. import com.opensymphony.xwork2.ActionContext;  
  7. import com.opensymphony.xwork2.ActionInvocation;  
  8. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
  9.   
  10. public class AuthrityInterceptor extends AbstractInterceptor {  
  11.   
  12.     /** 
  13.      *  
  14.      */  
  15.     private static final long serialVersionUID = 1L;  
  16.   
  17.     @Override  
  18.     public String intercept(ActionInvocation invocation) throws Exception {  
  19.         // TODO Auto-generated method stub  
  20.         Map<String, Object> session = ActionContext.getContext().getSession();  
  21.         String isLogin = (String) session.get("login_user");  
  22.           
  23.         if(null != isLogin) {  
  24.             return invocation.invoke();  
  25.         }  
  26.         return Action.LOGIN;  
  27.     }  
  28.   
  29. }  
3 . applicationContent-action.xml

view plain
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="  
  4.     xmlns:xsi="  
  5.     xmlns:p="  
  6.     xsi:schemaLocation="   
  7.   
  8.     <bean id="loginAction" class="com.login.action.LoginAction">  
  9.         <property name="loginService">  
  10.             <ref bean="loginService"/>  
  11.         </property>  
  12.     </bean>  
  13.       
  14.     <bean id="personAction" class="com.login.action.PersonAction">  
  15.         <property name="personService">  
  16.             <ref bean="personService"/>  
  17.         </property>  
  18.     </bean>  
  19.   
  20. </beans>  
4 .新建struts.xml 

view plain
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.         "  
  5.   
  6. <struts>  
  7.       
  8.     <include file="struts-default.xml"/>  
  9.   
  10.     <constant name="struts.objectFactory" value="spring" />  
  11.       
  12.     <package name="default" extends="struts-default">  
  13.           
  14.         <!--  -->  
  15.         <interceptors>  
  16.             <interceptor name="authrity" class="com.login.intecept.AuthrityInterceptor" />  
  17.               
  18.             <!--  -->  
  19.             <interceptor-stack name="myInterceptor">  
  20.                 <interceptor-ref name="defaultStack" />  
  21.                 <interceptor-ref name="authrity" />  
  22.             </interceptor-stack>  
  23.         </interceptors>  
  24.           
  25.         <!--  -->  
  26.         <default-interceptor-ref name="myInterceptor" />  
  27.           
  28.         <!--  -->  
  29.         <global-results>  
  30.             <result name="login" type="redirectAction">login</result>  
  31.             <result name="error">/error.jsp</result>  
  32.         </global-results>  
  33.       
  34.         <action name="login" class="loginAction">  
  35.             <result name="success" type="redirectAction">queryPerson</result>  
  36.             <result name="input">/login.jsp</result>  
  37.             <interceptor-ref name="defaultStack" />  
  38.         </action>  
  39.           
  40.         <action name="logOut" class="loginAction" method="logOut">  
  41.             <result name="success">/login.jsp</result>  
  42.             <interceptor-ref name="defaultStack" />  
  43.         </action>  
  44.           
  45.         <action name="*Person" class="personAction" method="{1}">  
  46.             <result name="success">/person/personList.jsp</result>  
  47.             <result name="add" type="redirectAction">queryPerson</result>  
  48.             <result name="delete" type="redirectAction">queryPerson</result>  
  49.             <result name="update" type="redirectAction">queryPerson</result>  
  50.             <result name="toAdd">/person/personAdd.jsp</result>  
  51.             <result name="toUpdate">/person/personUpdate.jsp</result>  
  52.         </action>  
  53.   
  54.     </package>  
  55.   
  56. </struts>  
新建JSP 页面(略)

 web.xml.

view plain
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="  
  3.     xmlns:xsi="  
  4.     xsi:schemaLocation="   
  5.       
  6.   
  7.     <display-name>myweb</display-name>  
  8.       
  9.     <!-- spring spring -->  
  10.     <listener>  
  11.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  12.     </listener>  
  13.     <context-param>  
  14.         <param-name>contextConfigLocation</param-name>  
  15.         <param-value>  
  16.             /WEB-INF/classes/applicationContent-*.xml, classpath:applicationContent-*.xml  
  17.         </param-value>  
  18.     </context-param>  
  19.       
  20.     <!-- struts -->  
  21.     <filter>  
  22.         <filter-name>struts</filter-name>  
  23.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  24.     </filter>  
  25.     <filter-mapping>  
  26.         <filter-name>struts</filter-name>  
  27.         <url-pattern>/*</url-pattern>  
  28.     </filter-mapping>  
  29.   
  30.     <!--  -->  
  31.     <welcome-file-list>  
  32.         <welcome-file>login.jsp</welcome-file>  
  33.     </welcome-file-list>  
  34. </web-app>  
0 0
原创粉丝点击