mybatis 插入 map ORACLE

本文介绍了一种前端直接将参数以Map形式传递到后端的方法,后端利用Spring的webUtils工具进行参数转换,并通过MyBatis实现数据库的批量插入或更新操作。详细展示了Mapper文件中如何使用foreach和if标签来动态构建SQL语句。

前端传入参数,后端没有写bean, 主要是懒的写 。 直接用map接收插入数据库。

controller层使用sring的webUtils工具接收参数转为map. 接收后在存一次,方便在mapper中遍历

 

dao层:

 

 

mybatis:  存在则更新,不存在则删除。  jjdbh为主键

<insert id="batchAdd" parameterType="map">
		MERGE INTO tables ju
		using
		(
		   select
		   <foreach collection="map" index="key" item="value" separator=",">
		      #{value, jdbcType=VARCHAR} ${key}
		   </foreach>
		   from dual
		) t1 on (ju.jjdbh = t1.jjdbh) when matched then update set
		<foreach collection="map" index="key" item="value" separator=",">
			<if test=" key != 'jjdbh'">
			 ju.${key} = t1.${key}
			</if>
		</foreach>
		when not matched then insert (
		<foreach collection="map" index="key" item="value" separator=",">
		  ${key}
		</foreach>
		)values
		(
		<foreach collection="map" index="key" item="value" separator=",">
		  #{value, jdbcType=VARCHAR} 
		</foreach>
		)
	</insert>

 

MyBatis 中实现对 Oracle 数据库的分页查询,主要依赖于 SQL 语句的编写以及分页逻辑的控制。Oracle 数据库不支持 `LIMIT` 和 `OFFSET` 语法,因此需要使用其特有的分页方式,通常是通过 `ROWNUM` 实现。 ### 使用手动 SQL 实现 Oracle 分页 在 MyBatis 的 XML 映射文件中,可以通过编写自定义 SQL 查询语句实现分页。以下是一个典型的 Oracle 分页查询示例: ```xml <select id="selectUserinfo" parameterType="map" resultType="Userinfo"> SELECT * FROM ( SELECT a.*, ROWNUM rn FROM ( SELECT * FROM userinfo ORDER BY id ) a WHERE ROWNUM <= #{endRow} ) WHERE rn >= #{startRow} </select> ``` 在上述 SQL 中: - `#{startRow}` 表示起始行号(从 1 开始)。 - `#{endRow}` 表示结束行号。 - 子查询 `a` 用于对数据进行排序并限制最大行数。 - 外层查询通过 `rn` 过滤出当前页的数据[^1]。 ### Java 代码中调用分页查询 在 Java 代码中,可以通过传递分页参数(如当前页码和每页记录数)来计算 `startRow` 和 `endRow`,然后调用 MyBatisMapper 接口执行查询。 ```java public interface UserinfoMapper { List<Userinfo> selectUserinfo(@Param("startRow") int startRow, @Param("endRow") int endRow); } // 调用示例 int pageNum = 2; // 当前页码 int pageSize = 3; // 每页记录数 int startRow = (pageNum - 1) * pageSize + 1; int endRow = pageNum * pageSize; List<Userinfo> userinfos = userinfoMapper.selectUserinfo(startRow, endRow); ``` ### 使用 PageHelper 插件简化分页操作 除了手动编写 SQL,还可以使用 MyBatis 的分页插件 `PageHelper` 来简化分页逻辑。`PageHelper` 能够自动处理分页相关的 SQL 生成,适用于多种数据库,包括 Oracle。 #### 引入依赖 在 `pom.xml` 中引入 `PageHelper` 插件的依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.0</version> </dependency> ``` #### 配置插件 在 `mybatis-config.xml` 中配置 `PageHelper` 插件: ```xml <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"/> </plugins> ``` #### 使用 PageHelper 实现分页 在 Java 代码中使用 `PageHelper.startPage()` 方法启动分页功能: ```java public List<Userinfo> selectUserinfo(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); // 启动分页功能 return userinfoMapper.selectAll(); // 查询语句无需手动分页 } ``` `PageHelper` 会自动在 SQL 查询中插入分页逻辑,适用于 Oracle 数据库。 ### 分页结果封装 为了获取分页的详细信息(如总页数、总记录数等),可以使用 `PageInfo` 类进行封装: ```java List<Userinfo> userinfos = userinfoMapper.selectUserinfo(pageNum, pageSize); PageInfo<Userinfo> pageInfo = new PageInfo<>(userinfos); ``` `PageInfo` 提供了丰富的分页信息,包括当前页码、总页数、总记录数等,便于前端展示。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值