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>
- Struts2+Spring+iBatis整合用户管理实例之三:用户管理,增删改查
- Struts2+Spring+iBatis整合用户管理实例之三:用户管理,增删改查
- Struts2+Spring+iBatis整合用户管理实例之二:登录和登出
- Struts2+Spring+iBatis整合用户管理实例之二:登录和登出
- Struts2+Spring+iBatis整合用户管理实例之一:多个Action、service的配置
- Struts2+Spring+iBatis整合用户管理实例之一:多个Action、service的配置
- Struts2+Mybatis+Spring整合增删改查实例
- Struts2+Mybatis+Spring整合增删改查实例
- Struts2+Mybatis+Spring整合增删改查实例
- linux用户管理(增删改)
- maven+springMVC+mybatis+easyUI管理用户增删改查
- Struts2.0+Springframework2.5+ibatis2.3完美整合用户登录及增删改查演示示例 连载中.(三)
- Struts2+Spring+Ibatis用户注册、登录、管理入门学习实例源码下载
- Spring MVC 学习笔记5 —— 实现简单的用户管理,增删改查(1)建立user model
- mongodb整合spring之增删改查
- SpringMVC+hibernate整合小例子,用户的增删查改
- Java servlet+Ajax 用户管理(完全无刷新增删改查及分页)
- 客户(用户)管理系统---基于数据库javaweb的增删改查
- 用标准C编写COM(四)COM in plain C,Part4
- 选出参加工程编译的所有文件
- 球桶组合排列
- c 经典100题
- switch结构注意点
- Struts2+Spring+iBatis整合用户管理实例之三:用户管理,增删改查
- 关于A*(A-star)算法
- 我的毕业设计---家庭点歌系统
- linux下C连接mysql
- 分页实体类代码
- C++this指针
- inf文件
- 来北京的第64天
- c++,tips