我们安装显示的要求:

我们能看到显示的目录里面有:供货企业的名字(这个数据来自于供货商的表[usergys]),流水号,通用名,剂型(这些都来自药品信息表),供货的状态(这个呢在gysypml_control中其实就是一个数字1或者0,但是我们要显示的是正常或者暂停 啊,这样的话这个信息就要查找数据字典表dictinfo才能达到这个功能的 )。。。。

所以我们在查上面要显示的内容的时候:要关联的表有

gysypml, usergys, gysypml_control, ypxx,dictinfo等

我们来看一下sql语句:

select gysypml.ypxxid,
       gysypml.usergysid,
       usergys.mc usergysmc,
       gysypml_control.control,
       (select info
          from dictinfo
         '
           and dictcode = gysypml_control.control) controlmc, --这里去查的是数据字典,就是为了把0,1对应显示为暂停,正常。
       ypxx.id,
       ypxx.bm,
       ypxx.mc,
       ypxx.jx,
       ypxx.gg,
       ypxx.zhxs,
       ypxx.scqymc,
       ypxx.spmc,
       ypxx.zbjg,
       ypxx.jyzt,

       (select info
          from dictinfo
         where ypxx.jyzt = dictcode
           ') jyztmc

  from gysypml, usergys, gysypml_control, ypxx
 where gysypml.usergysid = usergys.id
   and gysypml.ypxxid = gysypml_control.ypxxid
   and gysypml.usergysid = gysypml_control.usergysid
   and gysypml.ypxxid = ypxx.id

   --数据范围权限,这个功能就是一个药品供应商只能看到自己能供应的药品不能看到别人的药品,所以要传一个供应商的id过来,这个id是从Action层到service层再到Dao层这样来的。
   and gysypml.usergysid = '5197cdd2-08cf-11e3-8a4f-60a44cea4388'

到这里我们的sql语句就写完了。

我们在来看POJO类,以及从页面传入到Action中的包装类。

红色框里面的是用逆向工程生成的。但是我们要查询的选项比自动生成的那些pojo类要复杂,所以我们就设计自定义的pojo类,绿色方框里面的GysypmlCustom.java就是自定义的pojo类。GysypmlQuery是页面传入的包装类。

我们看一下这些类的定义:

下面这个GysypmlCustom.java这个POJO类是从数据库里面查出来的数据保存到这个类中,然后把这个数据传到页面上。这个类里面的字段是根据下面这个页面来添加的。

package yycg.business.pojo.vo;
/*
 * 自定义供应商药品目录,这个类里面的字段要包含我们之前写的sql里面要查询的字段。之前要查询的信息中,
 * 药品信息的字段是最多的,所以我们这里去继承药品信息表对应的pojo类
 */
public class GysypmlCustom  extends YpxxCustom{
    private String controlmc;//控制状态的别名1:正常。0:暂停
    private String control;//控制状态(1,0)
    private String usergysid;//供应商的id
    public String getGysypmlid() {
        return gysypmlid;
    }
    public void setGysypmlid(String gysypmlid) {
        this.gysypmlid = gysypmlid;
    }
    private String ypxxid;//
    private String gysypmlid;//这个是自己的加的主键。(假设的主键)gysypmlid
    public String getUsergysid() {
        return usergysid;
    }
    public void setUsergysid(String usergysid) {
        this.usergysid = usergysid;
    }
    public String getYpxxid() {
        return ypxxid;
    }
    public void setYpxxid(String ypxxid) {
        this.ypxxid = ypxxid;
    }
    public String getControlmc() {
        return controlmc;
    }
    public void setControlmc(String controlmc) {
        this.controlmc = controlmc;
    }
    public String getControl() {
        return control;
    }
    public void setControl(String control) {
        this.control = control;
    }

}

我们再来看一下我们的包装类:包装类根据页面搜索传入的。

我们看一下这个GysypmlQuery.java:这个包装类

package yycg.business.pojo.vo;

import yycg.base.pojo.vo.PageQuery;
/*
 *
 * 查询GysymplCustom对应的包装类。也就是从页面上输入的字段所对应的包装类。
 *
 */
public class GysypmlQueryVo {

    private PageQuery pageQuery;//页面分页
    private YpxxCustom ypxxCustom; //药品信息
    private GysypmlCustom gysypmlCustom;//供应商目录
    public YpxxCustom getYpxxCustom() {
        return ypxxCustom;
    }

    public void setYpxxCustom(YpxxCustom ypxxCustom) {
        this.ypxxCustom = ypxxCustom;
    }

    public PageQuery getPageQuery() {
        return pageQuery;
    }

    public void setPageQuery(PageQuery pageQuery) {
        this.pageQuery = pageQuery;
    }

    public GysypmlCustom getGysymplCustom() {
        return gysypmlCustom;
    }
    public void setGysymplCustom(GysypmlCustom gysymplCustom) {
        this.gysypmlCustom = gysymplCustom;
    }

}

我们来看一下Dao层的代码:

也就是Mapper接口,以及xml文件。

我们看一下Mapper的编写:

package yycg.business.dao.mapper;

import java.util.List;

import yycg.business.pojo.vo.GysypmlCustom;
import yycg.business.pojo.vo.GysypmlQueryVo;

public interface GysypmlMapperCustom {
     public List<GysypmlCustom> findGysymplList(GysypmlQueryVo gysypmlQueryVo) throws Exception;

     public int findGysypmlCount(GysypmlQueryVo gysypmlQueryVo)throws Exception;
}

我们再来看一下xml文件的编写:

GysypmlMapperCustom.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="yycg.business.dao.mapper.GysypmlMapperCustom" >

<!-- 供货商药品目录查询条件 -->
<sql id="query_gysympl_where">
 <if test="gysypmlCustom!=null">

          <if test="gysypmlCustom.usergysid!=null and gysypmlCustom.usergysid!=''">
                and gysypml.usergysid = #{gysypmlCustom.usergysid}
            </if>
            <if test="gysypmlCustom.ypxxid!=null and gysypmlCustom.ypxxid!=''">
                and gysypml.ypxxid = #{gysypmlCustom.ypxxid}
            </if>   

</if>
 </sql>

 <!-- 供货商目录控制查询条件 -->
    <sql id="query_gysypmlcontrol_where">
        <if test="gysypmlCustom!=null">
            <if test="gysypmlCustom.control!=null and gysypmlCustom.control!=''">
                and gysypml_control.control = #{gysypmlCustom.control}
            </if>
            <if test="gysypmlCustom.usergysid!=null and gysypmlCustom.usergysid!=''">
                and gysypml_control.usergysid = #{gysypmlCustom.usergysid}
            </if>
            <if test="gysypmlCustom.ypxxid!=null and gysypmlCustom.ypxxid!=''">
                and gysypml_control.ypxxid = #{gysypmlCustom.ypxxid}
            </if>
        </if>

    </sql>

<!-- 供应商药品目录查询 -->
 <select id="findGysymplList" parameterType="yycg.business.pojo.vo.GysypmlQueryVo" resultType="yycg.business.pojo.vo.GysypmlCustom">
<if test="pageQuery!=null">
            select page_2.*
            from (select page_1.*, rownum page_num
            from
            (
        </if>
select
      gysypml.id gysypmlid,
      gysypml.ypxxid,
       gysypml.usergysid,
       usergys.mc usergysmc,
       gysypml_control.control,
       (select info
          from dictinfo
         where typecode = '008'
           and dictcode = gysypml_control.control) controlmc,
       ypxx.id,
       ypxx.bm,
       ypxx.mc,
       ypxx.jx,
       ypxx.gg,
       ypxx.zhxs,
       ypxx.scqymc,
       ypxx.spmc,
       ypxx.zbjg,
       ypxx.jyzt,

       (select info
          from dictinfo
         where ypxx.jyzt = dictcode
           and typecode = '003') jyztmc

  from gysypml, usergys, gysypml_control, ypxx
  where gysypml.usergysid = usergys.id
        and gysypml.ypxxid = gysypml_control.ypxxid
        and gysypml.usergysid = gysypml_control.usergysid
        and gysypml.ypxxid = ypxx.id
        <!-- 传入供应商的id,供应商只能看到自己供应的药品,所以需要传入供应商的id -->
           <include refid="query_gysympl_where"></include>
           <!-- 根据 -->
               <include refid="query_gysypmlcontrol_where" />
           <!-- 药品查询条件 -->
            <include refid="yycg.business.dao.mapper.YpxxMapperCustom.query_ypxx_where" />
        <!-- 分页尾 -->
        <if test="pageQuery!=null">
            ) page_1
        <![CDATA[
         where rownum <= ${pageQuery.PageQuery_end}) page_2
 where page_2.page_num >= ${pageQuery.PageQuery_start}
 ]]>
        </if>
 </select>

<!-- 供应商药品目录总数查询 -->
 <select id="findGysypmlCount" parameterType="yycg.business.pojo.vo.GysypmlQueryVo" resultType="int">

select
 count(1)

  from gysypml, usergys, gysypml_control, ypxx
  where gysypml.usergysid = usergys.id
        and gysypml.ypxxid = gysypml_control.ypxxid
        and gysypml.usergysid = gysypml_control.usergysid
        and gysypml.ypxxid = ypxx.id
        <!-- 传入供应商的id,供应商只能看到自己供应的药品,所以需要传入供应商的id -->
           <include refid="query_gysympl_where"></include>
           <!-- 根据  -->
               <include refid="query_gysypmlcontrol_where" />
           <!-- 药品查询条件 -->
            <include refid="yycg.business.dao.mapper.YpxxMapperCustom.query_ypxx_where" />

 </select>

</mapper>

这里的:

    <include refid="query_gysympl_where"></include>
           <!-- 根据 -->
               <include refid="query_gysypmlcontrol_where" />
           <!-- 药品查询条件 -->
            <include refid="yycg.business.dao.mapper.YpxxMapperCustom.query_ypxx_where" />
就是相当于把这些sql语句独立出来。效果跟写在里面是一样的。

随机推荐

  1. 实战:考虑性能--Solr索引的schema设计

    从 high level 的角度来看,schema.xml 结果如下,这个例子虽然不是一个真实的XML,但是简洁明了的传达了shema的概念. <schema> <types> ...

  2. 树链剖分+线段树 BZOJ 1036 [ZJOI2008]树的统计Count

    题目链接 题意: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节 ...

  3. MapReduce基础知识

    hadoop版本:1.1.2 一.Mapper类的结构 Mapper类是Job.setInputFormatClass()方法的默认值,Mapper类将输入的键值对原封不动地输出. org.apach ...

  4. SEO之HTML优化:让你的网站HTML代码更符合SEO规范

    摘要HTML优化是网站内部优化的重点,可能对SEO新手来说,容易忽略.符合搜索引擎习惯的HTML代码是极利于SEO的,可以让你的网站获得更好的搜索引擎排名.如何制作一个标准的HTML网页,如何做HTM ...

  5. 解决多线程调用sql存储过程问题

    场景: 我们程序现在改成多线程了,我现在需要把临时表中的数据给插入到TABLE_M中,但这时候可能其他的线程也在插入,我就不能用之前我们的方案了(select max(oid) from Tuning ...

  6. CSS3实现自定义Checkbox和Radiobox

    我们知道浏览器自带的Checkbox复选框不怎么美观(这或许是我们看习惯了的缘故),而且复选框在不同的浏览器上显示的样式又有很大的差异,由于目前越来越多的人开始接受支持CSS3的现代浏览器,所以今天就 ...

  7. hdu4486 Pen Counts(水题)

    Pen Counts Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 程序员要拥抱变化,聊聊Android即将支持的Java 8

    WeTest 导读 Java 9预计今年也会正式发布,Java 8这个最具变革性且变革性最适于GUI程序的版本,Android终于准备正式支持.从自己开发JavaFx的感受,说一说Java 8应该使用 ...

  9. jdk 动态代理源码分析

    闲来无事,撸撸源码 使用方法 直接看代码吧.. package com.test.demo.proxy; import java.lang.reflect.InvocationHandler; imp ...

  10. ArchLinux 安装五笔输入法

    说明 自己的笔记本已经全盘做成了ArchLinux系统了,用着还好,苦于常用的五笔输入法在Arch下有点不太好装,参考wiki弄好了,这里简单记录下 这里使用ibus-rime 原因有二: ibus- ...