Mybatis多个接口构成重载如何解决

entity:

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
    private String phone;
    private String address;
}

dao层的接口:

java 复制代码
    List<User> selectAll();
    //方法重载 不推荐使用 调用API,不使用代理可以
    List<User> selectAll(String name);

mapper.xml文件

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">
<!--
    namespace属性:指定当前mapper配置文件的唯一标识符,取值为对应接口的全名
-->
<mapper namespace="org.wanho.dao.UserDAO">
    <!--
        insert:用来执行添加操作
            id属性:表示当前的方法名,取值必须与接口中的方法名相同
            parameterType属性:表示方法的参数类型
                如果参数是对象,可以使用类的全名
                如果参数是普通数据,可以使用mybatis中的别名
            标签体:编写sql语句
                使用#{xxx}表示占位符
                如果参数是对象,则xxx为对象的属性
                如果参数是普通数据,则xxx为参数名
    -->

<!--  sql:定义sql代码块,便于复用
            id属性:指定该sql代码段的唯一标识符
        -->
    <sql id="baseColumn">
        id, username, password, phone, address
    </sql>

    <sql id="baseQuery">
        select <include refid="baseColumn"/> from t_user
    </sql>


    <insert id="insert" parameterType="User" useGeneratedKeys="true" keyProperty="id">
        insert into t_user (<include refid="baseColumn"/>)
        values (null,#{username}, #{password}, #{phone}, #{address})
    </insert>

    <update id="update">
        update t_user set username = #{username},
                          password = #{password},
                          phone = #{phone},
                          address = #{address}
        where id = #{id}
    </update>
    <select id="orderByColumn">
        <include refid="baseQuery"/> where 2=2
             order by ${id} desc
    </select>

    <select id="selectAll" resultType="User">
        <include refid="baseQuery"/>
    </select>

    <select id="selectAllByName" resultType="user">
        <include refid="baseQuery"/> where username like concat('%',#{username},'%')
    </select>
</mapper>

测试类:

java 复制代码
public class UserTest02 {
    private UserDAO userDAO;
    private SqlSession session;

    @Before
    public void before() {
        session = MybatisUtil.getSession();
        userDAO = session.getMapper(UserDAO.class);
    }  

  @Test
    public void selectAll() {
        userDAO = session.getMapper(UserDAO.class);
        List<User> userList = userDAO.selectAll();
        System.out.println("userList = " + userList);
    }

    @Test
    public void selectAllByName(){
        /**
         * 当dao层的方法构成重载的时候,不能通过指定id为方法名的方式进行配置,
         * 只能使用原生的sql执行该操作
         * 解决接口中的重载 ,直接调用 sqlSession 的 API
         */
        List<Object> th = session.selectList("org.wanho.dao.UserDAO.selectAll", "th");
        th.forEach(System.out::println);
    }
}

测试结果:

相关推荐
Amd7941 分钟前
Nuxt.js 应用中的 webpack:compiled 事件钩子
前端·webpack·开发·编译·nuxt.js·事件·钩子
生椰拿铁You10 分钟前
09 —— Webpack搭建开发环境
前端·webpack·node.js
喵叔哟18 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
狸克先生21 分钟前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
尘浮生24 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
baiduopenmap36 分钟前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
loooseFish44 分钟前
小程序webview我爱死你了 小程序webview和H5通讯
前端
郑祎亦1 小时前
Spring Boot 项目 myblog 整理
spring boot·后端·java-ee·maven·mybatis
不是二师兄的八戒1 小时前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
菜牙买菜1 小时前
让安卓也能玩出Element-Plus的表格效果
前端