以医生表,通过名称查询医生信息为例
一、确定返回的字段信息
1、类名称
DoctorReqVo.java
2、位置
jeecg-boot-base-common/src/main/java/org.jeecg.common/modules/doctor/vo/
3、细节
package org.jeecg.common.modules.doctor.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.math.BigDecimal;
/**
* 医生信息返回类
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "xml")
public class DoctorReqVo {
private String id; //医生id
private String name; //姓名
private String mobile; //手机号
}
二、编辑mapper,执行业务操作
1、编辑xml
(1)类名称
DoctorMapper.xml
(2)位置
jeecg-boot-base-common/src/main/java/org.jeecg.common/modules/doctor/mapper/xml/
(3)细节
<?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="org.jeecg.common.modules.doctor.mapper.DoctorMapper">
<!--【一】结果映射集 :数据表字段和返回结果的一一对应关系-->
<resultMap id="doctorMap" type="org.jeecg.common.modules.doctor.vo.DoctorReqVo" >
<id column="id" property="id" jdbcType="VARCHAR" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="mobile" property="mobile" jdbcType="VARCHAR" />
</resultMap>
<!--【二】查询的SQL -->
<select id="doctorInfo" resultMap="doctorMap" >
SELECT id,name,mobile FROM doctor
<include refid="Where" />
<include refid="Limit" />
</select>
<!--查询医生总数-->
<select id="doctorInfoCount" resultType="int" >
SELECT
COUNT(*)
FROM doctor
<include refid="Where" />
</select>
<!--【三】where条件-->
<sql id="Where" >
<where>
<if test="name != null" >
and name like concat('%',#{name},'%')
</if>
</where>
</sql>
<!--【三】limit分页处理-->
<sql id="Limit" >
<if test="dataStart != null and pageSize != null" >
limit ${dataStart}, ${pageSize}
</if>
</sql>
细节解析
【一】结果映射集
<resultMap id="result" type="xx/xx"></resultMap>
- ① 结构
参数 | 描述 |
---|---|
id | 定义映射集的唯一名称,方便被执行的SQL调用 |
type | 定义返回字段的类的命名空间 |
- ② 组成元素
<id/>
<result/>
参数 | 描述 |
---|---|
id | 主键映射关系(定义主键的对应关系) |
result | 非主键字段的映射关系 |
- ③ id、result的属性配置
<id column="id" property="id" jdbcType="VARCHAR" />
<result column="sex" property="sex" jdbcType="VARCHAR" />
参数 | 描述 |
---|---|
column | 数据表字段的名称 |
property | 需要返回到列表的属性名称(也就是返回数据的 键或下标) |
jdbcType | 数据表字段的类型 |
数据表字段类型还有一种属性:javaType
详见:jdbcType 和 javaType的对应关系
【二】执行查询的SQL
- ① 结构
<select id="select" resultMap="result" >
......
<include refid="where" />
</select>
- ② 属性含义
参数 | 描述 |
---|---|
id | SQL的唯一名称,方便被mapper类调用 |
resultMap | 映射集的名称 |
参数 | 描述 |
---|---|
refid | 子SQL(where条件)的名称 |
【三】子SQL的调用
示例查询:
<sql id="where" >
<where>
<if test="name != null" >
and name = #{name,jdbcType=VARCHAR}
或
and name like concat('%',#{name},'%')
</if>
</where>
</sql>
2、调用xml
(1)类名称
DoctorMapper.java
(2)位置
jeecg-boot-base-common/src/main/java/org.jeecg.common/modules/doctor/mapper
(3)调用
package org.jeecg.common.modules.doctor.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.common.modules.doctor.entity.Doctor;
import org.jeecg.common.modules.doctor.vo.AssistantInfoReqVo;
import org.jeecg.common.modules.doctor.vo.CertInfoReqVo;
import org.jeecg.common.modules.doctor.vo.DoctorReqVo;
import java.util.List;
/**
* @Description: 医生表
*/
public interface DoctorMapper extends BaseMapper<Doctor> {
/**
* 查询医生信息
* @param name
* @param dataStart
* @param pageSize
* @return
*/
List<DoctorReqVo> doctorInfo(
@Param("name") String name,
@Param("dataStart") Integer dataStart,
@Param("pageSize") Integer pageSize);
/**
* 查询的总条数
* @param name
* @return
*/
Integer doctorInfoCount(@Param("name") String name);
}
三、service操作
1、定义查询接口
(1)类名称
IDoctorService.java
(2)位置
jeecg-boot-base-common/src/main/java/org.jeecg.common/modules/doctor/service/
(3)细节
package org.jeecg.common.modules.doctor.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.modules.doctor.entity.Doctor;
import org.jeecg.common.modules.doctor.vo.AssistantInfoReqVo;
import org.jeecg.common.modules.doctor.vo.CertInfoReqVo;
import org.jeecg.common.modules.doctor.vo.DoctorReqVo;
import org.jeecg.common.util.enums.CertificationStatusEnum;
import java.util.List;
/**
* @Description: 医生表
*/
public interface IDoctorService extends IService<Doctor> {
/**
* 查询医生信息
* @param name
* @param dataStart
* @param pageSize
* @return
*/
List<DoctorReqVo> doctorInfo(String name, Integer dataStart, Integer pageSize);
/**
* 查询数据总数
* @param name
* @return
*/
Integer doctorInfoCount(String name);
}
2、实现查询接口
(1)类名称
DoctorServiceImpl.java
(2)位置
jeecg-boot-base-common/src/main/java/org.jeecg.common/modules/doctor/service/impl/
(3)细节
package org.jeecg.common.modules.doctor.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.modules.doctor.entity.Doctor;
import org.jeecg.common.modules.doctor.mapper.DoctorMapper;
import org.jeecg.common.modules.doctor.service.IDoctorService;
import org.jeecg.common.modules.doctor.vo.AssistantInfoReqVo;
import org.jeecg.common.modules.doctor.vo.CertInfoReqVo;
import org.jeecg.common.modules.doctor.vo.DoctorReqVo;
import org.jeecg.common.util.enums.BusinessTypeEnum;
import org.jeecg.common.util.enums.CertificationStatusEnum;
import org.jeecg.common.util.enums.StatusEnum;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* @Description: 医生表
*/
@Slf4j
@Service
public class DoctorServiceImpl extends ServiceImpl<DoctorMapper, Doctor> implements IDoctorService {
@Resource
private DoctorMapper doctorMapper; //声明mapper
@Override
public List<DoctorReqVo> doctorInfo(String name, Integer dataStart, Integer pageSize) {
return doctorMapper.doctorInfo(name,dataStart,pageSize);
}
@Override
public Integer doctorInfoCount(String name) {
return doctorMapper.doctorInfoCount(name);
}
四、定义(分页)返回的数据格式
1、类名称
ResultVo.java
2、位置
jeecg-boot-base-system/src/main/java/org.jeecg/modules/system/vo/
3、细节
package org.jeecg.modules.system.vo;
import lombok.Data;
import java.util.List;
@Data
public class ResultVo {
private int current; //当前页码
private boolean hitCount = false;
private boolean optimizeCountSql = true;
private List<?> orders;
private int pages; //分页的页码总数量
private List<?> records; //返回的列表数据
private boolean searchCount = true;
private int size; //每页显示的数据条数
private int total; //返回查询的数据总条数
}
五、控制器请求
1、类名称
DoctorController.java
2、位置
jeecg-boot-base-system/src/main/java/org.jeecg/modules/doctor/
3、细节
package org.jeecg.modules.doctor;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.modules.doctor.entity.Doctor;
import org.jeecg.common.modules.doctor.service.IDoctorService;
import org.jeecg.common.modules.doctor.vo.DoctorReqVo;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.system.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
/**
* @Description: 医生表
*/
@Api(tags="医生表")
@RestController
@RequestMapping("/doctor/doctor")
@Slf4j
public class DoctorController extends JeecgController<Doctor, IDoctorService> {
@Autowired
private IDoctorService doctorService;
/**
* 【一】通过name查询数据
*
* @return
*/
@AutoLog(value = "doctor-通过name查询")
@ApiOperation(value="doctor-通过name查询", notes="doctor-通过name查询")
@GetMapping(value = "/query")
public Result<?> query(Doctor doctor,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
//数据开始的记录数
int dataStart = (pageNo - 1) * pageSize;
//查询符合条件的数据集
String name = req.getParameter("name");
List<DoctorReqVo> doctorReqVos = doctorService.doctorInfo(name,dataStart,pageSize);
//查询到的总数据数
Integer count = doctorService.doctorInfoCount(name);
//组合分页展示的数据
ResultVo vo = this.initResultVo(doctorReqVos,count,pageNo,pageSize);
return Result.ok(vo);
}
/**
* 【二】组合返回的信息
* @param certInfoReqVos
* @param pageNo
* @param pageSize
* @return
*/
private ResultVo initResultVo(List vos, Integer count,Integer pageNo, Integer pageSize){
ResultVo vo = new ResultVo();
double dCount = Double.valueOf(count); //查询的数据总条数
double dPageSize = Double.valueOf(pageSize); //每页显示的条数
int pages = (int) Math.ceil(dCount / dPageSize);//页码数量
vo.setCurrent(pageNo);
vo.setOrders(new ArrayList<>());
vo.setRecords(vos);
vo.setPages(pages);
vo.setSize(pageSize);
vo.setTotal(count);
return vo;
}