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


    用户管理功能的流程是:

    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 set
		password = #password#
		where
		username = #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'"
                    οnclick="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>































  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值