1
来源:互联网 发布:360mac版在哪下载 编辑:程序博客网 时间:2024/06/16 16:06
Struts2 + spring + ibatis development example
环境: myeclipse + mysql + tomcat
首先,建立数据库(数据库名: test).
- -- ----------------------------
- -- Table structure for `person`
- -- ----------------------------
- DROP TABLE IF EXISTS `person`;
- CREATE TABLE `person` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(30) NOT NULL,
- `age` int(11) NOT NULL,
- `money` int(11) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- -- ----------------------------
- -- Records of person
- -- ----------------------------
- INSERT INTO `person` VALUES ('1', 'sun', '20', '10000');
- INSERT INTO `person` VALUES ('2', 'kiler', '15', '20000');
- INSERT INTO `person` VALUES ('4', 'qq', '23', '1122');
- INSERT INTO `person` VALUES ('5', 'dd', '34', '32544');
- INSERT INTO `person` VALUES ('6', 'hj', '14', '1250');
- INSERT INTO `person` VALUES ('7', 'wer', '21', '3213');
- -- ----------------------------
- -- Table structure for `user`
- -- ----------------------------
- DROP TABLE IF EXISTS `user`;
- CREATE TABLE `user` (
- `userID` int(11) NOT NULL auto_increment,
- `userName` varchar(20) NOT NULL,
- `password` varchar(30) NOT NULL,
- PRIMARY KEY (`userID`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- -- ----------------------------
- -- Records of user
- -- ----------------------------
- INSERT INTO `user` VALUES ('1', 'admin', 'admin');
然后,工程文件如下:
DAO 层
一个新的的实体类,和数据库两张表映射关系: user 表和Person表.
User.java
- package com.login.vo;
- public class User {
- private Integer id;
- private String userName;
- private String password;
- /**set,get**/
- }
- package com.login.vo;
- public class Person {
- private Integer id;
- private String name;
- private Integer age;
- private Integer money;
- /**set,get**/
- }
UserDao.java
- package com.login.dao;
- public interface UserDao {
- public String queryPassword(String userName) throws Exception;
- }
- package com.login.dao;
- import java.util.List;
- import com.login.vo.Person;
- public interface PersonDao {
- public void addPerson(Person person) throws Exception;
- public void deletePerson(Integer id) throws Exception;
- public void updatePerson(Person person) throws Exception;
- public Person queryPerson(Integer id) throws Exception;
- public List<Person> queryPersonList(Person condition) throws Exception;
- }
UserDaoImpl.java
- package com.login.dao.impl;
- import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
- import com.login.dao.UserDao;
- public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao {
- public String queryPassword(String userName) throws Exception {
- return (String) this.getSqlMapClientTemplate().queryForObject("queryPassword", userName);
- }
- }
- package com.login.dao.impl;
- import java.util.List;
- import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
- import com.login.dao.PersonDao;
- import com.login.vo.Person;
- public class PersonDaoImpl extends SqlMapClientDaoSupport implements
- PersonDao {
- public void addPerson(Person person) throws Exception {
- // TODO Auto-generated method stub
- this.getSqlMapClientTemplate().insert("addPerson", person);
- }
- public void deletePerson(Integer id) throws Exception {
- // TODO Auto-generated method stub
- this.getSqlMapClientTemplate().delete("deletePerson", id);
- }
- public Person queryPerson(Integer id) throws Exception {
- // TODO Auto-generated method stub
- return (Person) this.getSqlMapClientTemplate().queryForObject("queryPerson", id);
- }
- @SuppressWarnings("unchecked")
- public List<Person> queryPersonList(Person condition) throws Exception {
- // TODO Auto-generated method stub
- return this.getSqlMapClientTemplate().queryForList("queryPersonList", condition);
- }
- public void updatePerson(Person person) throws Exception {
- // TODO Auto-generated method stub
- this.getSqlMapClientTemplate().update("updatePerson", person);
- }
- }
sqlMapConfig.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMapConfig
- PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
- "
- <sqlMapConfig>
- <sqlMap resource="com/login/ibatis/User.xml"/>
- <sqlMap resource="com/login/ibatis/Person.xml"/>
- </sqlMapConfig>
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMap
- PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
- "
- <sqlMap>
- <typeAlias alias="user" type="com.login.vo.User"/>
- <select id="queryPassword" parameterClass="java.lang.String" resultClass="String">
- SELECT password FROM user WHERE userName = #userName#
- </select>
- </sqlMap>
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMap
- PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
- "
- <sqlMap>
- <typeAlias alias="person" type="com.login.vo.Person"/>
- <insert id="addPerson" parameterClass="person">
- INSERT INTO person(name, age, money)
- VALUES(#name#, #age#, #money#)
- </insert>
- <delete id="deletePerson" parameterClass="java.lang.Integer">
- DELETE FROM person
- WHERE id = #id#
- </delete>
- <update id="updatePerson" parameterClass="person">
- UPDATE person
- SET name = #name#, age = #age#, money = #money#
- WHERE id = #id#
- </update>
- <select id="queryPerson" parameterClass="java.lang.Integer" resultClass="person">
- SELECT * FROM person
- WHERE id = #id#
- </select>
- <select id="queryPersonList" parameterClass="person" resultClass="person">
- SELECT * FROM person
- <dynamic prepend=" WHERE ">
- <isNotEmpty prepend=" AND " property="name">name REGEXP #name#</isNotEmpty>
- <isNotEmpty prepend=" AND " property="age">age REGEXP #age#</isNotEmpty>
- <isNotEmpty prepend=" AND " property="money">money REGEXP #money#</isNotEmpty>
- </dynamic>
- ORDER BY money DESC
- </select>
- </sqlMap>
逻辑服务层
1. 新建一个service类
LoginService.java
- package com.login.service;
- import com.login.vo.User;
- public interface LoginService {
- public boolean login(User user) throws Exception;
- }
- package com.login.service;
- import java.util.List;
- import com.login.vo.Person;
- public interface PersonService {
- public void addPerson(Person person) throws Exception;
- public void deletePerson(Integer id) throws Exception;
- public void updatePerson(Person person) throws Exception;
- public Person queryPerson(Integer id) throws Exception;
- public List<Person> queryPersonList(Person condition) throws Exception;
- }
- package com.login.service.impl;
- import com.login.dao.UserDao;
- import com.login.service.LoginService;
- import com.login.vo.User;
- public class LoginServiceImpl implements LoginService {
- private UserDao userDao;
- public boolean login(User user) throws Exception {
- String password = userDao.queryPassword(user.getUserName());
- if(user.getPassword().equals(password)) {
- return true;
- }
- return false;
- }
- /**userDao set,get**/
- }
- import java.util.List;
- import com.login.dao.PersonDao;
- import com.login.service.PersonService;
- import com.login.vo.Person;
- public class PersonServiceImpl implements PersonService {
- private PersonDao personDao;
- public void addPerson(Person person) throws Exception {
- // TODO Auto-generated method stub
- personDao.addPerson(person);
- }
- public void deletePerson(Integer id) throws Exception {
- // TODO Auto-generated method stub
- personDao.deletePerson(id);
- }
- public Person queryPerson(Integer id) throws Exception {
- // TODO Auto-generated method stub
- return personDao.queryPerson(id);
- }
- public List<Person> queryPersonList(Person condition) throws Exception {
- // TODO Auto-generated method stub
- return personDao.queryPersonList(condition);
- }
- public void updatePerson(Person person) throws Exception {
- // TODO Auto-generated method stub
- personDao.updatePerson(person);
- }
- /**personDao set,get**/
- }
新建Spring配置文件,这里将对不同的层建议不同的spring配置文件,简化配置文件。一个配置data source(applicationContent -comm.xml),其他的用来配置DAO,SERVICE,ACTION.
applicationContent-dao.xmlthe applicationContent-service.xmlPersonAction.java
3 . applicationContent-action.xml4 .新建struts.xml 新建JSP 页面(略)
applicationContent-comm.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="
- xmlns:xsi="
- xmlns:p="
- xsi:schemaLocation="
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName">
- <value>com.mysql.jdbc.Driver</value>
- </property>
- <property name="url">
- <value>jdbc:mysql://127.0.0.1:3306/test</value>
- </property>
- <property name="username">
- <value>root</value>
- </property>
- <property name="password">
- <value>root</value>
- </property>
- </bean>
- <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource"/>
- </property>
- <property name="configLocations">
- <value>/WEB-INF/classes/sqlMapConfig.xml</value>
- </property>
- </bean>
- </beans>
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="
- xmlns:xsi="
- xmlns:p="
- xsi:schemaLocation="
- <bean id="userDao" class="com.login.dao.impl.UserDaoImpl">
- <property name="sqlMapClient">
- <ref bean="sqlMapClient"/>
- </property>
- </bean>
- <bean id="personDao" class="com.login.dao.impl.PersonDaoImpl">
- <property name="sqlMapClient">
- <ref bean="sqlMapClient"/>
- </property>
- </bean>
- </beans>
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="
- xmlns:xsi="
- xmlns:p="
- xsi:schemaLocation="
- <bean id="loginService" class="com.login.service.impl.LoginServiceImpl">
- <property name="userDao">
- <ref bean="userDao"/>
- </property>
- </bean>
- <bean id="personService" class="com.login.service.impl.PersonServiceImpl">
- <property name="personDao">
- <ref bean="personDao"/>
- </property>
- </bean>
- </beans>
1.新建一个action类
LoginAction.java
- package com.login.action;
- import java.util.Map;
- import com.login.service.LoginService;
- import com.login.vo.User;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class LoginAction extends ActionSupport {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private LoginService loginService;
- private User user;
- @Override
- public String execute() {
- try {
- if(null == user) {
- return INPUT;
- }
- boolean isLogin = loginService.login(user);
- //?session
- if(isLogin) {
- Map<String, Object> session = ActionContext.getContext().getSession();
- session.put("login_user", user.getUserName());
- return SUCCESS;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return ERROR;
- }
- public String logOut() {
- Map<String, Object> session = ActionContext.getContext().getSession();
- session.remove("login_user");
- user = null;
- return SUCCESS;
- }
- /**loginServiceuser set,get**/
- }
- package com.login.action;
- import java.util.List;
- import com.login.service.PersonService;
- import com.login.vo.Person;
- import com.opensymphony.xwork2.ActionSupport;
- public class PersonAction extends ActionSupport {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private PersonService personService;
- private Person person;
- //
- private Person condition;
- private List<Person> list;
- private Integer id;
- public String query() {
- // TODO Auto-generated method stub
- try {
- list = personService.queryPersonList(condition);
- return SUCCESS;
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return ERROR;
- }
- public String toAdd() {
- return "toAdd";
- }
- public String add() {
- try {
- personService.addPerson(person);
- return "add";
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return ERROR;
- }
- public String delete() {
- try {
- personService.deletePerson(id);
- return "delete";
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return ERROR;
- }
- public String toUpdate() {
- try {
- person = personService.queryPerson(id);
- return "toUpdate";
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return ERROR;
- }
- public String update() {
- try {
- personService.updatePerson(person);
- return "update";
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return ERROR;
- }
- /**personService?person?condition?idlist set,get**/
- }
2.新建一个拦截器
这样做需要登录信息保存到session,可自己考虑其他方法,或者不用。
- package com.login.intecept;
- import java.util.Map;
- import com.opensymphony.xwork2.Action;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
- public class AuthrityInterceptor extends AbstractInterceptor {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- @Override
- public String intercept(ActionInvocation invocation) throws Exception {
- // TODO Auto-generated method stub
- Map<String, Object> session = ActionContext.getContext().getSession();
- String isLogin = (String) session.get("login_user");
- if(null != isLogin) {
- return invocation.invoke();
- }
- return Action.LOGIN;
- }
- }
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="
- xmlns:xsi="
- xmlns:p="
- xsi:schemaLocation="
- <bean id="loginAction" class="com.login.action.LoginAction">
- <property name="loginService">
- <ref bean="loginService"/>
- </property>
- </bean>
- <bean id="personAction" class="com.login.action.PersonAction">
- <property name="personService">
- <ref bean="personService"/>
- </property>
- </bean>
- </beans>
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "
- <struts>
- <include file="struts-default.xml"/>
- <constant name="struts.objectFactory" value="spring" />
- <package name="default" extends="struts-default">
- <!-- -->
- <interceptors>
- <interceptor name="authrity" class="com.login.intecept.AuthrityInterceptor" />
- <!-- -->
- <interceptor-stack name="myInterceptor">
- <interceptor-ref name="defaultStack" />
- <interceptor-ref name="authrity" />
- </interceptor-stack>
- </interceptors>
- <!-- -->
- <default-interceptor-ref name="myInterceptor" />
- <!-- -->
- <global-results>
- <result name="login" type="redirectAction">login</result>
- <result name="error">/error.jsp</result>
- </global-results>
- <action name="login" class="loginAction">
- <result name="success" type="redirectAction">queryPerson</result>
- <result name="input">/login.jsp</result>
- <interceptor-ref name="defaultStack" />
- </action>
- <action name="logOut" class="loginAction" method="logOut">
- <result name="success">/login.jsp</result>
- <interceptor-ref name="defaultStack" />
- </action>
- <action name="*Person" class="personAction" method="{1}">
- <result name="success">/person/personList.jsp</result>
- <result name="add" type="redirectAction">queryPerson</result>
- <result name="delete" type="redirectAction">queryPerson</result>
- <result name="update" type="redirectAction">queryPerson</result>
- <result name="toAdd">/person/personAdd.jsp</result>
- <result name="toUpdate">/person/personUpdate.jsp</result>
- </action>
- </package>
- </struts>
web.xml.
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5" xmlns="
- xmlns:xsi="
- xsi:schemaLocation="
- <display-name>myweb</display-name>
- <!-- spring spring -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- /WEB-INF/classes/applicationContent-*.xml, classpath:applicationContent-*.xml
- </param-value>
- </context-param>
- <!-- struts -->
- <filter>
- <filter-name>struts</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!-- -->
- <welcome-file-list>
- <welcome-file>login.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
0 0
- 1
- 1
- 1
- 1
- 1
- 1
- 1》
- 1
- 1
- 1
- 1
- (1)
- 1
- 1
- 1
- 1
- 1
- 1
- 十道海量数据处理面试题与十个方法大总结
- 基于ExtJS的左右框架和消息传递处理
- 解释术语:虚拟内存、缺页中断、抖动
- lightoj 1414 February 29
- HDU 1301 Jungle Roads 最小生成树K算法
- 1
- 《SAS编程与数据挖掘商业案例》学习笔记之七
- 获取地址的IP + 站点
- 基于Node.js平台mongoDB开发——mongoskin(by vczero)
- #define中 #与##的神奇用法
- C++拷贝构造函数详解
- HttpClient和HttpURLConnection的使用和区别(上)
- AutoDesk AU社区网址
- 多项式拟合之闭式解推导