点击传送—> 基于JavaWeb的医疗后台项目医生信息的分页展示和模糊查询实现(2)
-----上篇博客写到了医疗项目的医生信息的分页展示和查询,今天来实现药品的管理-----
1.建表
首先建立药品表 medicine sql语句如下:CREATE TABLE `medicine` (`mid` VARCHAR(100) NOT NULL,`picture` VARCHAR(100) DEFAULT NULL,`inPrice` DOUBLE DEFAULT NULL,`salPrice` DOUBLE DEFAULT NULL,`name` VARCHAR(50) DEFAULT NULL,`type` INT(11) DEFAULT NULL,`descs` VARCHAR(200) DEFAULT NULL,`qualityDate` INT(11) DEFAULT NULL,`description` VARCHAR(500) DEFAULT NULL,`produceFirm` VARCHAR(80) DEFAULT NULL,`readme` VARCHAR(300) DEFAULT NULL,`remark` VARCHAR(500) DEFAULT NULL,PRIMARY KEY (`mid`)) ENGINE=INNODB DEFAULT CHARSET=utf8;
插入初始化数据:
INSERT INTO `medicine`(`mid`,`picture`,`inPrice`,`salPrice`,`name`,`type`,`descs`,`qualityDate`,`description`,`produceFirm`,`readme`,`remark`) VALUES ('cat-001','520de947-c742-41d4-8142-0c0cae63ab3d3.jpg',100,101,'猫薄荷',1,'救猫',36,'==','中公猫厂','吸服','=='),('changde-1100','afdddd94-7e80-48a3-8b35-f8ea939186ed.jpg',12,11,'马来酸非尼拉敏盐酸萘甲唑啉滴眼液',2,'非常好',36,'不错','不','一天3次,一次2滴','=='),('CYN-0011','173823e3-28c5-400d-a17a-a7ebcdb3ad14.jpg',25,30,'肠炎宁',3,'治疗胃病',36,'非常实用','医药公司','一日3次,每次一片','-----'),('DCY-001','80325b28-b070-4653-82d2-90932cf433e8.jpg',1,10,'打虫药',1,'打虫药',36,'甜滋滋','打虫药','打虫药','打虫药'),('DJ-74110','3a6dc695-65b1-4f14-8da9-c942cc9f98e4.jpg',1000,100000,'精神病',3,'治理精神病',36,'专治精神病','未知','未知','谁用谁知道'),('GMLKL','938abb13-2c13-4d33-8767-f70717b1708d.jpg',100,10,'感冒灵颗粒',1,'治感冒',1,'治感冒','小儿','1天一盒','包治百病'),('GM_0938','d8816b11-1ccf-40aa-bfe1-2fa8f91681fc.jpg',5,20,'感冒灵·',1,'治疗感冒',36,'治疗感冒','1','1','1'),('GS_921','009e9167-2e5d-47bd-82ef-e3028aa7aef21.jpg',23,56,'感康',2,'专治感冒',36,'专治感冒,一盒见效','北京中药厂','一天3次,一次2片','专治感冒,一盒见效'),('H-2345','1d406b70-85d5-4460-b1b8-2d31c6ce8fc2.jpg',15,35,'999感冒灵颗粒',3,'感冒必备',36,'感冒必备','13245678','口服','####'),('hdh1254','39c7d56c-f7a3-4251-95f7-dc6bd49c48e5.jpg',30,50,'鹤顶红',1,'好用啊',36,'一点就好用','奸商','口服','别不小心自己喝了'),('HH-001','25f703a4-d733-41e0-b53f-d679e9bd69a0.jpg',100,10000,'后悔药',2,'后悔药',36,'后悔药','后悔药','沸水送服','后悔药'),('HHY-001','b188792d-9787-4d3b-be52-f83e63ca7407.jpg',25,100,'红花油',2,'包治百病!',36,'好','好','直接喝!','好'),('HZ-16326','02b7b77d-d3d1-4c58-9e83-fb26ef6e2da2.jpg',2,5,'三黄片',1,'清热解毒',36,'具有清热解毒,泻火通便功效。主治三焦热盛,目赤肿痛,口鼻生疮,咽喉肿痛,心烦口渴。','亚宝药业','1日2次','无'),('jbsw','aa2b3702-94a8-44e9-9a0e-d600fd46bb4b.jpg',999,99990,'九步蛇丸',2,'没有描述',999,'没有描述','没有厂商','随便服用','没有备注'),('jj_002','cc9e5aa4-febb-404e-a834-aed4f5917293.jpg',9.9,19,'九九感冒灵',1,'治感冒',36,'疗效','九九制药','本品解热镇痛。用于感冒引起的头痛,发热等','本品为浅棕色至深棕色的颗粒,味甜、微苦。每盒含9包,每包袋装10g。解热镇痛功效,用于因感冒引起的头痛,发热,鼻塞,流涕,咽痛等症状。'),('ML-001','25ad4300-8c77-420a-81d0-b0dd400f840e.jpg',80000,100000,'爱的魔力药水',1,'转圈圈',100,'爱的魔力转圈圈','爱情','口服','转圈圈'),('No.00001','f8658818-341f-4a02-8862-eceb9e67efe5.jpg',10000,10000,'还魂丹',1,'一颗极乐,两颗升天',1,'灵隐寺','灵隐寺','一口吞服',''),('No1','f11edb5f-a3be-4477-9a66-cf8400062a3e.jpg',10000,10000000,'天山雪莲',2,'老好呲了',36,'--','-','-','-'),('No2','b25dc979-8b7a-4469-83e6-eccee5b96c1c.jpg',1000,120301230120,'nice棒棒鼓励片',1,'老好呲了',36,'-','-','-','-'),('No3','6bde8c74-1736-4108-92ce-a72f9b768d30.jpg',123123,123123412312,'肛泰',1,'-',36,'-','-','-','-'),('pc9988','f66331a3-bf95-4e35-9d26-d300a8e8b3d5.jpg',15,150,'万通筋骨片',1,'一吃就好',36,'谁用谁知道','三九制药','别忘了吃','忌酒'),('QXTYS-110','a9c41431-78a0-4146-9eab-25d11695b003.jpg',10000,99999,'强效太阳水',2,'喝一瓶想两瓶',36,'牛逼','盛大或者???','外服内服','666'),('SKKFF-1-23213','3bdb01fe-76dd-4a64-a2fa-cb7ea662a79e.jpg',20,40,'复方炔诺酮糖衣片',3,'女人掌握核心科技',36,'避免意外怀孕','不知道','口服','自己理解'),('SS-001','4661e4bd-f27e-4a0a-959a-0d8ff4456a4a.jpg',111,10000,'烧烧果实',1,'烧烧果实',36,'烧烧果实','烧烧果实','烧烧果实','烧烧果实'),('STDYW-01','61173dbe-8214-4c2b-8dc5-91776b994cc6.jpeg',20,200,'伸腿瞪眼丸',2,'很好吃',36,'吃完就伸腿','伸腿公司','生吞','嘎嘎嘎'),('SXRJS-001','790c5e35-78c9-44bb-aeb3-9d7d446304b5.jpg',34,430,'黑玉断骨膏',1,'又香又好吃',36,'香的一批,又好看又好吃','孙伟志牌烤肉店','香的一批,又好看又好吃','孙伟志牌烤肉香的一批,又好看又好吃'),('WTJGT-123','07aa2375-32b9-404f-bbe6-8157745cf340.jpg',45,100,'万通胫骨贴',2,'贴上暖暖的',36,'直接贴','baidu','直接贴','效果666'),('YKN-008','c9bd59d3-f0ce-49f1-a1d0-97fced715a68.png',88,188,'炎可宁片',3,'就是牛!',12,'一粒就见效!','吉尔吉药业','使劲吃!','------'),('YNBY-001','559ab16f-82c5-4a1e-8b8e-1f73e0045aea.jpg',10,30,'云南白药',3,'神药',36,'具特异性香气,味略感清凉,并有麻舌感。','云南','口服','。。。'),('YSG--110','b0af939f-966c-47d4-b566-cafd844733a7.gif',20,30000,'药水哥',3,'解心宽',36,'解懒解心宽','--','==','==='),('YYHHS','02c1c87e-cfcc-4398-ad2b-4a85e28bd7c4.jpg',250,500,'阴阳合欢散',2,'很嗨皮',50,'嗨皮的很','自制','直接服用','嗨到飞起'),('ZH-0000001','93e5753e-6f92-43f0-aa81-c77142857181.jpg',10000,200000,'绮罗郁金香',2,'规避任何毒物',33333,'不知道','斗罗大陆','携带身边','不要食用'),('zzw-001','d1ce6850-229e-4995-b96b-e5991989a0e2.jpg',2,20000,'智障丸',2,'治智障神药',36,'一次一片,立刻见效','智障厂','==','==');
紧接上篇博客,我们先来看看效果实现:
今天中所有功能只有一个需要注意,就是图片的展示和上传,如果对于java中文件的上传不清楚的可以参考我的这篇博客,这里应该写了前端页面如何传输文件到后台服务器:
OK,我们现在可以开始写代码了.点击传送—>Servlet+html+tomcat实现文件的上传和下载
2.代码实现
首先就是展示页面,同样的,我们需要建三个类:Medicine实体类来存储数据,MedicineServlet来处理有关药品页面的请求 MedicineService 逻辑业务层 MedicineDao进行数据库的操作返回数据.对于分页查询和模糊查询,之前也说了,就是sql语句的动态拼接,页面中所有的关于查询药品的信息都要在后台传入一个包含模糊查询条件的对象来进行sql拼接,所以这一部分代码就显得十分简单了,这里就不多说.数据库中的保存的图片路径怎么在前台展示呢?首先看看我画的一个丑陋图片:我们在数据库中存储的只是图片名称而已,当我们读取到这个数据时,如何展示到前端页面是一个问题,因为路径写错是展示不出来的,所以这里使用到一个技术,将物理硬盘的地址绑定到服务器端的虚拟地址上,具体来看看如何操作.
到这一步中的Document base填写的就是你F盘下保存图片的文件夹路径,我这里为:E:\Hospital-pic,而Path填写的就是服务器虚拟路径,也就是说在服务器端访问该虚拟路径就是访问这个物理路径,我这里写的是/hosPic.OK,我们来看看代码部分:
//这里是jsp页面代码<%String imgPath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/hosPic/";//这里获取的整个url路径,请注意这里写的/hosPic/就是我们为物理路径下图片文件夹路径绑定的虚拟路径,也就是说我们访问这个等于访问了那个存放图片的文件夹pageContext.setAttribute("imgPath", imgPath);%><img width="80" height="55" alt="" src="${imgPath }${medicine.picture}">//这里是img标签中的src地址,路径拼接上图片名称就可以访问到图片了,也就可以展示了.
我们来学习一下如何上传图片进行保存,这里需要注意一点,图片的名称我们需要让它不重复,因为我们上传的图片可以相同但连文件名也相同会覆盖或者保存失败.直接来到后台代码:
/*** 添加药品* @throws ServletException * @throws IOException */public void insertMedicine(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {String mid=request.getParameter("mid");String inPrice=request.getParameter("inPrice");String salPrice=request.getParameter("salPrice");String mname=request.getParameter("mname");String type=request.getParameter("type");String effect=request.getParameter("effect");String qualityDate=request.getParameter("qualityDate");String description=request.getParameter("description");String productCom=request.getParameter("productCom");String readme=request.getParameter("readme");String mark=request.getParameter("mark");//1.上面这部分获取的都是字符类型数据,所以没有过多处理,就是比较繁杂Medicine medicine=null;//这里是为了模糊查询携带的medicine对象//2.对于图片单独处理//2-1 对于文件,我们使用getPart()来获取,并且MedicineServlet需要添加@MultipartConfig注解Part part = request.getPart("picture");//2-2图片名字的最终保存结果String pricute="";//2-3 判断是否上传图片if (part.getSize()==0) {//将除了图片没有选择的其他信息保存起来,用于返回时填充,避免因为图片没选择其他合格数据丢失medicine=new Medicine(mid, Double.valueOf(inPrice), Double.valueOf(salPrice), mname, Integer.valueOf(type), effect, Integer.valueOf(qualityDate), description, productCom, readme, mark);request.setAttribute("meg", "您还没选择图片!!!");request.setAttribute("medicine", medicine);request.getRequestDispatcher("medicine/add.jsp").forward(request, response);return ;}else {//2-4 这里使用UUID来生成不会重复的文件名pricute=UUID.randomUUID()+part.getSubmittedFileName();String path="E:/Hospital-pic";File file=new File(path);if (!file.exists()) {file.mkdir();//2-5 如果没有文件夹则创建}//2-6 将文件写入part.write(path+"/"+pricute);}Medicine medicine1=new Medicine(mid, pricute, Double.valueOf(inPrice), Double.valueOf(salPrice), mname, Integer.valueOf(type), effect, Integer.valueOf(qualityDate), description, productCom, readme, mark);boolean isSuccess=medicineService.insertMedicine(medicine1);if (isSuccess) {response.sendRedirect("medicine?func=findAllMedicine");}}
OK,到这一步就实现了添加药品的功能,对于修改,我们只需要将逻辑反过来,当我们修改没有上传图片,则保存之前的图片,如果选择了新的文件,则删除旧文件再写入.
----到这里有关药品的功能就写完了,和医生功能基本上没啥差别,就是一个图片的功能不一样,下一篇写完患者挂号医疗项目就大功告成了-----
点击传送—>基于JavaWeb的医疗后台项目患者挂号中使用Ajax和多表查询实现二级联动(完)