MyBatis-Plus具体的查询返回语句编写 :
List<Employer> Employers = this.list(new QueryWrapper<Employer>().eq("id", Id).isNotNull("dept"));
利用MyBatis-Plus 需要对QueryWrapper<T> 泛型里传一个实体类 且该实体类在数据库中有相应的表结构。
如下为该实体类的编写实例:
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("biz_employer")
public class BizEmployer extends Model<BizEmployer> {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 姓名
*/
@Excel(name = "姓名",width = 25)
private String name;
/**
* 性别
*/
private Integer sex;
@TableField(exist = false)
@ApiModelProperty(value="性别")
private String sexStr;
@TableField(exist = false)
@ApiModelProperty(value="年龄")
private String age;
@Excel(name = "",width = 25)
@TableField("id_card")
@ApiModelProperty(value="")
private String idCard;
/**
* 人员类型
* 0-未知类型, 1-从业人员,2-监理,3-管理人员
*/
private Integer type;
/**
* 联系电话
*/
@Excel(name = "电话",width = 25)
@ApiModelProperty(value="")
private String phone;
/**
* 部门
*/
@Excel(name = "班组/部门", width = 25)
@ApiModelProperty(value="")
private String dept;
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate birthday;
@TableField("person_location_no")
@Excel(name = "定位标签",width = 25)
private String personLocationNo;
@TableField("exit_system_no")
private String exitSystemNo;
@Excel(name = "",width = 25)
@ApiModelProperty(value="")
private String job;
@TableField("img")
private String img;
//录入日期
@TableField("create_time")
@ApiModelProperty(value = "")
@JsonFormat(pattern = "yyyy年MM月dd日",timezone = "GMT+8")
private LocalDate createTime;
@TableField("")
private Integer tunnelId;
@TableField(exist = false)
private String tunnelName;
private String duan;
@Excel(name = "", width = 50)
@TableField(exist = false)
private String errorInfo;
@TableField(exist = false)
@ApiModelProperty(value = "")
private String exitInfo;
@TableField(exist = false)
@ApiModelProperty(value = "")
private String enterTime;
@TableField(exist = false)
@ApiModelProperty(value = "")
private String exitTime;
@TableField(exist = false)
@ApiModelProperty(value = "")
private String workHour;
@Override
protected Serializable pkVal() {
return this.id;
}
}
集合引用的赋值 利用this关键字。QueryWrapper封装的查询语句 其编写格式固定 字段名对应传参参数名
isNotNull为附加条件,意为同时‘ dept ’该字段不为空。
再次遇见map.entry,较之前未能理解通透——
Set、Map是java中的接口,Map.Entry是Map的一个内部接口。
Map提供了一些常用方法,如keySet()、entrySet()等方法
Set<String> set = new HashSet<String>();
//一开始这样的编写 实质就是多态 包括map
以下是还未接触的map方法,在项目中看见过:
第一种:普遍使用,二次取值
System.out.println("通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}
第二种是在容量大时,比如我所参与的这个项目
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
示例:
for (Map.Entry<String, List<Employer>> entry : map.entrySet()) {
List<Employer> ems = entry.getValue();
EmployDemo.EmployerRatio ratio = new EmployDemo.EmployerRatio()
.setName(entry.getKey())
.setCount(ems.size())
.setPercent(NumberUtil.round(Double.valueOf(ems.size()*100) / Double.valueOf(total), 2).doubleValue());
ratios.add(ratio);
}
第四种——遍历所有的value,但不能遍历key
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value= " + v);
}
公司项目中会看见很多lambda表达式 学会写lambda表达式会节省很多时间且精简代码 但可读性差:
示例:
//有部门信息的人员
List<BizEmployer> bizEmployers = this.list(new QueryWrapper<BizEmployer>().eq("tunnel_id", tunnelId).isNotNull("dept"));
//按部门分组
Map<String, List<BizEmployer>> mapByDept = bizEmployers.stream().collect(Collectors.groupingBy(BizEmployer::getDept));
以上是将list中实体类按照指定属性聚类进行map封装,如果不用lambda表达式来编写 会很麻烦。
其达到的作用即——那个部门有多少人。