zoukankan      html  css  js  c++  java
  • 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>

     微信公众号

     

     

  • 相关阅读:
    2020.4.10个人总结
    CG-CTF simple machine
    CG-CTF Our 16bit wars
    CG-CTF Our 16bit Games
    CG-CTF single
    CG-CTF WxyVM2
    Go Channel 详解
    Go语言TCP Socket编程
    golang mysql demo
    YouCompleteMe unavailable: requires Vim compiled with Python 2.x support
  • 原文地址:https://www.cnblogs.com/niugang0920/p/12190450.html
Copyright © 2011-2022 走看看