010医疗项目-模块一:用户添加的实现(Dao,Service,Action,增加页面调试,提交页面调试)...

要实现的效果:

添加用户:

用户账号(输入)、用户名称(输入)、用户密码(输入)、用户类型(下拉)、用户单位名称(输入)、用户状态(单选)

用户类型:

 

前置条件(操作约束):

用户账号不允许重复

根据用户类型,输入单位名称必须存在对应的单位表

 

 

后置条件(数据库操作):

向sysuser表插入一条记录

 

分析开发:

Dao层:

向sysuser表插入一条记录

使用逆向工程生成的mapper实现。

具体实现:

SysuserMapper.java代码:

package yycg.base.dao.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Param;
import yycg.base.pojo.po.Sysuser;
import yycg.base.pojo.po.SysuserExample;

public interface SysuserMapper {
    int countByExample(SysuserExample example);

    int deleteByExample(SysuserExample example);

    int deleteByPrimaryKey(String id);

    int insert(Sysuser record);//主要是这句代码

    int insertSelective(Sysuser record);

    List selectByExample(SysuserExample example);

    Sysuser selectByPrimaryKey(String id);

    int updateByExampleSelective(@Param("record") Sysuser record, @Param("example") SysuserExample example);

    int updateByExample(@Param("record") Sysuser record, @Param("example") SysuserExample example);

    int updateByPrimaryKeySelective(Sysuser record);

    int updateByPrimaryKey(Sysuser record);
}

SysuserMapper.xm代码:

  <insert id="insert" parameterType="yycg.base.pojo.po.Sysuser" >
    insert into SYSUSER (ID, USERID, USERNAME, 
      GROUPID, PWD, CONTACT, 
      ADDR, EMAIL, USERSTATE, 
      REMARK, CREATETIME, SEX, 
      PHONE, MOVEPHONE, FAX, 
      LASTUPDATE, VCHAR1, VCHAR2, 
      VCHAR3, VCHAR4, VCHAR5, 
      SYSID)
    values (#{id,jdbcType=VARCHAR}, #{userid,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, 
      #{groupid,jdbcType=CHAR}, #{pwd,jdbcType=VARCHAR}, #{contact,jdbcType=VARCHAR}, 
      #{addr,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{userstate,jdbcType=CHAR}, 
      #{remark,jdbcType=VARCHAR}, #{createtime,jdbcType=TIMESTAMP}, #{sex,jdbcType=VARCHAR}, 
      #{phone,jdbcType=VARCHAR}, #{movephone,jdbcType=VARCHAR}, #{fax,jdbcType=VARCHAR}, 
      #{lastupdate,jdbcType=VARCHAR}, #{vchar1,jdbcType=VARCHAR}, #{vchar2,jdbcType=VARCHAR}, 
      #{vchar3,jdbcType=VARCHAR}, #{vchar4,jdbcType=VARCHAR}, #{vchar5,jdbcType=VARCHAR}, 
      #{sysid,jdbcType=VARCHAR})
  insert>

上面的这两个文件都是由逆向工程实现的,在配置时只要让Spring整合时去扫描这个包。就会注册在bean容器中,就可以使用了。

 

 

 

接下来写Service层代码:

Service层是要实现一些业务逻辑的,因为,这里是增加用户进数据库的行为,我们要对操作进行各种验证,比如,用户的账号只能唯一,如果账号重复就不能插入数据,

根据用户的输入的单位名称来查找在单位表中有没有这个单位,没有的话就出错,有的话就通过等等。

用到的接口及其实现类:

UserService.java:

package yycg.base.service;

import java.util.List;

import yycg.base.pojo.po.Sysuser;
import yycg.base.pojo.po.Usergys;
import yycg.base.pojo.po.Userjd;
import yycg.base.pojo.po.Useryy;
import yycg.base.pojo.vo.SysuserCustom;
import yycg.base.pojo.vo.SysuserQueryVo;

public interface UserService {
    // 查找用户
    public List findSysuserCustom(SysuserQueryVo sysuserQueryVo)
            throws Exception;

    // 查找用户的总个数
    public int findSysuserCount(SysuserQueryVo sysuserQueryVo) throws Exception;

    public void insertSysuser(SysuserCustom sysuserCustom) throws Exception;

    // 根据用户的id来查找用户。
    public Sysuser findSysuerByUserid(String userid) throws Exception;

    // 根据供货商的名字来查找供货商信息
    public Usergys findUsergesByMc(String mc) throws Exception;

    // 根据医院的名字来查找医院信息
    public Useryy findUseryyByMc(String mc) throws Exception;

    // 根据监督单位的名称查询单位的信息。
    public Userjd findUserJdByMc(String mc) throws Exception;

}

 

UserServiceimpl.java:

package yycg.bae.service.impl;

import java.util.List;

import jsx3.gui.IFrame;

import org.springframework.aop.ThrowsAdvice;
import org.springframework.beans.factory.annotation.Autowired;

import yycg.base.dao.mapper.SysuserMapper;
import yycg.base.dao.mapper.SysuserMapperCustom;
import yycg.base.dao.mapper.UsergysMapper;
import yycg.base.dao.mapper.UserjdMapper;
import yycg.base.dao.mapper.UseryyMapper;
import yycg.base.pojo.po.Sysuser;
import yycg.base.pojo.po.SysuserExample;
import yycg.base.pojo.po.Usergys;
import yycg.base.pojo.po.UsergysExample;
import yycg.base.pojo.po.Userjd;
import yycg.base.pojo.po.UserjdExample;
import yycg.base.pojo.po.Useryy;
import yycg.base.pojo.po.UseryyExample;
import yycg.base.pojo.vo.SysuserCustom;
import yycg.base.pojo.vo.SysuserQueryVo;
import yycg.base.service.UserService;
import yycg.util.UUIDBuild;

public class userServiceimpl implements UserService {

    // 注入自定义的Mapper()
    @Autowired
    SysuserMapperCustom sysuserMapperCustom;
    // 注入Mapper(逆向工程生成的),这里生成了用户表的一系列查询。
    @Autowired
    SysuserMapper sysuserMapper;
    // 三个单位的Mapper注入。只有注册了才能用里面的单表查询

    // 供货商单位表
    @Autowired
    UsergysMapper usergysMapper;
    // 监督单位
    @Autowired
    UserjdMapper userjdMapper;

    // 医院单位表
    @Autowired
    UseryyMapper useryyMapper;

    // 查询数据库中的记录。
    @Override
    public List findSysuserCustom(SysuserQueryVo sysuserQueryVo)
            throws Exception {
        return sysuserMapperCustom.findSysuserList(sysuserQueryVo);
    }

    // 查询数据库中有几条记录的
    @Override
    public int findSysuserCount(SysuserQueryVo sysuserQueryVo) throws Exception {
        return sysuserMapperCustom.findSysuserCount(sysuserQueryVo);
    }

    // 根据账号来查找用户找到就返回用户,找不到就返回null.
    public Sysuser findSysuerByUserid(String userid) throws Exception {

        // 生成自定义条件需要的Criteria
        SysuserExample sysuserExample = new SysuserExample();
        SysuserExample.Criteria criteria = sysuserExample.createCriteria();
        // 设置查询条件
        criteria.andUseridEqualTo(userid);
        // 根据自定义的条件来查询
        List list = sysuserMapper.selectByExample(sysuserExample);
        if (list != null && list.size() == 1) {
            return list.get(0);

        } else {

            return null;
        }

    }
    
    
    //根据监督单位的名称查询单位的信息。
    public Userjd findUserJdByMc(String mc) throws Exception
    {
        // 生成自定义条件需要的Criteria
        UserjdExample userjdExample = new UserjdExample();
       UserjdExample.Criteria criteria=userjdExample.createCriteria();
        
        // 设置查询条件
       criteria.andMcEqualTo(mc);
        // 根据自定义的条件来查询
        List list=userjdMapper.selectByExample(userjdExample);
        if (list != null && list.size() == 1) {
            return list.get(0);

        } else {

            return null;
        }
        
        
    }
    
    
    
    
    
    
    
    
    //根据医院的名字来查找医院信息
    public Useryy findUseryyByMc(String mc) throws Exception
    {
        // 生成自定义条件需要的Criteria
        UseryyExample useryyExample = new UseryyExample();
       UseryyExample.Criteria criteria=useryyExample.createCriteria();
        
        // 设置查询条件
       criteria.andMcEqualTo(mc);
        // 根据自定义的条件来查询
        List list=useryyMapper.selectByExample(useryyExample);
        if (list != null && list.size() == 1) {
            return list.get(0);

        } else {

            return null;
        }
        
        
    }
    

    
    //根据供货商的名字来查找供货商信息
    public Usergys findUsergesByMc(String mc) throws Exception
    {
        // 生成自定义条件需要的Criteria
        UsergysExample usergysExample = new UsergysExample();
        UsergysExample.Criteria criteria=usergysExample.createCriteria();
        
        // 设置查询条件
       criteria.andMcEqualTo(mc);
        // 根据自定义的条件来查询
        List list=usergysMapper.selectByExample(usergysExample);
        if (list != null && list.size() == 1) {
            return list.get(0);

        } else {

            return null;
        }
        
        
    }

    @Override
    public void insertSysuser(SysuserCustom sysuserCustom) throws Exception {

        //参数的校验
        //通用的参数合法性校验
        
    Sysuser sysuser=findSysuerByUserid(sysuserCustom.getUserid());
    //如果不等于空,就是账号重复了。给出一个警告。
        if(sysuser!=null)
        {
            //包警告告诉到Action,可以再Aciton中捕获这个异常。
            throw new Exception("账号重复");
            
        }
        //根据用户类型,输入单位名称必须存在对应的单位表中
        String groupid=sysuserCustom.getGroupid();//用户类型
        String sysmc=sysuserCustom.getSysmc();//单位名称

//String userid=null;这里加上这么一句,下面的BUG就解决了。
if(groupid.equals("1")||groupid.equals("2")) { //监督单位 //根据单位名称查询单位的信息。 Userjd userjd=this.findUserJdByMc(sysmc); if(userjd==null) { throw new Exception("单位名称输入错误"); } //userid=userjd.getId(); 这里加上这么一句,下面的BUG就解决了。 } //卫生室 else if(groupid.equals("3")) { //根据单位名称查询单位的信息,查不到就报错 Useryy useryy=this.findUseryyByMc(sysmc); if(useryy==null) { throw new Exception("单位名称输入错误"); }
//userid=useryy.getId();这里加上这么一句,下面的BUG就解决了。 }
else if(groupid.equals("4")){ Usergys usergys=this.findUsergesByMc(sysmc); if(usergys==null) { throw new Exception("单位名称错误"); }
//userid=usergys.getId();这里加上这么一句,下面的BUG就解决了。

} sysuserCustom.setId(UUIDBuild.getUUID());

/******************
sysuserCustom.setSysid(userid);//这里加上这么一句,下面的BUG就解决了。
*****************************/
//把数据插入到数据库 //刚开始的时候感到很奇怪,就是在SysuserMapper.xml中写着输入的参数是yycg.base.pojo.po.Sysuser //但是我这里输入的是sysuserCustom,明显不是Sysuser类型啊,其实是没有关系的,因为,这里的sysuserCustom //继承了Sysuser.所以Sysuser里面有的,在SysuserCustom里面都是有的的。

//上面的检验都通过后就把数据插入到数据库。
sysuserMapper.insert(sysuserCustom); } }

 

 

接下写Action层:

 

在这个层里面还要做的是捕获Servicec层里面的异常。这一点很重要。

 

Action主要做的调用Service层得到数据,然后转发数据。

这一层不能写业务逻辑代码,业务逻辑代码要写在Service层中。

这一层主要写两个函数,第一个是:添加用户界面。第二个是添加用户提交。

添加用户界面是当用户进来时,跳转到用户界面。

输入好用户信息后进入到添加用户提交函数,在这个函数里面调用Service层代码,把数据插入到数据库中。

具体代码如下:

 

//添加用户页面
    
    @RequestMapping("/addsysuser")
    public String  addsysuser(Model model) throws Exception
    {
        return "/base/user/addsysuser";
        
        
    }
    
    //添加用户提交
    //提交的结果要转json到页面
    //提交表单的数据一律使用包装类,这里我们用的是SysuserQueryVo
    //在SysuserQueryVo中包装了SysuserCustom
    @RequestMapping("/addsysusersubmit")
    public @ResponseBody Map addsysusersubmit(SysuserQueryVo sysuserQueryVo) throws Exception
    {
      //提示用户的信息。
        String message="操作成功";
        int type=0;//0表示成功,1表示失败。默认是成功的
        try {
            //调用Service执行用户的添加。如果在Service层里面出现了异常,在这里进行捕获异常
            userService.insertSysuser(sysuserQueryVo.getSysuserCustom());
        } catch (Exception e) {
            e.printStackTrace();
            message=e.getMessage();
            type=1;//表示失败。
            
        }
        //将执行结果返回到页面
        Map result_map=new HashMap();
        result_map.put("type", type);
        result_map.put("message", message);
        
        
        return result_map;
        
    }

 

 

 

 

调试增加页面:

在用户列表页面中,点击“添加”,打开添加页面。

 

来到添加页面:

 

在这里输入信息。

 具体的实现如下:

在之前的queryuser.jsp页面中,有这么一段代码:

    //定义 datagird工具
    var toolbar_v = [ {//工具栏
        id : 'btnadd',
        text : '添加',
        iconCls : 'icon-add',
        handler : function() {
            //打开一个窗口,用户添加页面
            //参数:窗口的title、宽、高、url地址
            createmodalwindow("添加用户信息", 800, 250, '${baseurl}user/addsysuser.action');
        }
    } ];

createmodalwindow("添加用户信息", 800, 250, '${baseurl}user/addsysuser.action');知道点击“添加”按钮,我们进入到这个Action中。然后来到了UserAction中的下的

    //添加用户页面addsysuser
    
    @RequestMapping("/addsysuser")
    public String  addsysuser(Model model) throws Exception
    {
        return "/base/user/addsysuser";
        
        
    }
    

然后根据 return "/base/user/addsysuser";来到了addsysuser.jsp页面,就会出现

这个页面。

我们来研究一下addsysuser.jsp代码。

addsysuser.jsp代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/jsp/base/tag.jsp"%>
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<LINK rel="stylesheet" type="text/css" href="${baseurl}js/easyui/styles/default.css">
<%@ include file="/WEB-INF/jsp/base/common_css.jsp"%>
<%@ include file="/WEB-INF/jsp/base/common_js.jsp"%>
<title>添加用户title>
<script type="text/javascript">
  function sysusersave(){
      //准备使用jquery 提供的ajax Form提交方式
      //将form的id传入,方法自动将form中的数据组成成key/value数据,通过ajax提交,提交方法类型为form中定义的method,
      //使用ajax form提交时,不用指定url,url就是form中定义的action
      //此种方式和原始的post方式差不多,只不过使用了ajax方式
      
      //第一个参数:form的id
      //第二个参数:sysusersave_callback是回调函数,sysusersave_callback当成一个方法的指针
      //第三个参数:传入的参数, 可以为空
      //第四个参数:dataType预期服务器返回的数据类型,这里action返回json
      //根据form的id找到该form的action地址,按这个网址进行提交。
      jquerySubByFId('userform',sysusersave_callback,null,"json");
      
  }
  //ajax调用的回调函数,ajax请求完成调用此函数,传入的参数是action返回的结果
  function sysusersave_callback(data){
      
      //message_alert(data);
     alert(data.message);
      /* if(data.type=='0'){
          $.messager.alert('提示信息',data.message,'success');
      }else{
          $.messager.alert('提示信息',data.message,'error');
      } */
     
      //action返回的是json数据
      //如果是成功显示一个对号
      
      //如果是错误信息
      
    //提交结果类型
    //data中存放的是action返回Resultinfo,有一个type
        /* var type=data.resultInfo.type;
        //结果提示信息
        var message=data.resultInfo.message;
        //alert(message);
        if(type==0){
            //如果type等于0表示失败,调用 jquery easyui的信息提示组件
            $.messager.alert('提示信息',message,'error');
        }else if(type==1){
            $.messager.alert('提示信息',message,'success');
        }else if(type==2){
            $.messager.alert('提示信息',message,'warning');
        }else if(type==3){
            $.messager.alert('提示信息',message,'info');
        }
       */
     
      
  }
 
script>
head>
<body>


<form id="userform" action="${baseurl}user/addsysusersubmit.action" method="post">
<TABLE border=0 cellSpacing=0 cellPadding=0 width="100%" bgColor=#c4d8ed>

   <TBODY>
   <TR>
                <TD background=images/r_0.gif width="100%">
                    <TABLE cellSpacing=0 cellPadding=0 width="100%">
                        <TBODY>
                            <TR>
                                <TD> 系统用户信息TD>
                                <TD align=right> TD>
                            TR>
                        TBODY>
                    TABLE>
                TD>
            TR>
            
            <TR>
                <TD>
                    <TABLE class="toptable grid" border=1 cellSpacing=1 cellPadding=4
                        align=center>
                        <TBODY>
                            
                            <TR>
                                <TD height=30 width="15%" align=right >用户账号:TD>
                                <TD class=category width="35%">
                                <div>
                                <input type="text" id="sysuser_userid" name="sysuserCustom.userid"  />
                                div>
                                
                                <div id="sysuser_useridTip">div>
                                TD>
                                <TD height=30 width="15%" align=right >用户名称:TD>
                                <TD class=category width="35%">
                                <div>
                                <input type="text" id="sysuser_username" name="sysuserCustom.username"  />
                                div>
                                <div id="sysuser_usernameTip">div>
                                TD>
                            TR>
                            <TR>
                                <TD height=30 width="15%" align=right >用户密码:TD>
                                <TD class=category width="35%">
                                <div>
                                    <input type="password" id="sysuser_password" name="sysuserCustom.pwd" />
                                div>
                                <div id="sysuser_passwordTip">div>
                                TD>
                                <TD height=30 width="15%" align=right >用户类型:TD>
                                <TD class=category width="35%">
                                <div>
                                <select name="sysuserCustom.groupid" id="sysuser_groupid">
                                    
                                <option value="">请选择option>
                                <option value="1">卫生局option>
                                <option value="2">卫生院option>
                                <option value="3">卫生室option>
                                <option value="4">供货商option>
                                <option value="0">系统管理员option>
    
                                select>
                                div>
                                <div id="sysuser_groupidTip">div>
                                TD>
                                
                                
                            TR>
                            <TR>
                                <TD height=30 width="15%" align=right >用户单位名称:TD>
                                <TD class=category width="35%">
                                <input type="text" name="sysuserCustom.sysmc" />
                                TD>
                                <TD height=30 width="15%" align=right>用户状态:TD>
                                <TD class=category width="35%">
                                <input type="radio" name="sysuserCustom.userstate" value="1" />正常
                                <input type="radio" name="sysuserCustom.userstate" value="0" />暂停
                                TD>
                                
                            TR>
                            <tr>
                              <td colspan=4 align=center class=category>
                                <a id="submitbtn"  class="easyui-linkbutton"   iconCls="icon-ok" href="#" onclick="sysusersave()">提交a>
                                <a id="closebtn"  class="easyui-linkbutton" iconCls="icon-cancel" href="#" onclick="parent.closemodalwindow()">关闭a>
                              td>
                            tr>
                        
                            TBODY>
                        TABLE>
                    TD>
                TR>
   TBODY>
TABLE>
form>
body>
html>

 

输入数据后点击提交就可以执行。

流程如下:

点击提交,进入到sysusersave()函数。这个函数的解释如下:

 jquerySubByFId('userform',sysusersave_callback,null,"json");

“userform”是表单的id,

sysusersave_callback是回调函数,执行完后会执行这个函数。

“json”表示返回的类型是从服务器返回到页面的数据类型是json格式。

 

 

 

上面做好后调试,出现了一个BUG。那就是

 

 

按照上面的页面输入数据,提交后,在查询adsasda之后出现所属单位是空。

 

 

原因分析:

在我们上面的userServiceimpl.java中

insertSysuser函数里面:

只设置了sysuer的主键id.并没有设置工作单位的id.所有应该加上sysuserCustom.setSysid(userid);这里的userid是单位的id,他是怎么来的呢?我们之前不是在if里面把

单位都查出来了吗?那么查他的主键id还难吗?具体修改方法上面已写。

 

你可能感兴趣的:(java,数据库,json)