首页 > 其他分享 >Mybatis 升级 Mybatis Plus 重写 Mybatis Plus selectList,如果将参数传到 Mapp.xml 中

Mybatis 升级 Mybatis Plus 重写 Mybatis Plus selectList,如果将参数传到 Mapp.xml 中

时间:2024-12-19 13:53:39浏览次数:3  
标签:xml ActivityTracking activityTracking pageParam Plus Mybatis public

目录
Mybatis 升级 Mybatis Plus
将实体做为条件参数 带到Mapp.xml 中的自定义SQL

Mybatis 写法

通过 pagehelper 进行分页

Entity

public class ActivityTracking  implements Serializable {

    private static final long serialVersionUID = -1794277981889967750L;

    /**
     *主健ID
     */
    private String  id;
    /**
     *行为类型编码
     */
    private String  typeCode;
    /**
     *行为类型名称
     */
    private String  typeName;
    /**
     *行为方式(Add、Update、Delete)
     */
    private String  activityMethodCode;
    /**
     *行为方式(新增、修改、删除)
     */
    private String  activityMethodName;

    ......get\set
}

Mapper

@Repository
public interface ActivityTrackingMapper {

    /**
     * 获取 日志列表
     *
     * @return
     */
    List<ActivityTracking> list(ActivityTracking activityTracking);
}

Service

import com.github.pagehelper.PageInfo;
import com.vipsoft.api.base.entity.ActivityTracking;
import com.vipsoft.api.base.util.PageParam;

public interface IActivityTrackingService { 
    /**
     * 获取 日志列表
     *
     * @return
     */
    PageInfo list(PageParam pageParam, ActivityTracking activityTracking);

}



@Service
public class ActivityTrackingServiceImpl implements IActivityTrackingService {
    /**
     * 获取 日志列表
     *
     * @param pageParam
     * @return
     */
    @Override
    public PageInfo list(PageParam pageParam, ActivityTracking activityTracking) {
        PageHelper.startPage(pageParam);
        List<ActivityTracking> activityTrackingList = trackingMapper.list(activityTracking);
        return new PageInfo(activityTrackingList);
    }

}

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.vipsoft.api.base.bisiness.mapper.ActivityTrackingMapper">
    <resultMap id="BaseResultMap" type="com.vipsoft.api.base.entity.ActivityTracking">
        <id column="id" property="id" jdbcType="VARCHAR"/>
        <result column="type_code" property="typeCode" jdbcType="VARCHAR"/>
        <result column="type_name" property="typeName" jdbcType="VARCHAR"/>
        <result column="activity_method_code" property="activityMethodCode" jdbcType="VARCHAR"/>
        <result column="activity_method_name" property="activityMethodName" jdbcType="VARCHAR"/>
        <result column="business_table" property="businessTable" jdbcType="VARCHAR"/>
        <result column="business_table_key" property="businessTableKey" jdbcType="VARCHAR"/>
        ....
    </resultMap>

    <select id="list" resultType="com.vipsoft.api.base.entity.ActivityTracking">
        select * from sys_activity_tracking
        <where>
            <if test="typeName != null and typeName != ''">
                AND type_name = #{typeName,jdbcType=VARCHAR}
            </if>
            <if test="businessKey != null and businessKey != ''">
              AND business_key = #{businessKey,jdbcType=VARCHAR}
            </if>
        </where>
    </select>
</mapper>

Test


@SpringBootTest
public class DemoTest {
    Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private IActivityTrackingService activityTrackingService;

    @Test
    void listTest() {
        ActivityTracking activityTracking = new ActivityTracking();
        activityTracking.setTypeName("A"); //将条件传到 Mapper.xml 中,构建SQL
        PageParam pageParam = new PageParam();
        pageParam.setPageNum(1);
        pageParam.setPageSize(10);
        PageInfo pageList = activityTrackingService.list(pageParam, activityTracking);
        logger.info("List: {}", JSON.toJSON(pageList));
    }
}

Mybatis Plus

Mybatis 不用自定义SQL的话,可以不用 Mapper.xml

Entity

不需要改变。如果使用框架方法,需要加上 @TableName、@TableId、@TableField 等属性

Mapper

//@Repository  使用 Mybatis Plus 可以不用 @Repository
public interface ActivityTrackingMapper extends BaseMapper<ActivityTracking> {
  //page对应的 selectList 方法,所以 XML中的 select id 名称要写对
}

Service

public interface IActivityTrackingService extends IService<ActivityTracking> {
    //不需要定义接口,使用框架中的服务接口 => page
}

@Service
public class ActivityTrackingServiceImpl extends ServiceImpl<ActivityTrackingMapper, ActivityTracking> implements IActivityTrackingService {
    //不需要实现
}

Mapper.xml

ew.entity.typeName 这步是重点。不这样写,取不到前面的参数

<!-- selectList  这边的ID 不能写错,否则就不能重写框架的实现了 -->
<select id="selectList" resultType="com.vipsoft.api.base.entity.ActivityTracking">
    select * from sys_activity_tracking
    <where>
        <if test="ew.entity.typeName != null and ew.entity.typeName != ''">
            AND type_name = #{ew.entity.typeName,jdbcType=VARCHAR}
        </if>
        <if test="ew.entity.businessKey != null and ew.entity.businessKey != ''">
            AND business_key = #{ew.entity.businessKey,jdbcType=VARCHAR}
        </if>
    </where>
</select>

Test


@SpringBootTest
public class DemoTest {
    Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private IActivityTrackingService activityTrackingService;

    @Test
    void plusListTest() {
        // 这一步是重点。配合XML中的。ew.entity.typeName 取值
        ActivityTracking activityTracking = new ActivityTracking();
        activityTracking.setTypeName("A"); //将条件传到 Mapper.xml 中,构建SQL
        QueryWrapper<ActivityTracking> queryWrapper = new QueryWrapper<>(activityTracking);
        // 如果用自定义SQL.不能以这种形式传参,否则会报  org.apache.ibatis.ognl.NoSuchPropertyException: com.baomidou.mybatisplus.core.conditions.query.QueryWrapper.XXX
        // queryWrapper.like("type_name", "A");
        Page page = new Page(1, 10);
        IPage pageList = activityTrackingService.page(page, queryWrapper);
        logger.info("List: {}", JSON.toJSON(pageList));
    }
}

标签:xml,ActivityTracking,activityTracking,pageParam,Plus,Mybatis,public
From: https://www.cnblogs.com/vipsoft/p/18616924

相关文章

  • Java-30 深入浅出 Spring - IoC 基础 启动IoC 纯XML启动 Bean、DI注入
    点一下关注吧!!!非常感谢!!持续更新!!!大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html目前已经更新到了:MyBatis(已更完)Spring(正在更新…)上节进度上节我们完成了启动IoC容器的部分。下面我们续接上节的内容,继续后续的内容。纯XML模式采用S......
  • Element Plus组件库el-select组件多选回显踩坑
    前情公司有经常需要做一些后台管理页面,我们选择了ElementPlus,它是基于Vue3,面向设计师和开发者的组件库,是Vue框架生态中比较火的UI组件库,组件库丰富易用,组件链接:一个Vue3UI框架|ElementPlus,项目中经常会用到el-select多选功能,组件自带的多选交互也是非常棒的,标签回显示......
  • MyBatis
    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(PlainOldJavaObjects)映射成数据库中的记录。1.......
  • MyBatis ORM映射方式详解
    在现代的Java应用开发中,ORM(Object-RelationalMapping,对象关系映射)框架是不可或缺的一部分。MyBatis作为一种灵活且强大的ORM框架,因其能够直接操作SQL语句而受到许多开发者的青睐。1.MyBatis简介MyBatis是一个持久层框架,它通过XML描述符或注解将Java对象与数据库记录进行......
  • 探索PakePlus:解锁跨平台应用的新方式
    PakePlus是一个非常实用的开源项目哦,它有着独特又强大的功能,那就是可以将网页轻松转换为桌面应用以及移动应用呢。并且它支持多平台使用,无论是Mac、Windows,还是Linux系统,它都能很好地适配,而且很快也会支持Android和iOS系统啦,覆盖面可以说是相当广泛了。它的背后是由R......
  • 基于Spring Boot + SSM(Spring + Spring MVC + MyBatis)+Vue+MySQL实现一个简单的用户管
    后端代码(SpringBoot+SSM部分)1.创建SpringBoot项目使用SpringInitializr(可以通过IDEA等IDE自带的创建SpringBoot项目功能,或者访问Spring官网的Initializr页面)创建一个基础的SpringBoot项目,添加相关依赖,比如Web(用于构建Web应用)、MyBatis、MyBatisSpringBootStarter、My......
  • XPath用于在XML和HTML文档中提取和操作数据
    一、概述XPath(XMLPathLanguage)是一门在XML文档中查找信息的语言,它也可用于HTML文档,因为HTML可以看作是XML的一种特殊形式。XPath通过路径表达式来选取XML/HTML文档中的节点或者节点集。二、节点类型在XPath中,有多种节点类型,主要包括以下几种:元素节点:这是最常见的节点类型,例......
  • 【bWAPP】XML&XPath Injection实战
    人生最大的悲剧就是:你配不上自己的野心,也辜负了所受的苦难前言XML注入XXE-“xmlexternalentityinjection”,即“xml外部实体注入漏洞”。概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"也就是说服务端接收......
  • C# 读取xml文档并传值给公共类属性
    Publicfilepublicfile=newPublicfile();try{stringfilePath=Path.Combine("C:?",fileName);if(!File.Exists(filePath)){WriteErrorLog(......
  • MyBatis Generator安装详细步骤
    1.准备工作确保你的系统已经安装了Java开发环境(JDK),并且配置好了相关的环境变量。因为MyBatisGenerator是一个Java工具,它依赖于Java运行环境来执行。你可以在命令行中输入java-version来检查JDK是否正确安装。2.添加依赖Maven项目如果你的项目是使用Maven构建的,需要在......