Java從dao到service到controller(分頁和統計總數,修改),向外提供一個接口

Controller(控制邏輯)層:它是負責在頁面和程序之間傳輸數據的,還有作用是做頁面跳轉。頁面由用戶填寫表單數據,點擊提交按鈕,頁面的表單數據由傳入Service層。

Service層(業務邏輯層):負責的是對數據的處理。如果沒有數據處理任務的話,此層只做單純的數據傳遞作用,而後又到了Dao

DAO層(數據庫操作層):負責對數據向數據庫增刪改查的操作。(如下面的mapper代理方法,還要寫mapper.xml代理文件)

 

 

mapper.xml文件 

1.用到了mysql分頁函數limit m,n。從m+1開始,每次n條。limit 5就是前五

2.idea新建xml可以右鍵->new->ResourceBoudle

3.傳入參數parameterType="map"這個map中key爲列名,value爲列值

4.下面的標籤如<if test="startTime !=null and endTime !=null">中的test是固定的,不變化

5.select中可以隨便join,<if>之類的包在括號中依舊有效

<?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.ruoyi.system.mapper.ClockInMapper">
    

    <!--分頁查詢事件詳情-->
    <select id="selectClockInList" parameterType="map" resultType="map">
        select
        police_name,
        police_code,
        happen_time,
        -1 as score
        from
        kaohe_ducha_event
        where
        1=1
        <if test="startTime !=null and endTime !=null">
            and DATE_FORMAT(happen_time,'%Y-%m-%d %H:%i:%s') &lt;=#{endTime} and DATE_FORMAT(happen_time,'%Y-%m-%d %H:%i:%s') &gt;=#{startTime}
        </if>
        <choose>
            <when test=" eventType !=null">
                and event_type_name like CONCAT('%','${eventType}','%' )
            </when>
            <otherwise>
                and (event_type_name like '%未打卡%' )
            </otherwise>
        </choose>
        and feedback_status=2 and event_check=1  and police_org_code=310101490000
            limit #{startNum},#{pageSize}
    </select>

    <!--統計事件總數-->
    <select id="selectClockInTotal" parameterType="map" resultType="int">
        select
        count(1)
        from
        kaohe_ducha_event
        where
        1=1
        <if test="startTime !=null and endTime !=null">
            and DATE_FORMAT(happen_time,'%Y-%m-%d %H:%i:%s') &lt;=#{endTime} and DATE_FORMAT(happen_time,'%Y-%m-%d %H:%i:%s') &gt;=#{startTime}
        </if>
        <choose>
            <when test=" eventType !=null">
                and event_type_name like CONCAT('%','${eventType}','%' )
            </when>
            <otherwise>
                and (event_type_name like '%未打卡%' )
            </otherwise>
        </choose>
        and feedback_status=2 and event_check=1  and police_org_code=310101490000
    </select>

    <!--考勤計分統計  固定展現十條-->
    <select id="selectClockInGrade" parameterType="map" resultType="map">
        select
        police_name,
        sum(num) score
        from
        (
        select
        police_name,
        police_code,
        happen_time,
        -1 num
        from
        kaohe_ducha_event
        WHERE
        1=1
        <if test="startTime !=null and endTime !=null">
            and DATE_FORMAT(happen_time,'%Y-%m-%d %H:%i::%s') &lt;=#{endTime} and DATE_FORMAT(happen_time,'%Y-%m-%d %H:%i::%s') &gt;=#{startTime}
        </if>
        <choose>
            <when test=" eventType !=null">
                and event_type_name like CONCAT('%','${eventType}','%' )
            </when>
            <otherwise>
                and (event_type_name like '%未打卡%' )
            </otherwise>
        </choose>
            and feedback_status=2 and event_check=1 and police_org_code=310101490000
        ) d GROUP BY  police_code order by sum(num)
        limit 10
    </select>
    

    
</mapper>

 

mapper.java

對上面resultType是map的,map應該裝在list集合中,不然列名對應對個值時會報TooManyResultsException:

package com.ruoyi.system.mapper;

import java.util.List;
import java.util.Map;

/**
 * @Author qiumengkai
 * @Date 2020/3/31
 */
public interface ClockInMapper {
    /**
     * 考勤未打卡數據查詢
     *
     *
     * @return 案件信息
     */
    public List<Map<String,Object>> selectClockInList(Map<String, Object> map);
    /**
     * 統計事件數量
     *
     *
     * @return 事件數量
     */
    public int selectClockInTotal(Map<String, Object> map);

    /**
     * 警員扣分前十名
     *
     *
     * @return 警員名稱,分數
     */
    public List<Map<String,Object>> selectClockInGrade(Map<String, Object> map);
}

 

serviceInterface

package com.ruoyi.system.service;

import java.util.Map;

/**
 * @Author qiumengkai
 * @Date 2020/3/31
 */
public interface IClockInService {
    /**
     * 查詢未打卡信息列表
     *
     *
     * @return 未打卡信息
     */
    public Map<String,Object> selectClockInList(Map<String, Object> map);

    /**
     * 警員扣分前十名分數彙總
     *
     *
     * @return 警員名稱,分數
     */
    public Map<String,Object> selectClockInGrade(Map<String, Object> map);
}

serviceImpl

調用了xml中的兩組,total和list並列

package com.ruoyi.system.service.impl;

import com.ruoyi.system.mapper.ClockInMapper;
import com.ruoyi.system.service.IClockInService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author qiumengkai
 * @Date 2020/3/31
 */
@Service
public class ClockInServiceImpl implements IClockInService {
    @Autowired
    private ClockInMapper clockinmapper;

    @Override
    public Map<String, Object> selectClockInList(Map<String, Object> map) {
        Map<String,Object> resultMap = new HashMap<>();
        List<Map<String,Object>> list= clockinmapper.selectClockInList(map);
        int total = clockinmapper.selectClockInTotal(map);
        resultMap.put("list",list);
        resultMap.put("total",total);
        resultMap.put("status",200);
        return resultMap;
    }

    @Override
    public Map<String, Object> selectClockInGrade(Map<String, Object> map) {
        Map<String,Object> resultMap = new HashMap<>();
        List<Map<String,Object>> list = clockinmapper.selectClockInGrade(map);
        resultMap.put("list",list);
        resultMap.put("status",200);
        return resultMap;
    }
}

Controller

.put中帶引號的幾個名稱和xml中是對應的(或者說最後返回JSON結果中的第一層),不帶引號的和接口中參數一樣

package com.ruoyi.web.controller.system;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.system.service.IClockInService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author qiumengkai
 * @Date 2020/3/31
 */
@Controller
@RequestMapping("/system/clockin")
public class ClockInController extends BaseController {
    private String prefix = "/system/clockin";
    @Autowired
    private IClockInService ClockInService;

    @GetMapping("/listclockin")
    @ResponseBody
    public Map<String,Object> listclockin(int pageNum, int pageSize, String startTime,String endTime,String eventType) {
        Map<String,Object> resultMap = new HashMap<>();
        Map<String,Object> paramMap = new HashMap<>();
        if(pageNum<1){
            pageNum = 1;
        }
        if(pageSize<1){
            pageSize = 10;
        }
        int startNum = (pageNum-1)*pageSize;
        paramMap.put("pageSize",pageSize);
        paramMap.put("startNum",startNum);
        paramMap.put("startTime",startTime);
        paramMap.put("endTime",endTime);
        paramMap.put("eventType",eventType);
        resultMap = ClockInService.selectClockInList(paramMap);
        return resultMap;
    }


    @GetMapping("/listclockingrade")
    @ResponseBody
    public Map<String,Object> listPoliceGrade(String startTime,String endTime,String eventType) {
        Map<String,Object> resultMap = new HashMap<>();
        Map<String,Object> paramMap = new HashMap<>();
        paramMap.put("startTime",startTime);
        paramMap.put("endTime",endTime);
        paramMap.put("eventType",eventType);
        //paramMap.put("status",status);
        resultMap = ClockInService.selectClockInGrade(paramMap);
        return resultMap;
    }
}

1.@RequestMapping用來標識 http 請求地址與 Controller 類的方法之間的映射

2.接口  @RequestMapping後面的拼接/system/clockin @GetMapping後面的/listclockin ,?後面再接參數

如   http://localhost:8080/system/clockin/listclockin?pageSize=10&pageNum=1&startTime=2020-01-01 00:00:00&endTime=2021-01-01 00:00:00

3.接口中的參數字段在Controller中可以找到,就是不帶引號的那幾個

4.調用接口返回的就是xml文件中返回的幾個字段

上面的total和list就是ServiceImpl中的total和list(status漏寫,與total一層)

 

update流程(和插入刪除修改一樣,要返回一個狀態,查看是否增刪改成功)

mapper.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.ruoyi.system.mapper.PersonalResumeMapper">

    <resultMap type="PoliceEvaluate" id="result">
        <result property="userCode"     column="userCode"/>
        <result property="chiefEvaluate"   column="chiefEvaluate"/>
    </resultMap>

    <update id="updateChiefEvaluate" parameterType="com.ruoyi.system.domain.PoliceEvaluate">
       update police_evaluate
       <set>
        <if test="chiefEvaluate != null and chiefEvaluate != ''">chief_evaluate = #{chiefEvaluate}</if>
       </set>
        where user_code = #{userCode}
    </update>
</mapper>

mapper

package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.PoliceEvaluate;
public interface PersonalResumeMapper {
    /**
     * 修改人員評價
     * @param userCode 部門信息
     * @return 結果
     */
    public int updateChiefEvaluate(PoliceEvaluate userCode);
}

service

package com.ruoyi.system.service;
import com.ruoyi.system.domain.PoliceEvaluate;
public interface IPersonalResumeService {
    /**
     * 修改評價信息
     * @param policeEvaluate 警員號
     * @return 結果
     */
    public int updateChiefEvaluate(PoliceEvaluate policeEvaluate);
}

serviceImpl

package com.ruoyi.system.service.impl;
import com.ruoyi.system.domain.PoliceEvaluate;
import com.ruoyi.system.mapper.PersonalResumeMapper;
import com.ruoyi.system.service.IPersonalResumeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class PersonalResumeServiceImpl implements IPersonalResumeService {
    @Autowired
    private PersonalResumeMapper personalResumeMapper;

    @Override
    public int updateChiefEvaluate(PoliceEvaluate policeEvaluate) {
        int result = personalResumeMapper.updateChiefEvaluate(policeEvaluate);
        return result;
    }
}

 controller

package com.ruoyi.web.controller.system;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.system.domain.PoliceEvaluate;
import com.ruoyi.system.service.IPersonalResumeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/system/personalresume")
public class PersonalResumeController extends BaseController {
    private String prefix = "system/personalresume";

    @Autowired
    private IPersonalResumeService personalResumeService;

    /*
     * 查詢案件信息列表
     */
    @GetMapping("/updatechiefevaluate")
    @ResponseBody
    public String updateChiefEvaluate(PoliceEvaluate policeEvaluate) {
        int result = personalResumeService.updateChiefEvaluate(policeEvaluate);
        if (result >= 1) {
            return "修改成功";
        } else {
            return "修改失敗";
        }
    }
}

 測試結果

表中數據也更新正常

備註:以上根據若依框架而來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章