MyBatis通用的10种写法总结大全

MyBatis通用的10种写法总结大全

1. 基础查询

  • 示例1:

xml
<select id="selectById" resultType="com.example.model.User">
select * from user where id = #{id}
</select>

  • 示例2:

xml
<select id="findUserByName" resultType="com.example.model.User">
select * from user where name like concat('%',#{name},'%')
</select>

2. 动态SQL

  • 示例1:

xml
<select id="findUserByCondition" resultType="com.example.model.User">
select * from user
<where>
<if test="id != null"> and id = #{id} </if>
<if test="name != null"> and name = #{name} </if>
</where>
</select>

  • 示例2:

xml
<update id="updateUser" parameterType="com.example.model.User">
update user
<set>
<if test="name != null"> name = #{name},</if>
<if test="age != null"> age = #{age},</if>
</set>
where id = #{id}
</update>

3. 分页查询

  • 示例1:

xml
<select id="getPageData" resultType="com.example.model.User">
select * from user
limit #{startIndex}, #{pageSize}
</select>

  • 示例2:

xml
<select id="getPageDataByCondition" resultType="com.example.model.User">
select * from user
<where>
<if test="name != null"> and name like concat('%',#{name},'%') </if>
</where>
limit #{startIndex}, #{pageSize}
</select>

4. 前N条数据查询

  • 示例1:

xml
<select id="findTopN" resultType="com.example.model.User">
select * from user
order by id desc
limit 0, #{n}
</select>

  • 示例2:

xml
<select id="findTopNByCondition" resultType="com.example.model.User">
select * from user
where gender = #{gender}
order by id desc
limit 0, #{n}
</select>

5. 批量插入

  • 示例1:

xml
<insert id="batchInsert" parameterType="java.util.List">
insert into user(name, age, gender)
values
<foreach collection="list" item="item" separator=",">
(#{item.name}, #{item.age}, #{item.gender})
</foreach>
</insert>

  • 示例2:

xml
<insert id="batchInsertByCondition" parameterType="java.util.List">
insert into user(name, age, gender)
values
<foreach collection="list" item="item" separator=",">
<if test="item.gender != null">
(#{item.name}, #{item.age}, #{item.gender})
</if>
<if test="item.gender == null">
(#{item.name}, #{item.age}, '未知')
</if>
</foreach>
</insert>

6. 批量更新

  • 示例1:

xml
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" item="item">
update user set name = #{item.name}, age = #{item.age} where id = #{item.id};
</foreach>
</update>

  • 示例2:

xml
<update id="batchUpdateByCondition" parameterType="java.util.List">
<foreach collection="list" item="item">
update user
<set>
<if test="item.name != null"> name = #{item.name},</if>
<if test="item.age != null"> age = #{item.age},</if>
</set>
where id = #{item.id};
</foreach>
</update>

7. 批量删除

  • 示例1:

xml
<delete id="batchDelete" parameterType="java.util.List">
delete from user where id in
<foreach collection="list" open="(" close=")" separator=",">
#{item}
</foreach>
</delete>

  • 示例2:

xml
<delete id="batchDeleteByCondition" parameterType="java.util.List">
delete from user where gender = #{gender} and age between #{startAge} and #{endAge}
and id in
<foreach collection="list" open="(" close=")" separator=",">
#{item}
</foreach>
</delete>

8. 多表联查

  • 示例1:

```xml




...



...


```

  • 示例2:

```xml




...



...


...


```

9. 存储过程调用

  • 示例1:

xml
<select id="callQuery" statementType="CALLABLE" parameterType="com.example.dto.QueryParam">
{call query_users(#{param.name, mode=IN, jdbcType=VARCHAR}, #{param.total, mode=OUT, jdbcType=INTEGER})}
</select>

  • 示例2:

xml
<insert id="callInsert" statementType="CALLABLE" parameterType="com.example.model.User">
{call insert_user(#{name, mode=IN, jdbcType=VARCHAR}, #{age, mode=IN, jdbcType=INTEGER},
#{gender, mode=IN, jdbcType=VARCHAR}, #{id, mode=OUT, jdbcType=INTEGER})}
</insert>

10. SQL注入攻击防御

  • 示例1:

xml
<select id="findUserByName" resultType="com.example.model.User">
select * from user where name like concat('%',#{name,jdbcType=VARCHAR},'%')
</select>

  • 示例2:

xml
<insert id="insertUser" parameterType="com.example.model.User">
insert into user(name, age, gender)
values (#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER}, #{gender,jdbcType=VARCHAR})
select last_insert_id()
</insert>

上述10种MyBatis的写法都可以广泛应用于各种需求场景,帮助开发者快速、高效地完成各种数据库操作。

阅读剩余 84%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis通用的10种写法总结大全 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java实现的连接数据库及模糊查询功能示例

    以下是详细的攻略: 连接数据库 Java连接数据库需要使用JDBC(Java Database Connectivity)技术,具体过程如下: 导入JDBC驱动程序。如果使用MySQL数据库,则需要下载相应的驱动。可以在MySQL官网 下载最新版本的JDBC驱动。 加载驱动程序。可以使用Class.forName()方法来加载驱动程序。 建立数据库连接。使用…

    Java 2023年5月19日
    00
  • SpringMVC解析post请求参数详解

    下面是关于SpringMVC解析POST请求参数的详细攻略,包含两个示例说明。 SpringMVC解析POST请求参数详解 在SpringMVC中,我们可以使用@RequestParam注解、@ModelAttribute注解和HttpServletRequest对象来解析POST请求参数。以下是详细的解析过程。 使用@RequestParam注解解析POS…

    Java 2023年5月17日
    00
  • 一文详解RocketMQ-Spring的源码解析与实战

    摘要:这篇文章主要介绍 Spring Boot 项目使用 rocketmq-spring SDK 实现消息收发的操作流程,同时笔者会从开发者的角度解读 SDK 的设计逻辑。 本文分享自华为云社区《RocketMQ-Spring : 实战与源码解析一网打尽》,作者:勇哥java实战分享。 RocketMQ 是大家耳熟能详的消息队列,开源项目 rocketmq-…

    Java 2023年4月25日
    00
  • 详解Java的Hibernate框架中的缓存与二级缓存

    详解Java的Hibernate框架中的缓存与二级缓存攻略 本攻略旨在详细讲解Java的Hibernate框架中的缓存与二级缓存,帮助读者了解Hibernate框架中的缓存机制和优化方式。 什么是Hibernate框架中的缓存? Hibernate框架中的缓存是指在应用程序与数据库之间的缓存层,即程序与数据库之间的缓存层,它能够在应用程序与数据库之间减少交互…

    Java 2023年5月20日
    00
  • asp.net getRemoteAddr()与 getRemoteHost()的区别

    为了更好地理解getRemoteAddr()和getRemoteHost()这两个方法的区别,我们需要先了解一下HTTP协议和网络协议。HTTP协议是一种基于网络协议的高级应用层协议,它定义了浏览器和Web服务器之间传输数据的格式和方式。网络协议则是计算机之间通信的规则和标准,它涵盖了物理层、数据链路层、网络层等各种层次。在浏览器和Web服务器之间传输数据时…

    Java 2023年6月15日
    00
  • Java实现基于JDBC操作mysql数据库的方法

    下面我将详细讲解Java实现基于JDBC操作mysql数据库的方法的完整攻略,包括如何连接数据库、执行SQL语句、关闭资源等步骤。 1. 引入JDBC的依赖 在Java程序中使用JDBC操作mysql数据库,需要引入mysql-connector-java的依赖。可以在Maven中添加如下依赖: <dependency> <groupId&…

    Java 2023年5月19日
    00
  • 对ArrayList和LinkedList底层实现原理详解

    对ArrayList和LinkedList底层实现原理详解 ArrayList 简介 ArrayList是基于动态数组实现的,其最大的特点就是可以随机访问,这也是数组的一个最大优点。另外,ArrayList支持在尾部快速添加元素的操作,当然,如果要在中间插入、删除元素,这是需要移动数组元素,所以操作速度会相对比较慢,并且,在ArrayList中,如果进行了大…

    Java 2023年5月26日
    00
  • 任意Json转成无序列表的方法示例

    下面是详细讲解“任意Json转成无序列表的方法示例”的完整攻略。 1. 理解Json数据格式 首先,我们需要了解Json数据格式。Json是一种轻量级的数据交换格式,它可以表示对象、数组、字符串、数字、布尔值和null。Json对象由花括号{}包裹,对象中包含各种键值对,键值对之间用逗号分隔;Json数组由方括号[]包裹,数组中包含各种数据类型,数据之间用逗…

    Java 2023年6月16日
    00
合作推广
合作推广
分享本页
返回顶部