Struts2+Spring+iBatis整合用户管理实例之三:用户管理,增删改查

来源:互联网 发布:阿里旺旺 mac 编辑:程序博客网 时间:2024/05/14 12:03


    用户管理功能的流程是:

    1.管理功能会通过struts跳转到UserManager的Action,(spring帮助注入实例)

    2.UserManagerAction里边聚合了ManagerService实例(也是spring的功劳),调用里边的增删改查的方法

    3.ManagerService实例直接调用dao中增删改查的具体实现的方法

    4.这些具体实现,通过spring管理的getSqlMapClientTemplate(),直接控制iBatis

    5. iBatis去查找相应的mapping配置,读写数据库



    1.UserManagerAction

    聚合了一个UserManagerService实例,调用里边增删改查的实现方法:

public class UserManagerAction extends ActionSupport{    private String username;    private String password;    private IUserManager service;        public UserManagerAction()    {    }public String queryall() {List<User_SSI> list = service.queryall();HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("user", list);return SUCCESS;}public String register()    {boolean flag = false;flag = service.register(getUsername(), getPassword());    return flag==true?SUCCESS:ERROR;    }    public String update() {HttpServletRequest request = ServletActionContext.getRequest();String username = request.getParameter("username");boolean flag = false;System.out.println("username=>"+username);System.out.println("getusername()=>"+getUsername());flag = service.update(username, getPassword());    return flag==true?SUCCESS:ERROR;}public String delete() {HttpServletRequest request = ServletActionContext.getRequest();String username=request.getParameter("username");boolean flag = false;flag = service.delete(getUsername());    return flag==true?SUCCESS:ERROR;}                //setter&getter}


2.ManagerService

聚合了dao实例,实现分层

直接传给dao一个vo的实例,这调试时候出了一个错误:应该完全依靠spring来注入vo,自己在service里new出来的vo可能会出错

public class ManagerService implements IUserManager{private User_SSI user;    private IUserDao dao;    public User_SSI getUser() {return user;}public void setUser(User_SSI u) {this.user = u;}public void setDao(IUserDao dao) {this.dao = dao;}public IUserDao getDao() {return dao;}public List<User_SSI> queryall() {List<User_SSI> l1 = dao.queryUser();return l1;}public boolean register(String username, String password)    {user.setUsername(username);    user.setPassword(password);    dao.insertUser(user);//出过一个NullPointer异常,是因为在这里不能新new一个User,要依赖于Spring注入    return true;    }public boolean update(String username, String password) {user.setUsername(username);    user.setPassword(password);    return dao.updateUser(user);}public boolean delete(String username) {return dao.deleteUser(username);}}



3.UserDaoImpl

ibatis去读配置的任务交给spring了,这里引入 SqlMapClientDaoSupport后直接调用template

省了不少事

相应的,ibatis应该读到的信息要配置到spring中才行

这里执行具体实现时候加了一个命名空间user,这项配置还是ibatis负责的

public class UserDaoImpl extends SqlMapClientDaoSupport implements IUserDao { /*这儿不用手动初始化了,等着spring注入完直接用      * spring会往service里,注入一个带dataSource和ibatis配置的dao      *  private static SqlMapClient sqlMap;void init() {    try {      Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");//借助Reader读入xml配置,注意位置       sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);      reader.close();     } catch (IOException e) {      // Fail fast.      throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);    }  }*/ public List<User_SSI> queryUser() {List<User_SSI> list = null;list = getSqlMapClientTemplate().queryForList("User.getAllUser");return list;}public boolean deleteUser(String id) {int deletedCount = 0;deletedCount = getSqlMapClientTemplate().delete("User.deleteUserById",id);return deletedCount>0?true:false;}public void insertUser(User_SSI u) {int insertCount = 0;getSqlMapClientTemplate().insert("User.insertUser",u);}public boolean updateUser(User_SSI u) {int updatedCount = 0;  updatedCount = getSqlMapClientTemplate().update("User.updateUser",u);System.out.println("updatedCount=>"+updatedCount); return updatedCount>0?true:false;}public List<User_SSI> queryUserName(String name) {List<User_SSI> list = null;list = getSqlMapClientTemplate().queryForList("User.selectUserByUsername",name);return list;}}



4.iBatis对于User的映射文件

这个没什么说的,ibatis的本职工作,整合以后不改变

<?xml version="1.0" encoding="UTF-8" ?>    <!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="vo.User_SSI"/><!-- 别名 --><resultMap id="UserResult" class="User"><result property="username" column="username" /><result property="password" column="password" /></resultMap><select id="getAllUser" resultClass="User" parameterClass="string">SELECT * FROM User_SSI        </select>   <select id="selectUserByUsername" parameterClass="string" resultClass="User">    select      username,      password    from User_SSI    where username = #username#  </select><insert id="insertUser" parameterClass="User">insert into User_SSI (username,password)values (#username#, #password#)  </insert><update id="updateUser" parameterClass="User">update User_SSI setpassword = #password#whereusername = #username#  </update><delete id="deleteUserById" parameterClass="string">delete from User_SSI where username = #username#  </delete></sqlMap>




5.显示用的jsp

管理窗口负责:修改和删除

点修改图标时,弹出一个新窗口操作,

修改完之后,由弹出的窗口来刷新此页面(刷新父页面)

<form action="#" id="myform" name="myform" method="post"><table border=1 width="80%"><tr><th width="39%">用户名</th><th width="39%">密码</th><th>修改</th><th>删除</th></tr><tr><s:iterator value="#request.user" id="id"status="st"> <s:if test="#st.index%2==0||#st.last">     <tr>              </s:if> <td><s:property value="#id.username" /></td><td><s:property value="#id.password" /></td><td><input style="width: 40px; height: 40px" name="button"type="button" class="class1" onMouseOver="this.className='class2'"onMouseOut="this.className='class1'"                    onClick="window.open('update.jsp?username=<s:property value="#id.username" />&password=<s:property value="#id.password" />','new','height=500,width=800,top=100,left=400')"value="修改" /></td><td><input style="width: 40px; height: 40px" name="button"type="button" class="class3" onMouseOver="this.className= 'class4'"onMouseOut="this.className= 'class3'"                    onclick="doLink('delete?username=<s:property value="#id.username" />')"value="删除" /></td>        <s:if test="#st.index%2==0||#st.last">                </tr>               </s:if>   </s:iterator></tr></table></form>


修改之后的结果

这是个弹窗,要刷新一下父页面,不然他自己关了以后,父页面的数据还要手动刷新才能一致

  <body>    <h2>操作成功</h2><!-- 刷新父窗口 --><script language="Javascript">  opener.location.reload();      </script>     <a href=javascript:window.opener=null;window.close()>关闭本窗口</a>  </body>































原创粉丝点击