使用Maven基于ssm框架的完整商务管理开发项目(02)
2016-11-09 11:36
701 查看
首先要完成的是基本信息中的生产厂家功能。
生产厂家业务
功能:
在货物模块和附近模块,它们都有个生产厂家,讲生产厂家信息提出,成为一个单独的表。
《需求说明书》
生产厂家表 FACTORY_C(_C业务后缀)
注意:在这里我选用的id类型为varchar2 类型,
INT/LONG 都是一般表示自增,根据业务记录数来决定
STRING UUID,业务自己定义的规则xxyyzz,每两位为一层,省市县,部门
接着是数据库建模
这里我使用PowerDesigner进行数据库表的设计
关于这个软件的使用,将在相对应的文章中进行详细描写,这里不再进行赘述。
接着就是创建相应的实体类Factory
创建相对应的FactoryMapper.xml文件并且完成查询功能
接着开始完善Dao层。创建FactoryDao并继承BaseDao接口
接着是Service层
首先FactoryService接口
FactoryServiceImpl实现类
package com.wakev.xx.service.impl;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.annotatio
114c0
n.Resource;
import org.springframework.stereotype.Service;
import com.wakev.xx.dao.FactoryDao;
import com.wakev.xx.pagination.Page;
import com.wakev.xx.service.FactoryService;
@Service
public class FactoryServiceImpl implements FactoryService {
@Resource
FactoryDao factoryDao;
@Override
public List<com.wakev.xx.domain.Factory> findPage(Page page) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<com.wakev.xx.domain.Factory> find(Map paraMap) {
return factoryDao.find(paraMap);
}
@Override
public com.wakev.xx.domain.Factory get(Serializable id) {
return factoryDao.get(id);
}
@Override
public void insert(com.wakev.xx.domain.Factory entity) {
<span style="white-space:pre"> </span>}
接着是Controller层。FactoryController 继承BaseController(不一定要继承)
接着创建相应的页面jsp
在WEB-INF---> pages--->basicinfo--->factory--->jFactoryList.jsp
修改list部分
这里简单提一下整个框架的执行顺序:
首先是在url 输入
1)http://localhost:8080/xx后执行
http://localhost/xx/index.jsp
2)在Jsp中利用js跳转
<scripttype="text/javascript">
window.location.href ="home.action"; //javascript页面跳转
</script>
3) 在homeController中跳转,转入登陆页面
4) 在pages/index.jsp中利用按钮提交,fmain.action
接下来完成Factory的insert插入功能
首先在FactoryMapper中添加
由于dao层跟service层都已经实现了这个方法,所以现在只要在Controller层进行完善
在FactoryController中添加新增功能
创建对应的JfactoryCreate.jsp页面
在jFactoryList.jsp页面添加 “”新增” 按钮
其中的FormSubmit按钮封装了一个函数
测试一下,插入功能到这个开发完成。
接着完成 修改 功能
在FactoryMapper中添加
dao层因为继承了BaseDao,所以不用进行修改
直接修改Service层,在FactoryServiceImpl实现类中修改
这里的id 类型选用Serializable是因为更加灵活 既可以用int 也可以String
接着改Controller层,添加方法和注解
接着完成相对应的页面
JFactoryUpdate.jsp
测试一下,到这里修改功能也完成了
接下来完成删除功能
在FactoryMapper.xml中
FactoryServiceImpl完善
接着去完添加FactoryController中的方法
删除玩直接跳转到list页面,所以只需要在在相应的List页面中添加对应的按钮
测试一下,删除功能到这里也完成。
做到这里,可以开发加入log4j了,
创建log4j.properties放在resource目录下
关于Log4j的使用这里不再赘述
接着我们给Factory完成 查看功能
因为mapper上之前已经添加过了,所以直接在controller上添加这个功能。
创建对应的查看页面jFactoryView.jsp,可以复制jFactoryUpdate.jsp页面进行修改。
接着list中添加对应的按钮,之前好像已经有了?
接着测试,这个查询功能也完成了。
到这里,基本的增删改查功能都完成了。
接着完成一个Factory更进一步的功能。
在货物中生产厂家选择框,不能选择这个不再合作的厂家。
在系统中不能直接删除这个厂家,因为我们的历史数据中含有对这个生产厂家的引用。软件是采用“伪删除”方式来解决。
实际是在数据库表中加入列,作为标识,标识厂家是否可以被引用。0停用1启用。
新增厂家默认1,可以修改某个厂家为停用。在货物中选择厂家的下拉列表,只显示为启用。
Oracle number(1)
实际项目中也可以设置为Char(1)
在数据库中给FACTORY_C表添加列state
Oracle数据库设置类型为char(1),
mysql数据库设置为tinyint,
接着在FactoryMapper中添加
修改“新增”方法
还有查询方法
因为通过ids跟state来进行修改,所以这里传进来的设置为一个map
在Factory实体类中也要添加state字段,并设置get 和set方法,这里不再进行赘述。
接着在FactoryServiceImpl中修改insert方法
在BaseDao中并没有这个方法,而且这个方法也不是每个表都有的,所以在FactoryDao中单独添加
接着去修改对应的service层。
ServiceImpl层
着在列表页面添加两个按钮 “启动”“停用”。
并且添加一个状态显示列
这样状态功能也开发完毕。
这个方式,就是流程控制的基础,权限控制基础。
到这里,生产厂家的相关功能我们都开发完了。
到这里为止只是完成简单的开发,熟悉一下流程,接着的才是开始真正的项目开发。
生产厂家业务
功能:
在货物模块和附近模块,它们都有个生产厂家,讲生产厂家信息提出,成为一个单独的表。
《需求说明书》
生产厂家表 FACTORY_C(_C业务后缀)
序号 | 名称 | 代码 | 是否主键 | 类型(长度) | 说明 |
1. | 编号 | FACTORY_ID | 是 | VARCHAR2(40) | UUID |
2. | 全称 | FULL_NAME | 否 | VARCHAR2(200) | 对应客户比较模糊,翻倍2到4倍 |
3. | 简称 | FACTORY_NAME | 否 | VARCHAR2(50) | |
4. | 联系人 | CONTACTS | 否 | VARCHAR2(30) | 人名20/30 |
5. | 电话 | PHONE | 否 | VARCHAR2(20) | |
6. | 手机 | MOBILE | 否 | VARCHAR2(20) | |
7. | 传真 | FAX | 否 | VARCHAR220) | |
8. | 验货员 | INSPECTOR | 否 | VARCHAR2(30) | |
9. | 排序号 | ORDER_NO | 否 | INT | |
10. | 备注 | CNOTE | 否 | VARCHAR2(500) | 如果感觉它可能和关键字冲突,给它加个C前缀 |
11. | 创建人 | CREATE_BY | 否 | VARCHAR2(40) | 权限字段,登陆人ID |
12. | 创建部门 | CREATE_DEPT | 否 | VARCHAR2(40) | 登陆人所在部门的ID |
13. | 创建时间 | CREATE_TIME | 否 | TIMESTAMP | |
注意:在这里我选用的id类型为varchar2 类型,
INT/LONG 都是一般表示自增,根据业务记录数来决定
STRING UUID,业务自己定义的规则xxyyzz,每两位为一层,省市县,部门
接着是数据库建模
这里我使用PowerDesigner进行数据库表的设计
关于这个软件的使用,将在相对应的文章中进行详细描写,这里不再进行赘述。
接着就是创建相应的实体类Factory
package com.wakev.xx.domain; public class Factory { private String id; //主键映射时,都映射成id,跟数据库表的不同factory_id private String fullName; private String factoryName; private String contacts; private String phone; private String mobile; private String fax; private String inspector; private String cnote; private Integer orderNo; private String createBy; private String createDept; private java.util.Date createTime; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getFullName() { return fullName; } public void setFullName(String fullName) { this.fullName = fullName; } public String getFactoryName() { return factoryName; } public void setFactoryName(String factoryName) { this.factoryName = factoryName; } public String getContacts() { return contacts; } public void setContacts(String contacts) { this.contacts = contacts; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getFax() { return fax; } public void setFax(String fax) { this.fax = fax; } public String getInspector() { return inspector; } public void setInspector(String inspector) { this.inspector = inspector; } public String getCnote() { return cnote; } public void setCnote(String cnote) { this.cnote = cnote; } public Integer getOrderNo() { return orderNo; } public void setOrderNo(Integer orderNo) { this.orderNo = orderNo; } public String getCreateBy() { return createBy; } public void setCreateBy(String createBy) { this.createBy = createBy; } public String getCreateDept() { return createDept; } public void setCreateDept(String createDept) { this.createDept = createDept; } public java.util.Date getCreateTime() { return createTime; } public void setCreateTime(java.util.Date createTime) { this.createTime = createTime; } }
创建相对应的FactoryMapper.xml文件并且完成查询功能
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.wakev.xx.mapper.FactoryMapper"> <resultMap type="com.wakev.xx.domain.Factory" id="factoryRM"> <id property="id" column="FACTORY_ID"/> <result property="fullName" column="FULL_NAME"/> <result property="factoryName" column="FACTORY_NAME"/> <result property="contacts" column="CONTACTS"/> <result property="phone" column="PHONE"/> <result property="mobile" column="MOBILE"/> <result property="fax" column="FAX"/> <result property="inspector" column="INSPECTOR"/> <result property="cnote" column="CNOTE"/> <result property="orderNo" column="ORDER_NO"/> <result property="createBy" column="CREATE_BY"/> <result property="createDept" column="CREATE_DEPT"/> <result property="createTime" column="CREATE_TIME"/> </resultMap> <!-- 查询 --> <select id="find" parameterType="map" resultMap="factoryRM"> select * from FACTORY_C where 1=1 order by ORDER_NO </select>
接着开始完善Dao层。创建FactoryDao并继承BaseDao接口
package com.wakev.xx.dao; import com.wakev.xx.domain.Factory; public interface FactoryDao extends BaseDao<Factory> { }实现类FactoryDaoImpl继承BaseDaoImpl并实现FactoryDao接口
package com.wakev.xx.dao.impl; import org.springframework.stereotype.Repository; import com.wakev.xx.dao.FactoryDao; import com.wakev.xx.domain.Factory; @Repository public class FactoryDaoImpl extends BaseDaoImpl<Factory> implements FactoryDao { //利用默认构造方法初始化命名空间 public FactoryDaoImpl() { super.setNs("com.wakev.xx.mapper.FactoryMapper"); } }
接着是Service层
首先FactoryService接口
package com.wakev.xx.service; import java.io.Serializable; import java.util.List; import java.util.Map; import com.wakev.xx.domain.Factory; import com.wakev.xx.pagination.Page; public interface FactoryService { public List<Factory> findPage(Page page); //分页查询 public List<Factory> find(Map paraMap); //带条件查询,条件可以为null,既没有条件;返回list对象集合 public Factory get(Serializable id); //只查询一个,常用于修改 public void insert(Factory entity); //插入,用实体作为参数 public void update(Factory entity); //修改,用实体作为参数 public void deleteById(Serializable id); //按id删除,删除一条;支持整数型和字符串类型ID public void delete(Serializable[] ids); //批量删除;支持整数型和字符串类型ID }
FactoryServiceImpl实现类
package com.wakev.xx.service.impl;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.annotatio
114c0
n.Resource;
import org.springframework.stereotype.Service;
import com.wakev.xx.dao.FactoryDao;
import com.wakev.xx.pagination.Page;
import com.wakev.xx.service.FactoryService;
@Service
public class FactoryServiceImpl implements FactoryService {
@Resource
FactoryDao factoryDao;
@Override
public List<com.wakev.xx.domain.Factory> findPage(Page page) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<com.wakev.xx.domain.Factory> find(Map paraMap) {
return factoryDao.find(paraMap);
}
@Override
public com.wakev.xx.domain.Factory get(Serializable id) {
return factoryDao.get(id);
}
@Override
public void insert(com.wakev.xx.domain.Factory entity) {
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span><pre name="code" class="html"><span style="white-space:pre"> </span>@Overridepublic <span> </span>void update(com.wakev.xx.domain.Factory entity) { <span> </span>return null; <span> </span>}@Overridepublic <span style="white-space:pre"> </span>void deleteById(Serializable id) { <span style="white-space:pre"> </span>return null; <span style="white-space:pre"> </span>}@Overridepublic void delete(Serializable[] ids) { <span style="white-space:pre"> </span>return null; <span style="white-space:pre"> </span>} }
接着是Controller层。FactoryController 继承BaseController(不一定要继承)
package com.wakev.xx.controller.basicinfo.factory; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.wakev.xx.controller.BaseController; import com.wakev.xx.domain.Factory; import com.wakev.xx.service.FactoryService; @Controller public class FactoryController extends BaseController { @Resource FactoryService factoryService; //查询 @RequestMapping("/basicinfo/factory/list.action") public String list(Model model){ List<Factory> dataList = factoryService.find(null); model.addAttribute("dataList", dataList); return "/basicinfo/factory/jFactoryList.jsp"; }<pre name="code" class="html">}
接着创建相应的页面jsp
在WEB-INF---> pages--->basicinfo--->factory--->jFactoryList.jsp
修改list部分
<table id="ec_table" class="tableRegion" width="98%" > <thead> <tr> <td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll('id',this)"></td> <td class="tableHeader">序号</td> <td class="tableHeader">厂家全称</td> <td class="tableHeader">缩写</td> <td class="tableHeader">联系人</td> <td class="tableHeader">电话</td> <td class="tableHeader">手机</td> <td class="tableHeader">传真</td> <td class="tableHeader">验货员</td> </tr> </thead> <tbody class="tableBody" > <c:forEach items="${dataList}" var="o" varStatus="status"> <tr class="odd" onmouseover="this.className='highlight'" onmouseout="this.className='odd'" > <td><input type="checkbox" name="id" value="${o.id}"/></td> <td>${status.index+1}</td> <td><a href="toview.action?id=${o.id}">${o.fullName}</a></td> <td>${o.factoryName}</td> <td>${o.contacts}</td> <td>${o.phone}</td> <td>${o.mobile}</td> <td>${o.fax}</td> <td>${o.inspector}</td> </tr> </c:forEach>
这里简单提一下整个框架的执行顺序:
首先是在url 输入
1)http://localhost:8080/xx后执行
http://localhost/xx/index.jsp
2)在Jsp中利用js跳转
<scripttype="text/javascript">
window.location.href ="home.action"; //javascript页面跳转
</script>
3) 在homeController中跳转,转入登陆页面
@Controller public class HomeController { //系统首页模块 @RequestMapping(value={"/home.action"}) //配合web下<url-pattern>/</url-pattern> public String login(){ return "/index.jsp"; //首页,删除根目录下index.jsp,否则上面url将被拦截进不来 }
4) 在pages/index.jsp中利用按钮提交,fmain.action
@RequestMapping(value="/fmain.action") public String fmain(){ return "/home/fmain.jsp";
接下来完成Factory的insert插入功能
首先在FactoryMapper中添加
<!-- 新增 --> <insert id="insert" parameterType="com.wakev.xx.domain.Factory"> insert into FACTORY_C (FACTORY_ID,FULL_NAME,FACTORY_NAME,CONTACTS,PHONE,MOBILE,FAX,INSPECTOR,CNOTE,ORDER_NO,CREATE_BY,CREATE_DEPT,CREATE_TIME) values ( #{id,jdbcType=VARCHAR}, #{fullName,jdbcType=VARCHAR}, #{factoryName,jdbcType=VARCHAR}, #{contacts,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{fax,jdbcType=VARCHAR}, #{inspector,jdbcType=VARCHAR}, #{cnote,jdbcType=VARCHAR}, #{orderNo,jdbcType=INTEGER}, #{createBy,jdbcType=VARCHAR}, #{createDept,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP} ) </insert>
由于dao层跟service层都已经实现了这个方法,所以现在只要在Controller层进行完善
在FactoryController中添加新增功能
//转向新增页面 @RequestMapping("/basicinfo/factory/tocreate.action") public String tocreate(){ return "/basicinfo/factory/jFactoryCreate.jsp"; } //新增保存 @RequestMapping("/basicinfo/factory/insert.action") public String insert(Factory factory){ factoryService.insert(factory); return "redirect:/basicinfo/factory/list.action"; }
创建对应的JfactoryCreate.jsp页面
<%@ page language="java" pageEncoding="UTF-8"%> <%@ include file="../../base.jsp"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>wakev商务管理系统</title> </head> <body> <form method="post"> <div id="menubar"> <div id="middleMenubar"> <div id="innerMenubar"> <div id="navMenubar"> <ul> <li id="save"><a href="#" onclick="formSubmit('insert.action','_self');this.blur();">确定</a></li> <li id="back"><a href="list.action">返回</a></li> </ul> </div> </div> </div> </div> <div class="textbox" id="centerTextbox"> <div class="textbox-header"> <div class="textbox-inner-header"> <div class="textbox-title"> 新增生产厂家信息 </div> </div> </div> <div> <div> <table class="commonTable" cellspacing="1"> <tr> <td class="columnTitle">排序号:</td> <td class="tableContent"><input type="text" name="orderNo" value="" dataType="整数" dispName="排序号"/></td> <td class="columnTitle">验货员:</td> <td class="tableContent"><input type="text" name="inspector" value=""/></td> </tr> <tr> <td class="columnTitle_mustbe">厂家名称:</td> <td class="tableContent"><input type="text" name="fullName" value="" dataType="中文" dispName="厂家名称"/></td> <td class="columnTitle_mustbe">简称:</td> <td class="tableContent"><input type="text" name="factoryName" value="" dataType="非空字符串" dispName="简称"/></td> </tr> <tr> <td class="columnTitle_mustbe">联系人:</td> <td class="tableContent"><input type="text" name="contacts" value="" dataType="非空字符串" dispName="联系人"/></td> <td class="columnTitle_mustbe">电话:</td> <td class="tableContent"><input type="text" name="phone" value="" dataType="非空电话" dispName="电话"/></td> </tr> <tr> <td class="columnTitle_mustbe">手机:</td> <td class="tableContent"><input type="text" name="mobile" value="" dataType="非空手机" dispName="手机"/></td> <td class="columnTitle">传真:</td> <td class="tableContent"><input type="text" name="fax" value="" dataType="电话" dispName="传真"/></td> </tr> <tr> <td class="columnTitle">备注:</td> <td class="tableContent"><textarea name="cnote" style="width:100%;height:120px;"></textarea></td> </tr> </table> </div> </div> </form> </body> </html>
在jFactoryList.jsp页面添加 “”新增” 按钮
<li id="new"><a href="#" onclick="formSubmit('tocreate.action','_self');this.blur();">新增</a></li>
其中的FormSubmit按钮封装了一个函数
/* 打开一个新页面:调用时不加第二个参数 add by wakev*/ function formSubmit (url,sTarget){ document.forms[0].target = sTarget document.forms[0].action = url; document.forms[0].submit(); return true; }
测试一下,插入功能到这个开发完成。
接着完成 修改 功能
在FactoryMapper中添加
<!-- 查询单条 --> <select id="get" parameterType="string" resultMap="factoryRM"> select * from FACTORY_C where FACTORY_ID=#{pid} </select> <!-- 修改 --> <update id="update" parameterType="com.wakev.xx.domain.Factory"> update FACTORY_C <set> <if test="fullName!=null">FULL_NAME=#{fullName,jdbcType=VARCHAR},</if> <if test="factoryName!=null">FACTORY_NAME=#{factoryName,jdbcType=VARCHAR},</if> <if test="contacts!=null">CONTACTS=#{contacts,jdbcType=VARCHAR},</if> <if test="phone!=null">PHONE=#{phone,jdbcType=VARCHAR},</if> <if test="mobile!=null">MOBILE=#{mobile,jdbcType=VARCHAR},</if> <if test="fax!=null">FAX=#{fax,jdbcType=VARCHAR},</if> <if test="inspector!=null">INSPECTOR=#{inspector,jdbcType=VARCHAR},</if> <if test="cnote!=null">CNOTE=#{cnote,jdbcType=VARCHAR},</if> <if test="orderNo!=null">ORDER_NO=#{orderNo,jdbcType=INTEGER},</if> <if test="createBy!=null">CREATE_BY=#{createBy,jdbcType=VARCHAR},</if> <if test="createDept!=null">CREATE_DEPT=#{createDept,jdbcType=VARCHAR},</if> <if test="createTime!=null">CREATE_TIME=#{createTime,jdbcType=TIMESTAMP},</if> </set> where FACTORY_ID=#{id} </update>
dao层因为继承了BaseDao,所以不用进行修改
直接修改Service层,在FactoryServiceImpl实现类中修改
<span style="white-space:pre"> </span>@Override public void update(com.wakev.xx.domain.Factory entity) { factoryDao.update(entity); } @Override public com.wakev.xx.domain.Factory get(Serializable id) { return factoryDao.get(id); }
这里的id 类型选用Serializable是因为更加灵活 既可以用int 也可以String
接着改Controller层,添加方法和注解
<span style="white-space:pre"> </span>//转向修改页面 @RequestMapping("/basicinfo/factory/toupdate.action") public String toupdate(String id, Model model){ Factory obj = factoryService.get(id); model.addAttribute("obj", obj); return "/basicinfo/factory/jFactoryUpdate.jsp"; } //修改保存 @RequestMapping("/basicinfo/factory/update.action") public String update(Factory factory){ factoryService.update(factory); return "redirect:/basicinfo/factory/list.action"; }
接着完成相对应的页面
JFactoryUpdate.jsp
<%@ page language="java" pageEncoding="UTF-8"%> <%@ include file="../../base.jsp"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>wakev商务管理系统</title> </head> <body> <form method="post"> <input type="hidden" name="id" value="${obj.id}"/> <div id="menubar"> <div id="middleMenubar"> <div id="innerMenubar"> <div id="navMenubar"> <ul> <li id="save"><a href="#" onclick="formSubmit('update.action','_self');this.blur();">确定</a></li> <li id="back"><a href="list.action">返回</a></li> </ul> </div> </div> </div> </div> <div class="textbox" id="centerTextbox"> <div class="textbox-header"> <div class="textbox-inner-header"> <div class="textbox-title"> 修改生产厂家信息 </div> </div> </div> <div> <div> <table class="commonTable" cellspacing="1"> <tr> <td class="columnTitle">排序号:</td> <td class="tableContent"><input type="text" name="orderNo" value="${obj.orderNo}" dataType="整数" dispName="排序号"/></td> <td class="columnTitle">验货员:</td> <td class="tableContent"><input type="text" name="inspector" value="${obj.inspector}"/></td> </tr> <tr> <td class="columnTitle_mustbe">厂家名称:</td> <td class="tableContent"><input type="text" name="fullName" value="${obj.fullName}" dataType="中文" dispName="厂家名称"/></td> <td class="columnTitle_mustbe">简称:</td> <td class="tableContent"><input type="text" name="factoryName" value="${obj.factoryName}" dataType="非空字符串" dispName="简称"/></td> </tr> <tr> <td class="columnTitle_mustbe">联系人:</td> <td class="tableContent"><input type="text" name="contacts" value="${obj.contacts}" dataType="非空字符串" dispName="联系人"/></td> <td class="columnTitle_mustbe">电话:</td> <td class="tableContent"><input type="text" name="phone" value="${obj.phone}" dataType="非空电话" dispName="电话"/></td> </tr> <tr> <td class="columnTitle_mustbe">手机:</td> <td class="tableContent"><input type="text" name="mobile" value="${obj.mobile}" dataType="非空手机" dispName="手机"/></td> <td class="columnTitle">传真:</td> <td class="tableContent"><input type="text" name="fax" value="${obj.fax}" dataType="电话" dispName="传真"/></td> </tr> <tr> <td class="columnTitle">备注:</td> <td class="tableContent"><textarea name="cnote" style="width:100%;height:120px;">${obj.cnote}</textarea></td> </tr> </table> </div> </div> </form> </body> </html>
测试一下,到这里修改功能也完成了
接下来完成删除功能
在FactoryMapper.xml中
<span style="white-space:pre"> </span><!-- 删除单条 --> <delete id="deleteById" parameterType="string"> delete from FACTORY_C where FACTORY_ID=#{pid} </delete> <!-- 删除多条 --> <delete id="delete" parameterType="string"> delete from FACTORY_C where FACTORY_ID in <foreach collection="array" item="id" open="(" close=")" separator=","> #{id} </foreach> </delete>
FactoryServiceImpl完善
@Override public void deleteById(Serializable id) { factoryDao.deleteById(id); } @Override public void delete(Serializable[] ids) { factoryDao.delete(ids); }
接着去完添加FactoryController中的方法
<span style="white-space:pre"> </span>//删除单条 @RequestMapping("/basicinfo/factory/deleteById.action") public String deleteById(String id){ factoryService.deleteById(id); return "redirect:/basicinfo/factory/list.action"; } //批量删除 @RequestMapping("/basicinfo/factory/delete.action") public String delete(@RequestParam("id")String[] ids){ factoryService.delete(ids); return "redirect:/basicinfo/factory/list.action"; }
删除玩直接跳转到list页面,所以只需要在在相应的List页面中添加对应的按钮
<li id="delete"><a href="#" onclick="formSubmit('deleteById.action','_self');this.blur();">删除</a></li> <li id="delete"><a href="#" onclick="formSubmit('delete.action','_self');this.blur();">删多条</a></li>
测试一下,删除功能到这里也完成。
做到这里,可以开发加入log4j了,
创建log4j.properties放在resource目录下
log4j.rootLogger=DEBUG, stdout #Console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-5p - %m%n #LogFile log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=../logs/jklog.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.logger.org.apache=INFO log4j.logger.com.wakev.xx=DEBUG
关于Log4j的使用这里不再赘述
接着我们给Factory完成 查看功能
因为mapper上之前已经添加过了,所以直接在controller上添加这个功能。
<span style="white-space:pre"> </span>//查看 @RequestMapping("/basicinfo/factory/toview.action") public String toview(String id, Model model){ Factory obj = factoryService.get(id); model.addAttribute("obj", obj); return "/basicinfo/factory/jFactoryView.jsp"; }
创建对应的查看页面jFactoryView.jsp,可以复制jFactoryUpdate.jsp页面进行修改。
<%@ page language="java" pageEncoding="UTF-8"%> <%@ include file="../../base.jsp"%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>wakev商务管理系统</title> </head> <body> <form method="post"> <input type="hidden" name="id" value="${obj.id}"/> <div id="menubar"> <div id="middleMenubar"> <div id="innerMenubar"> <div id="navMenubar"> <ul> <li id="back"><a href="list.action">返回</a></li> </ul> </div> </div> </div> </div> <div class="textbox" id="centerTextbox"> <div class="textbox-header"> <div class="textbox-inner-header"> <div class="textbox-title"> 浏览生产厂家信息 </div> </div> </div> <div> <div> <table class="commonTable" cellspacing="1"> <tr> <td class="columnTitle">排序号:</td> <td class="tableContent">${obj.orderNo}</td> <td class="columnTitle">验货员:</td> <td class="tableContent">${obj.inspector}</td> </tr> <tr> <td class="columnTitle_mustbe">厂家名称:</td> <td class="tableContent">${obj.fullName}</td> <td class="columnTitle_mustbe">简称:</td> <td class="tableContent">${obj.factoryName}</td> </tr> <tr> <td class="columnTitle_mustbe">联系人:</td> <td class="tableContent">${obj.contacts}</td> <td class="columnTitle_mustbe">电话:</td> <td class="tableContent">${obj.phone}</td> </tr> <tr> <td class="columnTitle_mustbe">手机:</td> <td class="tableContent">${obj.mobile}</td> <td class="columnTitle">传真:</td> <td class="tableContent">${obj.fax}</td> </tr> <tr> <td class="columnTitle">备注:</td> <!-- 这里用pre来保证备注的换行能正常输出--> <td class="tableContent"><pre>${obj.cnote}</pre></td> </tr> </table> </div> </div> </form> </body> </html>
接着list中添加对应的按钮,之前好像已经有了?
<li id="view"><a href="#" onclick="formSubmit('toview.action','_self');this.blur();">查看</a></li>
接着测试,这个查询功能也完成了。
到这里,基本的增删改查功能都完成了。
接着完成一个Factory更进一步的功能。
业务:启用,停用
功能:合作生产厂家突然有一天它以次品冒充优质品,公司不再跟这个厂家进行合作。在货物中生产厂家选择框,不能选择这个不再合作的厂家。
在系统中不能直接删除这个厂家,因为我们的历史数据中含有对这个生产厂家的引用。软件是采用“伪删除”方式来解决。
实际是在数据库表中加入列,作为标识,标识厂家是否可以被引用。0停用1启用。
新增厂家默认1,可以修改某个厂家为停用。在货物中选择厂家的下拉列表,只显示为启用。
数据库表是没有boolean,
Mysql tinyintOracle number(1)
实际项目中也可以设置为Char(1)
在数据库中给FACTORY_C表添加列state
Oracle数据库设置类型为char(1),
mysql数据库设置为tinyint,
接着在FactoryMapper中添加
<result property="state" column="STATE"/>
修改“新增”方法
<span style="white-space:pre"> </span><!-- 新增 --> <insert id="insert" parameterType="cn.itcast.jk.domain.Factory"> insert into FACTORY_C (FACTORY_ID,FULL_NAME,FACTORY_NAME,CONTACTS,PHONE,MOBILE,FAX,INSPECTOR,CNOTE,ORDER_NO,STATE,CREATE_BY,CREATE_DEPT,CREATE_TIME) values ( #{id,jdbcType=VARCHAR}, #{fullName,jdbcType=VARCHAR}, #{factoryName,jdbcType=VARCHAR}, #{contacts,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, #{mobile,jdbcType=VARCHAR}, #{fax,jdbcType=VARCHAR}, #{inspector,jdbcType=VARCHAR}, #{cnote,jdbcType=VARCHAR}, #{orderNo,jdbcType=INTEGER}, #{state,jdbcType=INTEGER}, #{createBy,jdbcType=VARCHAR}, #{createDept,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP} ) </insert>
还有查询方法
<span style="white-space:pre"> </span><!-- 查询 --> <select id="find" parameterType="map" resultMap="factoryRM"> select * from FACTORY_C where 1=1 <if test="state!=null">and STATE=#{state,jdbcType=INTEGER}</if> order by ORDER_NO </select>并添加状态修改功能
因为通过ids跟state来进行修改,所以这里传进来的设置为一个map
<span style="white-space:pre"> </span><!-- 修改状态 --> <update id="updateState" parameterType="map"> update FACTORY_C set STATE=#{state} where FACTORY_ID in <foreach collection="ids" item="id" open="(" close=")" separator=","> #{id} </foreach> </update>
在Factory实体类中也要添加state字段,并设置get 和set方法,这里不再进行赘述。
接着在FactoryServiceImpl中修改insert方法
@Override public void insert(com.wakev.xx.domain.Factory entity) { entity.setId(UUID.randomUUID().toString()); entity.setState("1"); //0停用1启用 factoryDao.insert(entity); }
在BaseDao中并没有这个方法,而且这个方法也不是每个表都有的,所以在FactoryDao中单独添加
public interface FactoryDao extends BaseDao<Factory> { public void updateState(Map<String,Object> map); //修改状态 } @Repository public class FactoryDaoImpl extends BaseDaoImpl<Factory> implements FactoryDao { //利用默认构造方法初始化命名空间 public FactoryDaoImpl() { super.setNs("com.wakev.xx.mapper.FactoryMapper"); } @Override public void updateState(Map<String, Object> map) { super.getSqlSession().update(this.getNs() + ".updateState", map); } }
接着去修改对应的service层。
public void start(String[] ids); //启用 public void stop(String[] ids); //停用
ServiceImpl层
<span style="white-space:pre"> </span>@Override public void start(String[] ids) { Map<String, Object> map = new HashMap<String,Object>(); map.put("state", 1); //1启用 map.put("ids", ids); factoryDao.updateState(map); } @Override public void stop(String[] ids) { Map<String, Object> map = new HashMap<String,Object>(); map.put("state", 0); //1停用 map.put("ids", ids); factoryDao.updateState(map); }接着去修改controller层
<span style="white-space:pre"> </span>//启用 @RequestMapping("/basicinfo/factory/start.action") public String start(@RequestParam("id")String[] ids){ factoryService.start(ids); return "redirect:/basicinfo/factory/list.action"; } //停用 @RequestMapping("/basicinfo/factory/stop.action") public String stop(@RequestParam("id")String[] ids){ factoryService.stop(ids); return "redirect:/basicinfo/factory/list.action"; }
着在列表页面添加两个按钮 “启动”“停用”。
<li id="new"><a href="#" onclick="formSubmit('start.action','_self');this.blur();">启用</a></li> <li id="new"><a href="#" onclick="formSubmit('stop.action','_self');this.blur();">停用</a></li>
并且添加一个状态显示列
<thead> <tr> <td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll('id',this)"></td> <td class="tableHeader">序号</td> <td class="tableHeader">厂家全称</td> <td class="tableHeader">缩写</td> <td class="tableHeader">联系人</td> <td class="tableHeader">电话</td> <td class="tableHeader">手机</td> <td class="tableHeader">传真</td> <td class="tableHeader">验货员</td> <td class="tableHeader">状态</td> </tr> </thead> <tr class="odd" onmouseover="this.className='highlight'" onmouseout="this.className='odd'" > <td><input type="checkbox" name="id" value="${o.id}"/></td> <td>${status.index+1}</td> <td><a href="toview.action?id=${o.id}">${o.fullName}</a></td> <td>${o.factoryName}</td> <td>${o.contacts}</td> <td>${o.phone}</td> <td>${o.mobile}</td> <td>${o.fax}</td> <td>${o.inspector}</td> <td> <c:if test="${o.state==0}"><a href="start.action?id=${o.id}"><font color="blue">停用</a></c:if> <c:if test="${o.state==1}"><a href="stop.action?id=${o.id}"><font color="green">启用</font></a></c:if> </td> </tr>
这样状态功能也开发完毕。
这个方式,就是流程控制的基础,权限控制基础。
到这里,生产厂家的相关功能我们都开发完了。
到这里为止只是完成简单的开发,熟悉一下流程,接着的才是开始真正的项目开发。
相关文章推荐
- 使用Maven基于ssm框架的完整商务管理开发项目(01)
- ssm框架的项目,使用maven管理,启动服务器报错
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层
- 基于IdeaIDE的ssm整合框架的maven管理项目,利用映射自动生成dao层,pojo层,mappers层