MyBatis 教程

调用数据库函数

前面章节介绍了 MyBatis 怎样调用 MySQ 存储过程,本章节将介绍怎样调用函数。

(1)假设我们定义了一个名为 func_updateUserName 的函数,该函数接受两个参数。分别是 userId 和 userName。函数将根据 userId 修改用户名为 userName。SQL 脚本如下:

CREATE FUNCTION `func_updateUserName`(`userId` int,`userName` varchar(100)) RETURNS int(11)
BEGIN
    -- 声明一个变量
declare tname varchar(100);
    -- 更新用户名 
    update `user` set `name`=userName where user_id=userId;
    -- 查询刚才修改的用户信息,判断用户名是否修改成功
    select `name` into tname from `user` where user_id=userId;
    if tname=userName then
        return 1;
    else
        return 0;
    end if;
END

(2)MyBatis 配置文件 mybatis-cfg.xml 内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="database.properties"/>
    <environments default="MySqlDatabase" >
        <environment id="MySqlDatabase" >
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/hxstrive/mybatis/function/demo1/UserMapper.xml" />
    </mappers>
</configuration>

(3)定义 Mapper 接口文件 UserMapper.java,代码如下:

package com.hxstrive.mybatis.function.demo1;
import org.apache.ibatis.annotations.Param;

public interface UserMapper {
    /**
     * 更新用户名称
     * @param userId
     * @param userName
     */
    int updateUserName(@Param("userId") int userId, @Param("userName") String userName);
}

(4)定义 Mapper XML 文件 UserMapper.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.hxstrive.mybatis.function.demo1.UserMapper">
    <!-- 调用存储过程 -->
    <select id="updateUserName" resultType="INTEGER">
        select func_updateUserName(#{userId}, #{userName})
    </select>
</mapper>

(5)客户端代码如下:

package com.hxstrive.mybatis.function.demo1;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;

public class FunctionDemo {
    public static void main(String[] args) throws Exception {
        String cfgName = "com/hxstrive/mybatis/function/demo1/mybatis-cfg.xml";
        InputStream input = Resources.getResourceAsStream(cfgName);
        SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlFactory = factoryBuilder.build(input);
        SqlSession sqlSession = sqlFactory.openSession(true);
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        int result = userMapper.updateUserName(1, "Helen");
        System.out.println("result=" + result);
    }
}

执行成功后,自行查看数据库记录是否被修改。

注意:

使用 MyBatis 调用数据库函数和调用数据库内置函数方法一致,直接使用 select 语句进行调用。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号