struts2+MyBatis框架整合

mac2022-06-30  23

Hibernate,为了DAO的ORMapping,生生把SQL的优良特性给腰斩完蛋了。比起来更喜欢MyBatis,不失SQL的灵活。

但,MyBatis怎么挂载到Struts2中呢?搜遍大江南北都是利用Spring——你们还有没有点新鲜玩意儿?说白了,就是我这个小小的项目用Sping不是杀鸡用牛刀吗,而且Sping的复杂度让人望而却步。

所以我们现在用一个MybatisUtil工具类,实现sqlSessionFactory连接

在映射类Dao中实现一个DaoImpl,来简易方便,使用struts2+MyBatis框架整合的技术。

项目结构目录图:

  src:

WebRoot:

配置Struts2:web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <filter>    <filter-name>struts2</filter-name>    <filter-class>             org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter    </filter-class>  </filter>  <filter-mapping>    <filter-name>struts2</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>  </web-app>

 

一步:编写实体类,映射类操作接口和具体实现类

public class UserInfo {    private String userid;    private String username;    private String userpwd;        private int userStatus;//默认为0,正常。1为注销    private Date userTime;

get……set 方法

}

public interface IUserInfo {    public UserInfo findByName(String username);    //public UserInfo findById(String userid);    public void insertUser(UserInfo user);    //public void updateToLock(Map map);    //public void updateToFailedCount(Map map);    //public void updateToIsOrNotActive(Map map);    public void updateToPwd(Map map);    //public void updateToPwdChangeTime(Map map);    //public void updateToIsOrNotFirst(Map map);        public void deleteUser(UserInfo user);}

IUserInfoImpl.java

public class IUserInfoImpl implements IUserInfo {    public void deleteUser(UserInfo user) {        SqlSession session = MybatisUtils.currentSession();        IUserInfo iUserInfoDao = session.getMapper(IUserInfo.class);        iUserInfoDao.deleteUser(user);        session.commit();        MybatisUtils.closeSession();    }    public UserInfo findByName(String username) {        SqlSession session = MybatisUtils.currentSession();        IUserInfo iUserInfoDao = session.getMapper(IUserInfo.class);                return iUserInfoDao.findByName(username);    }    public void insertUser(UserInfo user) {        SqlSession session = MybatisUtils.currentSession();        IUserInfo iUserInfoDao = session.getMapper(IUserInfo.class);        iUserInfoDao.insertUser(user);        session.commit();        MybatisUtils.closeSession();    }    public void updateToPwd(Map map) {        SqlSession session = MybatisUtils.currentSession();        IUserInfo iUserInfoDao = session.getMapper(IUserInfo.class);        iUserInfoDao.updateToPwd(map);        session.commit();        MybatisUtils.closeSession();    }}

二步:编写接口映射器,UserMap.xml,和MyBatis部署配置文件

UserMap.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.cloudycd.yanmj.dao.IUserInfo">    <resultMap type="UserInfo" id="userResultMap">        <id property="userid" column="USERID"/>        <result property="username" column="USERNAME"/>        <result property="userpwd" column="USERPWD"/>        <result property="userStatus" column="USERSTATUS"/>         <result property="userTime" column="USERTIME"/>    </resultMap>        <select id="findByName" parameterType="String" resultMap="userResultMap">                SELECT * FROM USERINFO SU                      WHERE SU.USERNAME = #{username}    </select>        <!--     <select id="findById" parameterType="String" resultMap="userResultMap">                SELECT * FROM USERINFO SU                      WHERE SU.USERNAME = #{userid}    </select>     -->        <insert id="insertUser" parameterType="UserInfo">                INSERT INTO USERINFO(USERID,USERNAME,USERPWD,USERSTATUS,USERTIME)                    VALUES(#{userid},#{username},#{userpwd},#{userStatus},#{userTime})    </insert>            <update id="updateToPwd" parameterType="Map">                UPDATE USERINFO SU                    SET     SU.USERPWD= #{userpwd}                    WHERE SU.USERNAME= #{username}    </update>            <delete id="deleteUser" parameterType="UserInfo">             DELETE FROM USERINFO                    WHERE USERNAME = #{username}                </delete> </mapper>  

myBatis-config.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"     "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <typeAliases>        <typeAlias alias="UserInfo" type="com.cloudycd.yanmj.entity.UserInfo"/>    </typeAliases>         <environments default="development">            <environment id="development">            <transactionManager type="JDBC"/>            <dataSource type="POOLED">                <property name="driver" value="com.mysql.jdbc.Driver"/>                <property name="url" value="jdbc:mysql://127.0.0.1:3306/userlogin"/>                <property name="username" value="root"/>                <property name="password" value="root"/>            </dataSource>        </environment>            </environments>        <mappers>        <mapper resource="com/cloudycd/yanmj/dao/UserMap.xml" />    </mappers></configuration>

三步:配置Struts2.

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts>     <constant name="strtus.i18n.encoding" value="UTF-8" />    <package name="userlogin" extends="struts-default">            <action name="login">            <result>/jsp/userLogin.jsp</result>        </action>        <action name="backlogin">            <result>/jsp/userLogin.jsp</result>        </action>                <action name="toregister">            <result>/jsp/register.jsp</result>        </action>          <action name="modifyPwd">            <result>/jsp/modifyPwd.jsp</result>        </action>        <action name="deleteUser">            <result>/jsp/deleteUser.jsp</result>        </action>                <action name="loginAction" class="com.cloudycd.yanmj.action.LoginAction">            <result name="success">/jsp/logined.jsp</result>            <result name="input">/jsp/userLogin.jsp</result>            <result name="error">/jsp/loginfailed.jsp</result>            <result name="modifypwd">/jsp/modifyPwd.jsp</result>        </action>        <!--     <action name="toActivateAction" class="com.cloudycd.yanmj.action.ToActivateAction">            <result name="success">/jsp/logined.jsp</result>        </action> -->                  <action name="modifyPwdAction" class="com.cloudycd.yanmj.action.ModifyPwdAction">            <result name="userlogin">/jsp/userLogin.jsp</result>            <result name="input">/jsp/modifyPwd.jsp</result>            <result name="ReLogin">/jsp/userLogin.jsp</result>        </action>        <action name="registerAction" class="com.cloudycd.yanmj.action.RegisterAction">            <!-- <result name="success" type="redirect">loginAction.action</result>-->            <result name="success">/jsp/userLogin.jsp</result>            <result name="input">/jsp/register.jsp</result>        </action>        <action name="deleteUserAction" class="com.cloudycd.yanmj.action.DeleteUserAction">            <!-- <result name="success" type="redirect">loginAction.action</result>-->            <result name="success">/jsp/deleteUser.jsp</result>            <result name="error">/jsp/deleteUser.jsp</result>        </action>            </package></struts>

四步:写ActionSupport:

package com.cloudycd.yanmj.action;import com.cloudycd.yanmj.dao.IUserInfo;import com.cloudycd.yanmj.dao.IUserInfoImpl;import com.cloudycd.yanmj.entity.UserInfo;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport {    /**     *      */    private static final long serialVersionUID = 1L;    private static int failedcount = 0;    private UserInfo userInfo;    private IUserInfo iuinfo ;    public UserInfo getUserInfo() {        return userInfo;    }    public void setUserInfo(UserInfo userInfo) {        this.userInfo = userInfo;    }    @Override    public String execute() throws Exception {        //boolean flag = userLogin.checkUsername(userInfo.getUsername());        // 根据username获得userpwd        //System.out.println("flag=" + flag);        //UserInfo uinfo =null;                        iuinfo = new IUserInfoImpl();        UserInfo uinfo = iuinfo.findByName(userInfo.getUsername());         System.out.println("userInfo.userpwd=" + userInfo.getUserpwd() + ",userInfo.username=" +userInfo.getUsername());            System.out.println("uinfo.userpwd=" + uinfo.getUserpwd() + ",uinfo.username=" +uinfo.getUsername());            if (uinfo.getUsername().equals(userInfo.getUsername())) {                        if (!uinfo.getUserpwd().equals(userInfo.getUserpwd())) {                                if (failedcount == 3) {                    // 记录failedcount+1,并记录当前时间errortime和修改ISORNOTLOCK锁定状态                            uinfo.getUsername();                    this.addActionMessage("sorry! 密码不正确!登录错误次数已经3次,请于10分钟后再尝试登录。");                }else {                    failedcount++;                    this.addActionMessage("sorry! 密码不正确!");                }                return "error";            } else {                //修改为:userStatus,0:正常,1:注销                // 如果密码匹配                if (uinfo.getUserStatus() == 0) {                    // 判断是否是激活的,如果未激活 ##1:激活 ,0:未激活                    this.addActionMessage("用户正常");                    return "success";                } else if (uinfo.getUserStatus() == 1) {                    this.addActionMessage("用户已注销!");                    return "error";                }            }        } else {            this.addActionMessage("不存在的用户!");            return "error";        }    return null;        }}ModifyPwdAction .java

package com.cloudycd.yanmj.action;import java.util.HashMap;import java.util.Map;import com.cloudycd.yanmj.dao.IUserInfo;import com.cloudycd.yanmj.dao.IUserInfoImpl;import com.cloudycd.yanmj.entity.UserInfo;import com.opensymphony.xwork2.ActionSupport;public class ModifyPwdAction extends ActionSupport{    /**     *      */    private static final long serialVersionUID = 1L;    private UserInfo userInfo;    private IUserInfo iuserinfo;      public UserInfo getUserInfo() {        return userInfo;    }    public void setUserInfo(UserInfo userInfo) {        this.userInfo = userInfo;    }    @Override    public String execute() throws Exception {        iuserinfo = new IUserInfoImpl();        UserInfo uinfo = iuserinfo.findByName(userInfo.getUsername());                    if(uinfo.getUsername().equals(userInfo.getUsername())){                //修改密码                Map map=new HashMap();                map.put("username",userInfo.getUsername());                map.put("userpwd", userInfo.getUserpwd());                iuserinfo.updateToPwd(map);                this.addActionMessage("密码修改成功,请重新登陆");                return "userlogin";            }else{                this.addActionMessage("用户名、密码错误,请重新输入");                return "ReLogin";            }        }}

RegisterAction.java

package com.cloudycd.yanmj.action;import java.util.Date;import com.cloudycd.yanmj.dao.IUserInfo;import com.cloudycd.yanmj.dao.IUserInfoImpl;import com.cloudycd.yanmj.entity.UserInfo;import com.opensymphony.xwork2.ActionSupport;public class RegisterAction extends ActionSupport{    /**     *      */    private static final long serialVersionUID = 1L;    private UserInfo userInfo;    private IUserInfo iuserinfo;        public UserInfo getUserInfo() {        return userInfo;    }    public void setUserInfo(UserInfo userInfo) {        this.userInfo = userInfo;    }    @Override    public String execute() throws Exception {        iuserinfo = new IUserInfoImpl();                userInfo.setUserTime(new Date());                iuserinfo.insertUser(userInfo);                userInfo.printUserInfo();        this.addActionMessage("register success!");        return "success";    }}DeleteUserAction .javapackage com.cloudycd.yanmj.action;import com.cloudycd.yanmj.dao.IUserInfo;import com.cloudycd.yanmj.dao.IUserInfoImpl;import com.cloudycd.yanmj.entity.UserInfo;import com.opensymphony.xwork2.ActionSupport;public class DeleteUserAction extends ActionSupport{    /**     *      */    private static final long serialVersionUID = 1L;    private UserInfo userInfo;    private IUserInfo iuserinfo;        public UserInfo getUserInfo() {        return userInfo;    }    public void setUserInfo(UserInfo userInfo) {        this.userInfo = userInfo;    }    @Override    public String execute() throws Exception {                iuserinfo = new IUserInfoImpl();        iuserinfo.deleteUser(userInfo);        userInfo.printUserInfo();        this.addActionMessage("delete success!");        return "success";    }}    五步:编写jsp页面

userLogin.jsp

<div id="global"><s:actionmessage/><s:fielderror></s:fielderror><form action="loginAction.action"  method="post">USERNAME:<input type="text" name="userInfo.username">PASSWORD:<input type="password" name="userInfo.userpwd"><br><input type="submit"  value="LOGIN"><input type="reset" value="reset"><br><a href="toregister.action">register</a><a href="modifyPwd.action">Change the password</a><a href ="deleteUser.action">Delete the User</a></form></div>

deleteUser.jsp

 <div id="global"><s:actionmessage/><form action="deleteUserAction.action"  method="post">    USERNAME:<input type="text" name="userInfo.username"><input type="submit"  value="GO"><s:fielderror></s:fielderror></form></div><a href ="index.jsp">返回登录页面</a></body>

logined.jsp

<div id="div_logined"><s:actionmessage/><h3>WELCOME    </h3><p>${UserInfo.username }</p></div><a href ="index.jsp">返回登录页面</a></body>

modifyPwd.jsp

<div id="global"><s:actionmessage/><form action="modifyPwdAction.action"  method="post">USERNAME<input type="text" name="userInfo.username"/>new password:<input type="password" name="userInfo.userpwd"><input type="submit"  value="GO"><s:fielderror></s:fielderror></form></div>

register.jsp

<div id="global"><s:actionmessage/><form action="registerAction.action"  method="post"><h4>user register</h4>USERID:  <input type="text" name="userInfo.userid"><br>USERNAME:  <input type="text" name="userInfo.username"><br>PASSWORD:  <input type="password" name="userInfo.userpwd"><br>USERSTATUS:<input type="text" name = "userInfo.userStatus"><br>        <input type="hidden" name ="userInfo.userTime">                      <input type="submit"  value="GO"><s:fielderror></s:fielderror></form></div>

 

转载于:https://www.cnblogs.com/SunDexu/archive/2013/05/26/3099945.html

相关资源:Struts2 Spring Mybatis整合jar包(完整版)
最新回复(0)