进行crud的前提条件必须搭建好SSM框架!!!!
第一:增加
- 先看图:下面这个css样式用的是bootstrap的,待会上代码看
2.看jsp页面(主要包框js,一个form表单)
先看body内的内容
<body style="background: #E8EBEE;overflow-x:hidden;">
<div class="row pl15 pr15">
<div class="col-lg-12">
<div class="main-box">
<div class="main-box-body clearfix">
<form class="form-horizontal mt20">
<table>
<tr>
<td>
<div class="label_css pt8 pr5 fl">
<label>药品编码</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="drugs_id" name="drugs_id" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>商品名称</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="drugs_name" name="drugs_name" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>生产批号</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="pro_num" name="pro_num" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>生产厂家</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="factory" name="factory" />
</div>
</div>
</td>
</tr>
<tr style="height:80px;">
<td>
<div class="label_css pt8 pr5 fl">
<label>规格</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="gui_ge" name="gui_ge" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>包装</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="pack" name="pack" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>单位</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="unit" name="unit" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>剂型</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="ji_xi" name="ji_xi" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>用药途径</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="method" name="method" />
</div>
</div>
</td>
</tr>
<tr style="height:50px;">
<td>
<div class="label_css pt8 pr5 fl">
<label>最大剂量</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="max_dose" name="max_dose" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>生产日期</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="pro_date" name="pro_date" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'1900-01-01 00:00:00'})"/>
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>有效期</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="val_date" name="val_date" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',minDate:'1900-01-01 00:00:00'})"/>
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>是否进口</label>
</div>
</td>
<td>
<div class="col-md-10">
<select class="fl" style="width:150px" id="input" name="input" placeholder="必填">
<option value="0">是</option>
<option value="1">否</option>
</select>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>批发价</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="who_price" name="who_price" />
</div>
</div>
</td>
</tr>
<tr style="height:50px;">
<td>
<div class="label_css pt8 pr5 fl">
<label>售价</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="price" name="price" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>是否医保</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<select class="fl" style="width:150px" placeholder="必填" id="med_insu" name="med_insu" >
<option value="0">是</option>
<option value="1">否</option>
</select>
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>是否高危</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<select class="fl" style="width:150px" placeholder="必填" id="is_risk" name="is_risk" >
<option value="0">是</option>
<option value="1">否</option>
</select>
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>危险级别</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<select class="fl" style="width:150px" placeholder="必填" id="ha_level" name="ha_level" >
<option value="0">A</option>
<option value="1">B</option>
<option value="2">C</option>
</select>
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>药品种类</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<select class="pt10" style="width: 150px" id="drugs_type" name="drugs_type">
<option value="">全部</option>
<option value="0">静脉用和口服化疗药</option>
<option value="1">抗血栓药物</option>
<option value="2">硬膜外或鞘内注射药</option>
<option value="3">口服降糖药</option>
<option value="4">静脉用改变心肌力药 </option>
<option value="5">静脉用中度镇静药物</option>
<option value="6">神经肌肉阻断药</option>
<option value="7">静脉用造影剂</option>
<option value="8">肠外</option>
<option value="9">营养</option>
<option value="10">特殊高危药品</option>
</select>
</div>
</div>
</td>
</tr>
<tr style="height:50px;">
<td>
<div class="label_css pt8 pr5 fl">
<label>库存</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="inventory" name="inventory" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>高储标准</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="max_inv" name="max_inv" />
</div>
</div>
</td>
<td>
<div class="label_css pt8 pr5 fl">
<label>低储标准</label>
</div>
</td>
<td>
<div class="col-md-10">
<div class="width100">
<input type="text" class="form-control" placeholder="必填" id="least_inv" name="least_inv" />
</div>
</div>
</td>
</table>
<div class="form-group">
<div class="col-md-12 text-center" style="margin-top:20px;">
<input type="button" class="btn btn-primary" style="width: 120px" id="upLoadProudct" value="立即发布" />
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
3,js这个form表单有两种提交方式,一个通过name属性提交,通过bootstrap正则验真,效果比较好,我会在修改时用,另一个就是根据id提交,验证,这是最笨的方法,我就用的这种,当时没bootstrap-validator,哥们又在催,我就根据他的要求给写了一个dome
<script src="/resources/scripts/common/jquery.js"></script>
<script src="/resources/scripts/common/layer/layer.js"></script>
<script src="/resources/scripts/base/jquery.form.js"></script>
<script src="/resources/scripts/common/bootstrap.js"></script>
<script src="/resources/scripts/common/jquery.nanoscroller.min.js"></script>
<script src="/resources/scripts/common/select2.min.js"></script>
<script src="/resources/scripts/common/My97DatePicker/WdatePicker.js"></script>
联网可用
<script src="https://cdn.bootcss.com/bootstrap-validator/0.5.3/js/bootstrapValidator.min.js"></script>
<link href="/resources/css/common.css" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="/resources/css/compiled/layout.css">
<link href="/resources/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
<link href="/resources/css/libs/font-awesome.min.css" type="text/css" rel="stylesheet"/>
<link rel="stylesheet" href="/resources/css/libs/nanoscroller.css" type="text/css" />
<link href="https://cdn.bootcss.com/bootstrap-validator/0.5.3/css/bootstrapValidator.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="/resources/css/compiled/layout.css">
<link rel="stylesheet" type="text/css" href="/resources/css/compiled/elements.css">
<link rel="stylesheet" href="/resources/css/libs/select2.css" type="text/css" />
<link rel="stylesheet" href="/resources/scripts/common/layer/layer.css" type="text/css" />
<script type="text/javascript">
$(function(){
//这个是下拉框样式
$('#drugs_type').select2();
$('#ha_level').select2();
$('#is_risk').select2();
$('#med_insu').select2();
$('#input').select2();
//提交商品信息即商品详情图片
$("#upLoadProudct").click(function(){
//根据id获取每个文本框的值
var drugs_id = $("#drugs_id").val();
var drugs_name = $("#drugs_name").val();
var pro_num = $("#pro_num").val();
var factory = $("#factory").val();
var gui_ge = $("#gui_ge").val();
var pack = $("#pack").val();
var unit = $("#unit").val();
var ji_xi = $("#ji_xi").val();
var method = $("#method").val();
var max_dose = $("#max_dose").val();
var pro_date = $("#pro_date").val();
var val_date = $("#val_date").val();
var input = $("#input").val();
var who_price = $("#who_price").val();
var price = $("#price").val();
var med_insu = $("#med_insu").val();
var is_risk = $("#is_risk").val();
var ha_level = $("#ha_level").val();
var drugs_type = $("#drugs_type").val();
var inventory = $("#inventory").val();
var max_inv = $("#max_inv").val();
var least_inv = $("#least_inv").val();
//判断是否为空
if((drugs_id==""||drugs_id==null)||(drugs_name==""||drugs_name==null)||(pro_num==""||pro_num==null)||(factory==""||factory==null)||
(gui_ge==""||gui_ge==null)||(pack==""||pack==null)||(unit==""||unit==null)||(price==null||price=="")||(drugs_type==""||drugs_type==null)||
(ji_xi==""||ji_xi==null)||(method==""||method==null)||(max_dose==null||max_dose=="")||(pro_date==""||pro_date==null)||
(val_date==null||val_date=="")||(who_price==""||who_price==null)||(inventory==null||inventory=="")||(max_inv==""||max_inv==null)||
(least_inv==""||least_inv==null)){
layer.alert("以上都为必填项,不能为空!!!!!");
}else{
//Ajax提交
$.ajax({
url : "/user/system/addDrug",
dataType : "text",
type:"post",
cache : false,
data:{
drugs_id:drugs_id,drugs_name:drugs_name,
pro_num:pro_num,factory:factory,
gui_ge:gui_ge,pack:pack,
unit:unit,ji_xi:ji_xi,method:method,
max_dose:max_dose,pro_date:pro_date,val_date:val_date,
input:input,who_price:who_price,
price:price,med_insu:med_insu,
is_risk:is_risk,ha_level:ha_level,
drugs_type:drugs_type,inventory:inventory,
max_inv:max_inv,least_inv:least_inv
},
success : function(obj) {
if(obj=="success"){
layer.alert('商品发布成功!', function(index){
window.location.reload();
});
}
else{
layer.alert("商品发布失败,请重新发布")
}
},
error : function(obj) {
layer.alert("网络出现异常,请稍后重新发布!!!!")
}
});
}
});
});
</script>
4,先控制层即controller层DrugContorller ,后台如何接收,参数比较多,这里也可以通过一个实体类接收,我这里是通过多个对应的string类型参数接收,然后放到map中
@Controller
@RequestMapping(value="user/system/")
public class DrugContorller {
@Autowired
private DrugService drugService;
/**
* 添加药品
* @param request
* @param cpage
* @return
*/
@RequestMapping(value="addDrug",method=RequestMethod.POST)
@ResponseBody
public String addDrug(String drugs_id,String drugs_name,String pro_num,String factory,String gui_ge,String pack,String unit,String ji_xi,String method,
String max_dose,String pro_date,String input,String who_price,String price,String val_date,
String med_insu,String is_risk,String ha_level,String drugs_type,String inventory,String max_inv,String least_inv){
Map<String,Object> map = new HashMap<String,Object>();
map.put("drugs_id", drugs_id);map.put("drugs_name", drugs_name); map.put("pro_num",pro_num);map.put("factory", factory);
map.put("gui_ge", gui_ge);map.put("pack", pack); map.put("unit", unit);map.put("ji_xi", ji_xi);
map.put("method", method);map.put("max_dose", max_dose); map.put("pro_date", pro_date);map.put("input", input);
map.put("who_price", who_price);map.put("price", price); map.put("med_insu", med_insu);map.put("is_risk", is_risk);
map.put("ha_level", ha_level);map.put("drugs_type", drugs_type); map.put("inventory", inventory);map.put("max_inv", max_inv);
map.put("least_inv", least_inv); map.put("val_date", val_date);
return drugService.addDrug(map);
}
}
5,到对应接口 DrugService
public interface DrugService {
String addDrug(Map<String, Object> map);
}
6,接着业务层DrugServiceImpl ,逻辑业务主要在这里写。
@Service
public class DrugServiceImpl implements DrugService{
@Autowired
private IDrugMapper mapper;
@Override
public String addDrug(Map<String, Object> map) {
try {
boolean status = mapper.addDrug(map);
if (status== true) {
return "success";
}
} catch (Exception e) {
e.printStackTrace();
}
return "fail";
}
}
7.下一个接口,这个接口是映射连接mybatis配置文件中的sql的。
public interface IDrugMapper {
boolean addDrug(Map<String, Object> map);
}
8.mybatis配置文件
<?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.wandu.webmanagement.data.mapper.drug.IDrugMapper">
<!--添加药品-->
<insert id="addDrug" parameterType="com.wandu.webmanagement.data.entity.drug.Drug" >
insert into drugs_info set drugs_id =#{drugs_id},drugs_name =
#{drugs_name},pro_num=#{pro_num},factory=#{factory},gui_ge=#{gui_ge},pack=#{pack},
unit=#{unit},ji_xi=#{ji_xi},method=#{method},
max_dose=#{max_dose},pro_date=#{pro_date},val_date=#{val_date},input=#{input},
who_price=#{who_price},price=#{price},med_insu=#{med_insu},is_risk=#{is_risk},
ha_level=#{ha_level},drugs_type=#{drugs_type},inventory=#{inventory},max_inv=#{max_inv},
least_inv=#{least_inv},status=0,createTime=NOW()
</insert>
</mapper>
第二:删除
1. 首先说明,我们所谓的删除基本都是假删除,即只改变删除数据的状态,让它不展示出来,而不是彻底的删除,一般sql都是update,而不是delete(切记!!!)
2.删除即根据该数据的id删除,所以必须知道数据的id
<a class="color6" href="#" onclick="productDelete('${product.drugs_id }')"><i class="icon-file-alt"></i>删除</a>
3.然后通过onclik时间再加上id
//删除商品
function productDelete(id){
layer.confirm('请确认是否删除该商品', {
btn: ['删除','取消'] //按钮
}, function()
{
$.ajax({
url : "/user/system/deleteDrug",
dataType : "text",
type:"post",
cache : false,
data:{
id:id
},
success : function(obj) {
if (obj =="success") {
layer.alert('删除成功!', function(index){
window.location.reload();
});
} else {
layer.alert("商品删除失败!");
}
},
error : function(textStatus, e) {
layer.alert("系统ajax交互错误: " );
}
});
});
}
4.controller接收参数进行删除操作
/**
* 删除药品
* @param request
* @param cpage
* @return
*/
@RequestMapping(value="deleteDrug",method=RequestMethod.POST)
@ResponseBody
public String deleteDrug(String id){
return drugService.updateDrugStatus(id);
}
5.和添加一样,通过映射到DrugService接口
String updateDrugStatus(String id);
6.再到业务逻辑层
@Override
public String updateDrugStatus(String id) {
try {
boolean status =mapper.updateDrugStatus(id);
if (status==true) {
return "success";
}
} catch (Exception e) {
e.printStackTrace();
}
return "fail";
}
7.再到映射mybatis的那个接口IDrugMapper
boolean updateDrugStatus(String id);
8.写sql
<!--删除商品 -->
<update id="updateDrugStatus" parameterType="string">
update drugs_info set status=1 where drugs_id = #{id}
</update>
如果彻底删除的话(建议不要使用这个!!!)
<delete id="updateDrugStatus">
delete from drugs_info where drugs_id = #{id}
</delete>
下期再说查询,修改