我们根据数据库里面的表格:生成对应的Mapper接口文件和...Mapperxml文件:
YYCGD:采购单模板表。
YYCGD2014:采购单动态生成表,由存储过程生成。
YYCGDMX:采购单明细模板表。
YYCGDMX2014:采购单明细表,由存储过程生成。
在逆向工程中:
File configFile = new File("generatorConfig-business.xml")
---->
<table schema="" tableName="yycgd" >
</table>
<table schema="" tableName="yycgdmx" >
<columnOverride column="zbjg" javaType="java.lang.Float" />
<columnOverride column="jyjg" javaType="java.lang.Float" />
<columnOverride column="cgl" javaType="java.lang.Integer" />
<columnOverride column="cgje" javaType="java.lang.Float" />
</table>
这么一来,对应的Mapper和Mapperxml文件,和PO类文件就生成了。如下:
PO类:
Mapper接口:
和MapperXML文件:
前面说过我们采用的是分表的方法。所以在逆向工程自动生成的YycgdMapper.xml中把from YYCGD改为from YYCGD${businessyear}我们这样就是在操作动态的数据库表。
这样的话我们可以这么理解了。我们在数据库中可能会生成很多的表(由存储过程创建)比如YYCGD2014,YYCDG2015等。我们就要采用YYCGD${businessyear}这种形式去查找对应的表。
也就是YycgdMapper.java可以应对各种的表。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
正式开始采购单的业务:
我们在创建采购单时,需要填写采购单的基本信息。基本信息填写完成之后,再填写采购单明细信息。
采购单的基本信息填写如下:
采购单基本信息包括:采购年份、采购单名称、建单时间、提交时间、联系人、联系电话、备注、采购单状态。
我们来看一下他的Dao是怎么实现的:
我们针对的就是药品采购单的基本表。我们自定义Mapper:把逆向工程生成的Mapperl接口复制,改为YycgdMapperCusom.java,里面写我们自己的需求。然后把逆向工程生成的YycgdMapper.xml复制生成YycgdMapperCustom.xml文件。里面写我们自己的需求。
需求1:插入一条采购单记录
YycgdMapperCusom.java中我们先写第一个应用:我们要插入采购单记录的话,我们先要构造出采购单的基本信息啊,比如采购单的编号,采购单的状态等等。其他的信息都是
因为我们的药品采购单的采购编号是4位年+6位流水号;
所以我们要想怎么去得到这个采购单编号呢。
我们在PL/SQL中写:
yycgdbm2014就是我们的序列。
select yycgdbm2014.nextval bm from dual的结果是:
然后我们拼接我们的药品采购单的采购编号是4位年+6位流水号;
select 2014||yycgdbm2014.nextval bm from dual
结果:
2014100053就是我们的采购单的编号。
当然我们这是写死了年份2014,在后续的开发中我们的年份值是要传进来的。不能这么直接写死了。
所以在Mapperxml中可以这么写:
得到采购单的编号
<mapper namespace=" yycg.business.dao.mapper.YycgdMapperCustom" >
<!-- 动态sql的拼接,相当于当传入的sring 是2014那么语句就变成了 select 2014||yycgdbm2014.nextval bm from dual 查出来的就是拼接而成的采购单的编号 --> <select id="getYycgdBm" parameterType="string" resultType="string" > select '${value}'||yycgdbm${value}.nextval bm from dual </select>
Dao层:YycgdMapperCustom.java:
public interface YycgdMapperCustom { //采购单编号生成 public String getYycgdBm(String year)throws Exception; }
Service 层:
package yycg.business.service.impl; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import yycg.business.dao.mapper.YycgdMapper; import yycg.business.dao.mapper.YycgdMapperCustom; import yycg.business.pojo.vo.YycgdCustom; import yycg.business.service.YycdgService; public class YycdgServiceImpl implements YycdgService{ @Autowired YycgdMapper yycgdMapper; @Autowired YycgdMapperCustom yycgdMapperCustom; /** * 从页面上传入年份。用这个年份来生成采购单的编号。 * 这里面传入了YycgdCusom这个对象,但是传入的对象里面的属性是不完整的。我们在这个insertYycgd方法里面 * 设置好其余的属性,然后插入到数据库中。 */ @Override public void insertYycgd(String useryyid, String year, YycgdCustom yycgdCustom) throws Exception { String bm=yycgdMapperCustom.getYycgdBm(year);//生成采购单的编号 yycgdCustom.setBm(bm);//设置采购单的编号 yycgdCustom.setBusinessyear(year);//把年加入,这样就可以在MapperXml中使用这个year.用来拼接 yycgdCustom.setId(bm);//采购单id的主键和bm一致,目的是为了方便操作采购单。 yycgdCustom.setUseryyid(useryyid);//创建采购单医院 yycgdCustom.setCjtime(new Date());//创建时间 yycgdCustom.setZt("1");//设置状态 /* *调用原生自带的Mapper接口,把这个数据插入到数据库中。 *insert里面的参数是Yycgd。那我们在这里插入的是YycgdCustom类型的 *没事啊,这是多态么,子类就是父类。当然可以把这个数据插入进去。 * */ yycgdMapper.insert(yycgdCustom); //调用逆向工程自动生成的Mapper来插入数据 } }
Action层:
总体顺序:先经过Action,进入到addcgd函数,在addcgd函数里面会得到有些数据然后跳转到新增页面(在新增页面上显示刚才得到的数据),然后在新增页面上输入数据。然后跳转到插入函数。
在menu.json中:
{"icon" : "icon-sys","menuid" : "1","menuname" : "采购单管理 ","url" : "","menus" : [
{"icon" : "icon-log","menuid" : "1_1","menuname" : "创建采购单","url" : "/yycgproject/cgd/addcgd.action"
}]
点击按钮之后执行 "/yycgproject/cgd/addcgd.action
/** * * @author Sxq * @Title: addcgd * @Description: * 1:得到当前登录单位的名称 * 2:生成采购单的名称 * 3:跳转到新增页面。 * @param @return * @return String * @throws */ @RequestMapping("/addcgd") public String addcgd(HttpSession session,Model model) { ActiveUser activeUser=(ActiveUser)session.getAttribute(Config.ACTIVEUSER_KEY); String sysmc=activeUser.getSysmc();//得到所属单位的名称 //准备页面所需要的数据:因为我们在采购单页面上显示两个内容: //1:药品的采购时间(年) //2:采购单的名称 //所以我们要把这些数据加入到Modele,然后把这些数据传入到下一个页面。 String yycgdmc=sysmc+MyUtil.getDate()+"采购单"; model.addAttribute("yycgdmc",yycgdmc); String year=MyUtil.get_YYYY(MyUtil.getDate());//得到年 model.addAttribute("year",year); return "/business/cgd/addcgd";//跳转到新增页面 }
跳转到新增页面之后,输入数据,然后按下保存按钮。就会进入到提交函数(如下):
// 创建采购单基本信息保存方法 @RequestMapping("/addcgdsubmit") public @ResponseBody SubmitResultInfo addcgdsubmit(HttpSession session, String year, YycgdQueryVo yycgdQueryVo) throws Exception { ActiveUser activeUser = (ActiveUser) session .getAttribute(Config.ACTIVEUSER_KEY); // 医院id String useryyid = activeUser.getSysid(); // 获取采购单id String yycgdid = cgdService.insertYycgd(useryyid, year, yycgdQueryVo.getYycgdCustom()); ResultInfo resultInfo = ResultUtil.createSuccess(Config.MESSAGE, 906, null); // 获取采购单id,将id通过ResultInfo中sysdata传到页面 resultInfo.getSysdata().put("yycgdid", yycgdid); return ResultUtil.createSubmitResult(resultInfo); }
这个提交函数调用完之后会执行jisp页面上的回调函数 。回调函数里面就会跳转到采购单修改页面。
function yycgdsave_callback(data) {
//由服务端统一返回submitResultInfo的json数据,所以客户端统一使用_alert统一解析方法
_alert(data.resultInfo);
//获取新添加的采购单的id
//alert(data.resultInfo.sysdata.yycgdid);
//在这里必须拿新添加的 采购单的id
if(data.resultInfo.type==TYPE_RESULT_SUCCESS){//如果成功跳转至修改页面
//alert(data.resultInfo.sysdata.yycgdid);
var yycgdid=data.resultInfo.sysdata.yycgdid;
window.location='${baseurl}cgd/editcgd.action?id='+yycgdid;
}
}
下面一篇博客就要讲采购单明细表了,就从editcgd.action为入口讲。
到这里基本采购单就创建好了。信息也插入到了数据库中。
数据库信息如下:
--------------------------------------------------------------------------------------------------------------------------------------------
addcgd.jsp页面的代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@ page contentType="text/html; charset=UTF-8"%> <%@ include file="/WEB-INF/jsp/base/tag.jsp"%> <html> <head> <title>采购单创建</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <%@ include file="/WEB-INF/jsp/base/common_css.jsp"%> <%@ include file="/WEB-INF/jsp/base/common_js.jsp"%> <script type="text/javascript"> //采购单保存 function yycgdsave(){ jquerySubByFId('yycgdsaveForm', yycgdsave_callback, null); } /** * 采购单保存回调 * data是服务端响应的数据,服务端统一响应了submitResultInfo对象的json数据 */ function yycgdsave_callback(data) { //由服务端统一返回submitResultInfo的json数据,所以客户端统一使用_alert统一解析方法 _alert(data.resultInfo); //获取新添加的采购单的id //alert(data.resultInfo.sysdata.yycgdid); //在这里必须拿新添加的 采购单的id if(data.resultInfo.type==TYPE_RESULT_SUCCESS){//如果成功跳转至修改页面 //alert(data.resultInfo.sysdata.yycgdid); var yycgdid=data.resultInfo.sysdata.yycgdid; window.location='${baseurl}cgd/editcgd.action?id='+yycgdid; } } </script> </HEAD> <BODY> <form id="yycgdsaveForm" name="yycgdsaveForm" action="${baseurl}cgd/addcgdsubmit.action" method="post"> <TABLE border=0 cellSpacing=0 cellPadding=0 width="70%" bgColor=#c4d8ed align=center> <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>药品采购年份<br>(如2014):</TD> <TD class=category width="35%"> ${year} <input type="hidden" name="year" value="${year}" /> </TD> <TD height=30 width="15%" align=right >采购单名称:</TD> <TD class=category width="35%"> <div> <input type="text" id="yycgd_mc" name="yycgdCustom.mc" value="${yycgdmc}" style="260px" /> </div> <div id="yycgd_mcTip"></div> </TD> </TR> <TR> <TD height=30 width="15%" align=right >建单时间:</TD> <TD class=category width="35%"> </TD> <TD height=30 width="15%" align=right >提交时间:</TD> <TD class=category width="35%"> </TD> </TR> <TR> <TD height=30 width="15%" align=right>联系人:</TD> <TD class=category width="35%"> <input type="text" name="yycgdCustom.lxr" id="yycgdCustom.lxr" style="260px" /> </TD> <TD height=30 width="15%" align=right >联系电话:</TD> <TD class=category width="35%"> <input type="text" name="yycgdCustom.lxdh" id="yycgdCustom.lxdh" style="260px" /> </TD> </TR> <TR> <TD height=30 width="15%" align=right>采购单状态:</TD> <TD class=category width="35%"> </TD> <TD height=30 width="15%" align=right>备注:</TD> <TD colspan=3> <textarea rows="2" cols="30" name="yycgdCustom.bz"></textarea> </TD> </TR> <TR> <TD height=30 width="15%" align=right>审核时间:</TD> <TD class=category width="35%"> </TD> <TD height=30 width="15%" align=right >审核意见:</TD> <TD class=category width="35%"> </TD> </TR> <tr> <td colspan=4 align=center class=category> <a href="#" onclick="yycgdsave()" class="easyui-linkbutton" iconCls='icon-save'>保存</a> </td> </tr> </TBODY> </TABLE> </TD> </TR> </TBODY> </TABLE> </form> </BODY> </HTML>
结束。