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 "修改失败";
        }
    }
}

 测试结果

表中数据也更新正常

备注:以上根据若依框架而来

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