当前位置: 首页 > news >正文

mybatis存储过程返回list

在MyBatis中调用存储过程并返回列表(List)通常涉及以下几个步骤:

  1. 定义存储过程:首先,在数据库中定义存储过程,并确保它返回结果集。
  2. 配置MyBatis映射文件:在MyBatis的映射文件中配置调用存储过程的SQL语句和返回类型。
  3. 编写Mapper接口:定义Mapper接口方法,该方法将调用存储过程并返回List。
  4. 调用Mapper方法:在Service层或Controller层调用Mapper接口方法。

以下是一个详细的示例:

1. 定义存储过程

假设我们有一个名为getUserList的存储过程,它返回用户表中的所有用户信息。

sql复制代码



DELIMITER //  
  
CREATE PROCEDURE getUserList()  
BEGIN  
    SELECT id, name, email FROM users;  
END //  
  
DELIMITER ;

2. 配置MyBatis映射文件

在MyBatis的映射文件(例如UserMapper.xml)中,配置调用存储过程的SQL语句和返回类型。

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.example.mapper.UserMapper">  
  
    <!-- 调用存储过程 -->  
    <select id="getUserList" resultType="com.example.domain.User">  
        {CALL getUserList()}  
    </select>  
  
</mapper>

3. 编写Mapper接口

在Mapper接口(例如UserMapper.java)中定义方法,该方法将调用存储过程并返回List。

java复制代码



package com.example.mapper;  
  
import com.example.domain.User;  
import org.apache.ibatis.annotations.Select;  
  
import java.util.List;  
  
public interface UserMapper {  
  
    @Select("CALL getUserList()")  // 也可以使用XML配置,这里只是为了展示注解方式  
    List<User> getUserList();  
}

4. 调用Mapper方法

在Service层或Controller层调用Mapper接口方法。

java复制代码



package com.example.service;  
  
import com.example.domain.User;  
import com.example.mapper.UserMapper;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;  
  
import java.util.List;  
  
@Service  
public class UserService {  
  
    @Autowired  
    private UserMapper userMapper;  
  
    public List<User> getAllUsers() {  
        return userMapper.getUserList();  
    }  
}

5. 配置MyBatis和Spring(可选)

如果你使用的是Spring框架,确保你已经正确配置了MyBatis和Spring的集成。这通常包括配置数据源、SqlSessionFactoryBean和Mapper扫描等。

xml复制代码



<!-- Spring配置文件示例 -->  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:context="http://www.springframework.org/schema/context"  
       xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"  
       xsi:schemaLocation="  
           http://www.springframework.org/schema/beans   
           http://www.springframework.org/schema/beans/spring-beans.xsd  
           http://www.springframework.org/schema/context   
           http://www.springframework.org/schema/context/spring-context.xsd  
           http://mybatis.org/schema/mybatis-spring   
           http://mybatis.org/schema/mybatis-spring.xsd">  
  
    <!-- 配置数据源 -->  
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">  
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>  
        <property name="url" value="jdbc:mysql://localhost:3306/yourdatabase"/>  
        <property name="username" value="yourusername"/>  
        <property name="password" value="yourpassword"/>  
    </bean>  
  
    <!-- 配置SqlSessionFactory -->  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource"/>  
        <property name="mapperLocations" value="classpath:mappers/*.xml"/>  
    </bean>  
  
    <!-- 扫描Mapper接口 -->  
    <mybatis-spring:scan base-package="com.example.mapper"/>  
  
</beans>

注意事项

  1. 存储过程权限:确保数据库用户有权限执行存储过程。
  2. MyBatis版本:确保你使用的MyBatis版本支持存储过程的调用。
  3. 返回类型:确保resultType与你的Java实体类匹配。

通过以上步骤,你应该能够成功地在MyBatis中调用存储过程并返回List。

相关文章:

  • DeepSeek系统架构的逐层分类拆解分析,从底层基础设施到用户端分发全链路
  • 芝加哥学派(Chicago School):金融与经济学的创新力量(中英双语)
  • 【LangChain实践开发】如何对大模型I/O封装?
  • 2026考研趋势深度解析:政策变化+高效工具指南
  • 利用SkinMagic美化MFC应用界面
  • Python网络运维自动化:从零开始学习NetDevOps
  • 深入理解正则表达式的预查
  • 数据融合的经典模型:早期融合、中期融合与后期融合的对比
  • Cursor助力Java开发
  • rust笔记4-属性derive
  • Vuex与其他状态管理库相比有什么优势?
  • 亲测!我是如何用 Anything LLM 等搭建 AI 智能知识库的
  • Java 设计模式之解释器模式
  • UGUI RectTransform的SizeDelta属性
  • ocr智能票据识别系统|自动化票据识别集成方案
  • 深入浅出:CUDA是什么,如何利用它进行高效并行计算
  • 大数据开发治理平台~DataWorks(词汇梳理)
  • Zipkin 和 SkyWalking 区别
  • Qt——静态函数中发送信号方法总结(不需要通过类内部信号与槽实现,关键是清楚你发送的信号源自哪个对象)
  • docker 安装的open-webui链接ollama出现网络错误
  • 上海优化营商环境十大攻坚突破任务中,为何第一项是实施世行对标改革?
  • 我国外汇储备规模连续17个月稳定在3.2万亿美元以上
  • 上海乐高乐园明天正式开售年卡,下月开启试运营
  • 默茨当选德国总理
  • 中演协:五一假期全国营业性演出票房收入同比增长3.6%
  • 市场监管总局通报民用“三表”专项检查结果