当前位置:首页 » 编程语言 » mybatis复杂sql修改参数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

mybatis复杂sql修改参数

发布时间: 2022-05-11 23:43:36

❶ mybatis 动态sql和参数

动态SQL,就是根据条件拼接的条件吧。
比如:if、where等等条件,都是动态sql的标签。
参数:就是#$两个标签,注意下$可能会导致sql注入的问题就可以了。

❷ mybatis 根据不同的参数运行不同的SQL

<select id="getUserInfo" parameterType="java.util.Map" resultMap="userResult">
SELECT TU.USERID, TU.USERNAME, TU.PASSWORD, TU.GROUPIDEN, TU.ROLEID
, TUI.REALNAME, TUI.GENDER, TUI.BIRTHDAY, TUI.PERSONID, TUI.EMAIL, TUI.MOBILENUMBER
<if test="#{group == 'MANAGER'} || #{group == 'COMPANY'}">
, TUS.JOBNUMBER, TUS.COMPANYID FROM TAB_USER TU,
TAB_USER_INFO TUI, TAB_USER_STAFF TUS
</if>
<if test="#{group == 'CONSUMER'}">
, TUC.ADDRESS, TUC.AREAID FROM TAB_USER TU,
TAB_USER_INFO TUI, TAB_USER_CONSUMER TUC
</if>
WHERE
<if test="#{group == 'MANAGER'} || #{group == 'COMPANY'}">
TU.USERID = TUI.USERID AND TU.USERID = TUS.USERID AND TUI.USERID = TUS.USERID AND TU.USERNAME = #{userName}
</if>
<if test="#{group == 'CONSUMER'}">
TU.USERID = TUI.USERID AND TU.USERID = TUC.USERID AND TUI.USERID = TUC.USERID AND TU.USERNAME = #{userName}
</if>
</select>

这样试试呢?

❸ MyBatis之SQL语句映射文件增删改查和Java参数如何对应

insert可以使用数据库支持的自动生成主键策略,设置useGeneratedKeys=”true”,然后把keyProperty 设成对应的列,就搞定了。
比如说上面的StudentEntity 使用auto-generated 为id 列生成主键.
还可以使用selectKey元素。
使用mysql数据库nextval('student')为自定义函数,用来生成一个key。

❹ 如何通过MyBatis动态SQL实现增删改查

你可以把defaultExecutorType值改了。 有三个值: SIMPLE 普通返回。 REUSE 重复。 BATCH 批量更新。 MyBatis发现更新和插入返回值一直为"-2147482646"的错误是由defaultExecutorType设置引起的,如果设置为batch,更新返回值就会丢失。

❺ mybatis 怎么获取数据并修改数据

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

❻ mybatis怎么执行sql语句值

例如在一个 XXMapper.xml 中:
?

1
2
3

<select id="executeSql" resultType="map">
${_parameter}
</select>

你可以如下调用:
?

1

sqlSession.selectList("executeSql", "select * from sysuser where enabled = 1");

或者你可以在 XXMapper.java 接口中定义如下方法:
?

1

List<Map> executeSql(String sql);

然后使用接口调用方法:
?

1

xxMapper.executeSql("select * from sysuser where enabled = 1");

上面这些内容可能都会,下面在此基础上再复杂一点。
假如像上面SQL中的enabled = 1我想使用参数方式传值,也就是写成 enabled = #{enabled},如果你没有遇到过类似这种需求,可能不明白为什么要这么写,举个例子,要实现一种动态查询,可以在前台通过配置 SQL,提供一些查询条件就能实现一个查询的功能(为了安全,这些配置肯定是开发或者实施做的,不可能让用户直接操作数据库)。
针对这个功能,使用 MyBatis 实现起来相当容易。配置 SQL 肯定要执行,用上面讲的这种方式肯定可以执行 SQL,如何提供参数呢?参数就是enabled = #{enabled}中的#{enabled}部分。如果再多一些条件,一个配置好的 SQL 如下:
?

1
2
3

select * from sysuser
where enabled = #{enabled}
and userName like concat('%',#{userName},'%')

这种情况下,该怎么用 MyBatis 实现呢?
首先 XML 中修改如下:
?

1
2
3

<select id="executeSql" resultType="map">
${sql}
</select>

接口中的方法修改为:
?

1

List<Map> executeSql(Map map);

然后调用方法:
?

1
2
3
4
5
6
7
8
9
10
11
12
13

Map map = new HashMap();
//这里的 sql 对应 XML 中的 ${sql}
map.put("sql", "select * from sysuser "
+ " where enabled = #{enabled} "
+ " and userName like concat('%',#{userName},'%')");
//#{enabled}
map.put("enabled", 1);
//#{userName}
map.put("userName", "admin");
//接口方式调用
List<Map> list = xxMapper.executeSql(map);
//sqlSession方式调用

❼ mybatis中特殊SQL的几种配置方法

1.in条件for循环
<select id="getBooList" resultMap="java.util.Map" parameterType="java.util.List" >
select booking_no, max(booking_general_seq) max_seq from interface_booking_t where booking_no in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
group by booking_no
</select>
2.insert并且返回主键
<insert id="insertAndGetId" parameterType="com.phy.mlisp.management.domain.Document">
<selectKey resultType="long" order="BEFORE" keyProperty="id">
SELECT MLISP_DOCUMENT_SEQ.NEXTVAL as ID from DUAL
</selectKey>
insert into MLISP_DOCUMENT_T (ID, NAME, ALIAS,
FILE_SIZE,CONTENT,STATUS,CREATE_BY,CREATE_DATE,LAST_UPDATE_BY,
LAST_UPDATE_DATE)
values (#{id},#{name,jdbcType=VARCHAR}, #{alias,jdbcType=VARCHAR},#{fileSize,jdbcType=INTEGER},
#{content,jdbcType=BLOB},
#{status,jdbcType=INTEGER},#{createBy,jdbcType=VARCHAR},SYSDATE,
#{lastUpdateBy,jdbcType=VARCHAR},SYSDATE)
</insert>

3.批量insert
<insert id="batchInsert" parameterType="java.util.List">
insert into INTERFACE_BOOKING_CONTA_T (ID, BOOKING_ID, BOOKING_CONTAINER_SEQ,
CONTA_TYPE, CONTA_SIZE, CONTA_QUANTITY,
CONTA_SIZE_TYPE_ISO)
select interface_booking_conta_seq.NEXTVAL,A.* from(
<foreach collection="list" item="item" index="index" separator="UNION ALL" >
(select #{item.bookingId,jdbcType=DECIMAL}, #{item.bookingContainerSeq,jdbcType=DECIMAL},
#{item.contaType,jdbcType=VARCHAR}, #{item.contaSize,jdbcType=VARCHAR}, #{item.contaQuantity,jdbcType=DECIMAL},
#{item.contaSizeTypeIso,jdbcType=VARCHAR} from al)
</foreach>) A
</insert>

4.批量更新
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="begin" close=";end;" separator=";">
UPDATE WCP_DISPATCH_CONTA_T
<set>
<if test="item.dispatchId != null">
DISPATCH_ID = #{item.dispatchId,jdbcType=DECIMAL},
</if>
</set>
WHERE DISPATCH_ID = #{item.dispatchId,jdbcType=DECIMAL}
</foreach>
</update>

❽ mybatis同一个参数在同一条sql中多次使用如何处理或者说在父查询和子查询中使用同一个where条件怎么办

最简单的直接设置resultType=“map”,得到的就是一个List<Map<String,Object>>
每一个Map的key就是查询结果的列名,也就是表的字段名。当然sql语句中最好as一下

复杂一点可以自定义一个resultMap标签
<resultMap id="result" type="java.util.Map">
<result property="c1" column="column1"/>
<result property="c2" column="column2"/>
</resultMap>
其中result可以自定义,select标签中的resultMap="result",和上面的resultMap标签的id对应
property设置的是自定义的字段名称,也就是结果集中每一个Map的key
column设置查询结果的字段名称
然后通过
for(List<Map<String,Object> map:list){
map.get("c1");//获取c1对应的字段的值
。。。

}

❾ mybatis 的sql里面参数如何运算

1.<when test="start == null and limit == null">;

2.WHERE T.sDARowNo BETWEEN 1 AND 100;

3.</when>;

4.<otherwise>;

5.WHERE T.sDARowNo BETWEEN (#{start}+1) AND (#{start}+#{limit});

6.</otherwise>。