33.SpringBoot中Mybatis高度整合提高应用

额外:

现在写博客就是逼着自己多去总结,在以后的项目中少走弯路。

  • 公共类

1.BaseDao.java BaseService.java两个里面的内容都是一样的,都是对公共的方法用接口进行封装。一个用在持久化层,一个用在业务层,这里只写一个。

package org.niugang.dao;

import java.util.List;


/**
 * 
 * @Description:基础持久化类
 * @Project:boot-base 
 * @File:BaseDao.java 
 * @Package:org.niugang.dao 
 * @Date:2018年7月5日下午7:36:11
 * @author:niugang 
 * @Copyright (c) 2018, 863263957@qq.com All Rights Reserved. 
 *
 */
public interface BaseDao<T, S> {

List<T> getList(S s);
 
List<T> getListByPage(S s);
 
void insert(S s);
  
void delete(int id);

T getById(int id);
   
T get(S s);
 
int count(S s);
    
void update(S s);
}
  • 演示代码

针对 部门信息表 进行封装。

1.实体类

package org.niugang.dept.entity;


import java.util.Date;


/**
 * 
 * @Description:部门实体类
 * @Project:boot-sis 
 * @File:DeptEntity.java 
 * @Package:org.niugang.dept.entity 
 * @Date:2018年7月5日下午3:09:32
 * @author:niugang 
 * @Copyright (c) 2018, 863263957@qq.com All Rights Reserved. 
 *
 */
public class DeptEntity {
    /**
     * id
     */
private Integer id;
/**
* 部门名称
*/
private String deptName;
/**
* 父id
*/
private Integer parentId;
/**
* 层级编码
*/
private String code;
/**
* 删除标识
*/
private String deleteFlag;
/**
* 全拼
*/
private String quanPin;
/**
* 简拼
*/
private String jianPin;
private Date createTime;
private String creator;
private Date updateTime;
private String updator;
/**
* 版本号
*/
private Long version;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(String deleteFlag) {
this.deleteFlag = deleteFlag;
}
public String getQuanPin() {
return quanPin;
}
public void setQuanPin(String quanPin) {
this.quanPin = quanPin;
}
public String getJianPin() {
return jianPin;
}
public void setJianPin(String jianPin) {
this.jianPin = jianPin;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getUpdator() {
return updator;
}
public void setUpdator(String updator) {
this.updator = updator;
}
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}

}


2.Dao类

package org.niugang.dept.dao;
import org.niugang.dao.BaseDao;
import org.niugang.dept.bean.DeptQueryBean;
import org.niugang.dept.entity.DeptEntity;
import org.apache.ibatis.annotations.Mapper;


@Mapper
public interface DeptDao extends BaseDao<DeptEntity, DeptQueryBean> {

}

3.查询Bean

解释:查询bean主要是在DeptEntity上进行再次封装,用于查询参数传递,扩展其他字段。

package org.niugang.dept.bean;

import org.niugang.constant.CodeConstant;
import org.niugang.dept.entity.DeptEntity;

/**
 * 
 * @Description:部门查询bean
 * @Project:boot-sis 
 * @File:DeptQueryBean.java 
 * @Package:org.niugang.dept.bean 
 * @Date:2018年7月5日下午5:41:49
 * @author:niugang 
 * @Copyright (c) 2018, 863263957@qq.com All Rights Reserved. 
 *
 */
public class DeptQueryBean extends DeptEntity {
/**
* 页面
*/
private Integer pageNo = CodeConstant.DEFAULT_PAGE_NUMBER;
/**
* 分页大小
*/
private Integer pageSize = CodeConstant.DEFAULT_PAGE_SIZE;
/**
* 开始查询行
*/
private Integer startRecord;

/**
* 定义查询字段,在有些情况下并非所有的字段都查询,只查询给定字段
*/
private String[] queryField;


public Integer getPageNo() {
return pageNo;
}


public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}


public Integer getPageSize() {
return pageSize;
}


public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}


public Integer getStartRecord() {
return (pageNo - 1) * pageSize;
}


public void setStartRecord(Integer startRecord) {
this.startRecord = startRecord;
}


public  String[] getQueryField() {
return queryField;
}


public void setQueryField(String ...queryField) {
this.queryField = queryField;
}


}

高度整合,细细研究   

3.mapper文件

<?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.niugang.dept.dao.DeptDao">
<resultMap id="BaseResultMap"
type="org.niugang.dept.entity.DeptEntity">
<result column="c_id" property="id" />
<result column="c_dept_name" property="deptName" />
<result column="c_parent_id" property="parentId" />
<result column="c_code" property="code" />
<result column="c_delete_flag" property="deleteFlag" />
<result column="c_quanpin" property="quanPin" />
<result column="c_jianpin" property="jianPin" />
<result column="c_createtime" property="createTime" />
<result column="c_creator" property="creator" />
<result column="c_updatetime" property="updateTime" />
<result column="c_updator" property="updator" />
<result column="c_version" property="version" />

</resultMap>
   
<!--查询字段 -->
<sql id="Base_Column_List">
<choose>
<!--只查询给定字段 -->
<when test="queryField!=null">
<foreach collection="queryField" separator="," item="item">
<if test="item!=null and item!=''">
   <!--这里只能用${},因为${}是指传什么就用什么,而#{}是根据传的调用起get..方法 -->
${item}
</if>
</foreach>
</when>
<!--查询全部字段 -->
<otherwise>
c_id,
c_dept_name,
c_parent_id,
c_code,
c_delete_flag,
c_quanpin,
c_jianpin,
c_createtime,
c_creator,
c_updatetime,
c_updator,
c_version
</otherwise>
</choose>


</sql>
<!-- 查询条件 -->
<sql id="queryCondition">
<where>
<if test="id!=null">
and c_id=#{id}
</if>
<if test="deptName!=null and deptName!=''">
and c_dept_name like "%"#{deptName}"%"
</if>
<if test="parentId!=null and parentId!=''">
and c_parent_id =#{parentId}
</if>
<if test="code!=null and code!=''">
and c_code like "%"#{code}"%"
</if>
<if test="deleteFlag!=null and deleteFlag!=''">
and c_delete_flag=#{deleteFlag}
</if>
<if test="quanPin!=null and quanPin!=''">
and c_quanpin like "%"#{quanPin}"%"
</if>
<if test="jianPin!=null and jianPin!=''">
and c_jianpin like "%"#{jianPin}"%"
</if>
<if test="createTime!=null and createTime!=''">
and c_createtime=#{createTime}
</if>
<if test="creator!=null and creator!=''">
and c_creator=#{creator}
</if>
<if test="updateTime!=null and updateTime!=''">
and c_updatetime=#{updateTime}
</if>
<if test="version!=null and version!=''">
and c_version=#{version}
</if>
</where>
</sql>
<!--分页查询条件 -->
<sql id="limitCoddition">
order by c_id desc limit
<choose>
<when test="startRecord!=null and startRecord!=''">
#{startRecord},
</when>
<otherwise>
0,
</otherwise>
</choose>
<choose>
<when test="pageSize!=null and pageSize!=''">
#{pageSize}
</when>
<otherwise>
10
</otherwise>
</choose>
</sql>
<!--查询集合 -->
<select id="getList" resultMap="BaseResultMap" 
parameterType="org.niugang.dept.bean.DeptQueryBean">
select
<include refid="Base_Column_List" />
from t_boot_dept 
<include refid="queryCondition" />
</select>


<!--分页查询 -->
<select id="getListByPage" resultMap="BaseResultMap"
parameterType="org.niugang.dept.bean.DeptQueryBean">
select
<include refid="Base_Column_List" />
from t_boot_dept
<include refid="queryCondition" />
<include refid="limitCoddition" />
</select>
<!--插入 -->
<insert id="insert"
parameterType="org.niugang.dept.bean.DeptQueryBean">
<!-- mysql数据库自增 -->
<selectKey resultType="java.lang.Integer" order="AFTER"
keyProperty="id" keyColumn="c_id">
SELECT LAST_INSERT_ID() AS id
</selectKey>
INSERT INTO `t_boot_dept` (
<trim suffixOverrides=",">
<!--字符串类型需要判断是否为'' -->
<!--对象只需要判断是否为空 -->
<if test="deptName!=null and deptName!=''">
`c_dept_name`,
</if>
<if test="parentId!=null">
`c_parent_id`,
</if>
<if test="code!=null and code!=''">
`code`,
</if>
<if test="deleteFlag!=null and deleteFlag!=''">
`c_delete_flag`,
</if>
<if test="quanPin!=null and quanPin!=''">
`c_quanpin`,
</if>
<if test="jianPin!=null and jianPin!=''">
`c_jianpin`,
</if>
`c_createtime`,
<if test="creator!=null and creator!=''">
`c_creator`,
</if>
<if test="updateTime!=null">
`c_updatetime`,
</if>
<if test="updator!=null and updator!=''">
`c_updator`,
</if>
<if test="version!=null">
`c_version`
</if>
</trim>
)
VALUES
(
<trim suffixOverrides=",">
<if test="deptName!=null and deptName!=''">
#{deptName},
</if>
<if test="parentId!=null">
#{parentId},
</if>
<if test="code!=null and code!=''">
#{code},
</if>
<if test="deleteFlag!=null and deleteFlag!=''">
#{deleteFlag},
</if>
<if test="quanPin!=null and quanPin!=''">
#{quanPin},
</if>
<if test="jianPin!=null and jianPin!=''">
#{jianPin},
</if>
NOW(),
<if test="creator!=null and creator!=''">
#{creator},
</if>
<if test="updateTime!=null">
#{updateTime},
</if>
<if test="updator!=null and updator!=''">
#{updator},
</if>
<if test="version!=null">
#{version}
</if>
</trim>
)


</insert>
<!--删除 -->
<delete id="delete" parameterType="int">
delete from t_boot_dept where
c_id =#{id}
</delete>


<!--根据主键查询 -->
<select id="getById" parameterType="int"
resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from t_boot_dept
where c_id =#{id}
</select>


<!--查询单个对象 -->
<select id="get"
parameterType="org.niugang.dept.bean.DeptQueryBean"
resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from t_boot_dept
<include refid="queryCondition" />
</select>


<!--查询数量 -->
<select id="count"
parameterType="org.niugang.dept.bean.DeptQueryBean" resultType="int">
select count(*) from t_boot_dept
<include refid="queryCondition" />
</select>


<!--更新 -->
<update id="update"
parameterType="org.niugang.dept.bean.DeptQueryBean">
<if test="id!=null">
update t_boot_dept
<trim prefix="set" suffixOverrides=",">
<if test="deptName!=null and deptName!=''">
c_dept_name=#{deptName},
</if>
<if test="parentId!=null and parentId!=''">
c_parent_id=#{parentId},
</if>
<if test="code!=null and code!=''">
c_code=#{code},
</if>
<if test="deleteFlag!=null and deleteFlag!=''">
c_delete_flag=#{deleteFlag},
</if>
<if test="quanPin!=null and quanPin!=''">
c_quanpin=#{quanPin},
</if>
<if test="jianPin!=null and jianPin!=''">
c_jianpin=#{jianPin},
</if>
<if test="createTime!=null">
c_createtime=#{createTime},
</if>
<if test="creator!=null and creator!=''">
c_creator=#{creator},
</if>
c_updatetime=now(),
<if test="version!=null and version!=''">
c_version=#{version}
</if>
</trim>
where c_id=#{id}
</if>
</update>
</mapper>

 微信公众号

 

 

原文地址:https://www.cnblogs.com/niugang0920/p/12190450.html