mybatis如何直接执行传入的任意sql语句,并按照顺序取出查询的结果集

需求:

  在连接数据库的单元测试时,极可能为测试某个测试点需提前准备对应的测试数据,这时,就需要对数据库表进行初始化。在执行完测试后,有时也需要查询数据库表来验证是不是正常入库。且为了保持测试的校验完整性和现有的功能代码分开,应有自已的sqlmap和dao。

  1.直接执行前端传来的任何sql语句,parameterType="String",

  2.对于任何sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回具体的bean类型,因此设置resultType="java.util.Map",但是Map并不保证存入取出顺序一致,

  因此设置resultType="java.util.LinkedHashMap",为保证查询的字段值有序(存入与取出顺序一致)所以采用LinkedHashMap。

mapper的接口方法:

 

import java.util.LinkedHashMap;
import java.util.List;

public interface JunitBaseDao {
    
    List<LinkedHashMap<String, Object>> select(String sql);
    int insert(String sql);
    int update(String sql);
    int delete(String 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="cn.webank.wfts.dao.JunitBaseDao" >

  <select id="select" parameterType="java.lang.String" resultType="java.util.LinkedHashMap">
  	${value}
  </select>
  
  <insert id="insert" parameterType="java.lang.String">
  	${value}
  </insert>
  
  <update id="update" parameterType="java.lang.String">
  	${value}
  </update>
  
  <delete id="delete" parameterType="java.lang.String">
    ${value}
  </delete>
</mapper>

 

参考文章:https://www.cnblogs.com/wuyun-blog/p/5769096.html

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MyBatis 中,可以使用 `Mapper` 接口或者 `SqlSession` 直接执行多条 SQL 语句。 1. Mapper 接口方式 如果你使用的是 `Mapper` 接口方式,那么可以在 Mapper 接口中定义多个方法,每个方法对应一个 SQL 语句。然后在 Java 代码中调用这些方法即可执行多条 SQL 语句。 例如: ``` public interface UserMapper { void insertUser(User user); void updateUser(User user); void deleteUser(int userId); } ``` 在 Java 代码中,可以依次调用这三个方法来执行多条 SQL 语句: ``` UserMapper mapper = sqlSession.getMapper(UserMapper.class); mapper.insertUser(user); mapper.updateUser(user); mapper.deleteUser(userId); ``` 2. SqlSession 方式 如果你使用的是 `SqlSession` 方式,那么可以调用 `SqlSession` 的 `selectList` 方法来执行多条 SQL 语句。在这个方法中,可以传入一个包含多条 SQL 语句的 XML 文件,并且在每条 SQL 语句之间使用分号分隔。 例如,假设你的 XML 文件名为 `multiSql.xml`,内容如下: ``` <sql> INSERT INTO user (name, age) VALUES ('John', 25); </sql> <sql> UPDATE user SET name = 'Peter' WHERE age = 25; </sql> ``` 那么在 Java 代码中,可以这样调用 `selectList` 方法来执行这两条 SQL 语句: ``` String statement = "multiSql"; sqlSession.selectList(statement); ``` 注意,在使用 `SqlSession` 执行多条 SQL 语句时,需要将 `ExecutorType` 设置为 `BATCH`,这样可以让 MyBatis 将多个 SQL 语句一起提交到数据库中,从而提高执行效率。例如: ``` SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值