La capa de servicio llama al método de la capa de servicio y cambia la base de datos para llamar a diferentes bases de datos para obtener datos

Los requisitos de mi negocio aquí son: consultar algunos datos de la biblioteca A, devolver un conjunto de resultados, consultar los datos de la segunda base de datos a través de algunos campos de este conjunto de resultados y luego encapsular los dos datos devueltos en una lista ¡Se devuelve la colección! (¡También hice una consulta dinámica y la publiqué para todos!)

<select id="selectComplaintList" parameterType="java.util.HashMap" resultMap="BaseResultMapVo">
    SELECT * FROM t_complaint cc
    <trim prefix="WHERE" prefixOverrides="AND|OR">
    cc.is_delete=0
    <if test="keyword != null and keyword != ''">
      AND ((cc.WangWangNum LIKE CONCAT('%', #{keyword}, '%')
        <!--团队名称搜索-->
        <!--时间搜索-->
      OR cc.`complaintDate` LIKE CONCAT('%',#{keyword}, '%')))
      </if>
      <!--按照状态搜索-->
      <if test="status != -1">
        AND cc.status=#{status,jdbcType=TINYINT}
      </if>
      <!--按照投诉次数管理-->
      <if test="frequency !=-1">
        and cc.`frequency` > #{frequency,jdbcType=INTEGER}
      </if>
      <!--按照投诉渠道搜索-->
      <if test="channel !=-1">
        and cc.`channel` = #{channel,jdbcType=INTEGER}
      </if>
      <if test="startTime != '' and endTime !='' ">
        and cc.complaintDate <![CDATA[>= ]]> #{startTime} and cc.complaintDate <![CDATA[<= ]]> #{endTime}
      </if>
    </trim>
    order by cc.`complaintDate` DESC
      <if test="pageNum !=null and pageSize !=null">
        Limit #{pageNum},#{pageSize}
      </if>
  </select>

Se requieren todos los datos de la primera interfaz, seleccionaré directamente *, verá sus necesidades para escribir declaraciones SQL, tengo que buscar por nombre del equipo, buscar por estado, buscar por número de quejas, buscar por canal de quejas, por período de tiempo ¡Busque, esto lo determina de acuerdo a las necesidades de su negocio!

No publicaré el mapeador y el servicio correspondiente, y no publicaré la clase de entidad. ¡La clase de entidad es solo para poner todos los datos que desee! ¡Esto no necesita demasiada explicación!

¡La siguiente es la clase de implementación de servicio!

 @Autowired
    private ComplaintMapper complaintMapper;
//注入service
 @Autowired
    private PersonnelServiceImpl personnelService;
 //分页搜索总记录数
 //下面这个是注解切换数据源的方式,如果你发现切换没有效果那你把你的事务给拿掉吧
    @DataSource(value = "druid")
    @Override
    public RestResult selectComplaint(Map params) throws Exception {
    //查询的条件,我有点冗余,你们可以不要按照我这样写
        Integer pageNum = Integer.valueOf(String.valueOf(params.get("pageNum")));
        Integer pagesize = Integer.valueOf(String.valueOf(params.get("pagesize")));
        String keyword = String.valueOf(params.get("keyword"));
        String startTime = String.valueOf(params.get("startTime"));
        String endTime = String.valueOf(params.get("endTime"));
        Integer status = Integer.valueOf(String.valueOf(params.get("status")));
        Integer channels = Integer.valueOf(String.valueOf(params.get("channel")));
        String frequency = String.valueOf(params.get("frequency"));
        String TScustomer = String.valueOf(params.get("TScustomer"));
        Integer TechnologyRecruitmentID =Integer.valueOf(String.valueOf(params.get("TechnologyRecruitmentID")));
        Integer PersonnelID = Integer.valueOf(String.valueOf(params.get("PersonnelID")));
        Integer TeamID = Integer.valueOf(String.valueOf(params.get("TeamID")));
        String TeamName = String.valueOf(params.get("TeamName"));
        if (pagesize>=10){
            pagesize = 10;
        }if (pageNum == 1){
            pageNum = 0;
        }else {
            pageNum=(pageNum-1)*pagesize;
        }
        params.put("pageNum",pageNum);
        params.put("pageSize",pagesize);
        params.put("keyword",keyword);
        params.put("status",status);
        if (Strings.isEmpty(startTime)){
            params.put("startTime",startTime);
        }
        if (Strings.isEmpty(endTime)) {
            params.put("endTime", endTime);
        }
        if (channels !=-1){
        params.put("channels",channels);
        }
        if (frequency.isEmpty()) {
            params.put("frequencys", frequency);
        }
        if (Strings.isEmpty(TScustomer)){
            params.put("TScustomer",TScustomer);
        }
        if (Strings.isEmpty(TeamName)){
            params.put("TeamName",TeamName);
        }
        if (TeamID !=-1){
            params.put("TeamID",TeamID);
        }
        if (TechnologyRecruitmentID != -1){
            params.put("TechnologyRecruitmentID",TechnologyRecruitmentID);
        }
        if (PersonnelID != -1 ){
            params.put("PersonnelID",PersonnelID);
        }
        //调用dao层
        List<ComplaintVo> list = complaintMapper.selectComplaintList(params);
        List<ComplaintVo> result = new ArrayList<>();
        for (ComplaintVo vo:list){
            String wangwangnum = vo.getWangwangnum();
            params.put("wangwangnum",wangwangnum);
            ComplaintVo complaintVos = personnelService.selectComplaintListOver(params);
            ComplaintVo complaintVo = new ComplaintVo();
            complaintVo.setScenerestoration(vo.getScenerestoration());
            complaintVo.setStatus(vo.getStatus());
            complaintVo.setCreateTime(vo.getCreateTime());
            complaintVo.setId(vo.getId());
            complaintVo.setChannel(vo.getChannel());
            complaintVo.setComplaintdate(vo.getComplaintdate());
            complaintVo.setDepartment(vo.getDepartment());
            complaintVo.setWorktype(vo.getWorktype());
            complaintVo.setRemarks(vo.getRemarks());
            complaintVo.setPkId(vo.getPkId());
            complaintVo.setIsStop(vo.getIsStop());
            complaintVo.setIsDelete(vo.getIsDelete());
            complaintVo.setFrequency(vo.getFrequency());
            complaintVo.setContent(vo.getContent());
            complaintVo.setWangwangnum(vo.getWangwangnum());
            //判断第二个接口是否有数据,有数据则set进去没有就不执行
            if (complaintVos !=null) {
            complaintVo.setTechnologyrecruitmentid(complaintVos.getTechnologyrecruitmentid());
            complaintVo.setShopptype(complaintVos.getShopptype());
            complaintVo.setPersonnelid(complaintVos.getPersonnelid());
            complaintVo.setTscustomer(complaintVos.getTscustomer());
            complaintVo.setTeamid(complaintVos.getTeamid());
            complaintVo.setTeamname(complaintVos.getTeamname());
            complaintVo.setUsername(complaintVos.getUsername());
            complaintVo.setPname(complaintVos.getPname());
            complaintVo.setTename(complaintVos.getTename());
            result.add(complaintVo);
            }
        }
        //总数量
        Integer total = complaintMapper.selectComplaintCount(params);
        Map map = new HashMap();
        map.put("list",result);
        map.put("total",total);
        return new RestResultBuilder().setCode(0).setMsg("请求成功").setData(map).build();
    }    

El archivo xml del servicio que se llamará arriba se muestra a continuación

¡No publicaré este conjunto de resultados, es el mismo que el anterior! ¡Empaquételo usted mismo!

¡Esta es una consulta de sqlserver! ¡Sqlserver no parece admitir la consulta dinámica, que es mybatis, es compatible! ¡Para evitar la eliminación, sugiero que escriba todas las condiciones de la consulta dinámica como nombres de campo!

 <select id="selectComplaintListOver" parameterType="java.util.Map" resultMap="BaseResultMapVo">
    SELECT cu.WangWangNum,cu.TScustomer,cr.PersonnelID,cu.ShoppType,pp.UserName,
    pp.TeamID,tt.TeamName,cu.TechnologyRecruitmentID,p2.UserName pname,p3.UserName tename
    from Customer cu LEFT JOIN CustomerRecords cr ON cu.WangWangNum = cr.Trader
    LEFT JOIN Personnel pp ON cu.TScustomer = pp.ID
    LEFT JOIN Team tt ON tt.ID = pp.TeamID
    LEFT JOIN Personnel p2 ON p2.ID = cr.PersonnelID
    LEFT JOIN Personnel p3 on cu.TechnologyRecruitmentID =p3.ID
    <trim prefix="WHERE"  prefixOverrides="AND|OR">
      cu.WangWangNum =#{wangwangnum,jdbcType=VARCHAR}
      <if test="TScustomer != null">
        AND cu.TScustomer = #{TScustomer,jdbcType=VARCHAR}
      </if>
      <if test="TechnologyRecruitmentID != -1">
        AND cu.TechnologyRecruitmentID =#{TechnologyRecruitmentID,jdbcType=INTEGER}
      </if>
      <if test="PersonnelID != -1">
        AND cr.PersonnelID = #{PersonnelID,jdbcType=INTEGER}
      </if>
      <if test="TeamID != -1 ">
        and pp.TeamID= #{TeamID,jdbcType=INTEGER}
      </if>
        <if test="TeamName != null ">
            and tt.TeamName= #{TeamName,jdbcType=INTEGER}
        </if>
    </trim>
  </select>

La siguiente es la clase de implementación del servicio:

//切换数据源,这个接口的数据全是从sqlserver出来的,至于怎么切换数据源,看我另外的博客吧!
 @DataSource(value = "slave1")
    @Override
    public ComplaintVo selectComplaintListOver(Map map) {
        return personnelMapper.selectComplaintListOver(map);
    }

El código es así, no entiendo el contacto blogger Simon

Publicado 34 artículos originales · ganado elogios 0 · Vistas 3634

Supongo que te gusta

Origin blog.csdn.net/qq_43469899/article/details/100030180
Recomendado
Clasificación