MyBatis【付诸实践 02】 mapper文件未编译+statementType使用+返回结果字段顺序不一致+获取自增ID+一个update标签批量更新记录

简介: MyBatis【付诸实践 02】 mapper文件未编译+statementType使用+返回结果字段顺序不一致+获取自增ID+一个update标签批量更新记录

1. mapper 文件未编译

如果mapper文件未编译,会报绑定异常。

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
      <filtering>false</filtering>
    </resource>
  </resources>   
</build>

2. statementType

使用 statementType 标记操作 SQL 的对象取值说明。注意:如果只为STATEMENT,那么 SQL 就是直接进行的字符串拼接,如果是字符串则需要【自行加上引号】如果为PREPARED,是使用的参数替换,也就是索引占位符, # 会转换为 ? 再设置对应的参数的值。

【STATEMENT】直接操作SQL,不进行预编译,使用($)获取数据。

<update id="xxx" statementType="STATEMENT">
  update car set price=${price} where id=${id}
</update>

【PREPARED】【不传递 statementType 值时的默认值】预处理参数,进行预编译,使用(#)获取数据。

<update id="xxx" statementType="PREPARED">
  update car set car_number=#{carNumber} where id=#{id}
</update>

【CALLABLE】执行存储过程。

<select id="xxx" statementType="CALLABLE">
  {call PROCEDURE_NAME()}
</select>

$ 与 # 混用时会有报错,具体原因暂未探究。

3. 返回map时,key与select的字段顺序不一致

将 Hashmap 换成 LinkedHashMap 即可【顺序是否有意义要看业务是否需要了】

<select id="xxx" resultType="java.util.HashMap">
<select id="xxx" resultType="java.util.LinkedHashMap">

4. 获取自增ID

我们可以自己获取当前的自增ID,这个显然是有并发问题的:

SELECT
  auto_increment 
FROM
  information_schema.`TABLES` 
WHERE
  table_name = 'tableName' 
  AND TABLE_SCHEMA = 'schemaName'

5. 一个update标签中执行多条update语句

MySql默认是不支持的,但是并不代表不能实现,只需要在jdbc的配置文件中添加 allowMultiQueries=true 这个配置即可:

url: jdbc:mysql://localhost:3306/test?allowMultiQueries=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver

然后在映射文件中的标签下将多条sql用;隔开即可,示例代码:

<update id="updateBatchSingle"  parameterType="java.util.List">
  <foreach collection="list" item="item" index="index" open="" close=";" separator=";">
    update user
    <set>
      status = #{item.status}
    </set>
    where id = #{item.id}
  </foreach>
</update>
目录
相关文章
|
8天前
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
35 8
|
9天前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
9天前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
2月前
|
SQL Java 数据库连接
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
文章讲述了在使用Mybatis时遇到的资源文件找不到的问题,并提供了通过修改Maven配置来解决资源文件编译到target目录下的方法。
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
|
1月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
30 1
|
3月前
|
Java 数据库连接 数据库
mybatis plus 更新值为null的字段
mybatis plus 更新值为null的字段
48 7
|
3月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
60 3
|
2月前
|
SQL Java 数据库连接
MyBatis Mapper.XML 标签使用说明
MyBatis Mapper.XML 标签使用说明
27 0
|
2月前
|
XML Java 数据库连接
Mybatis 模块拆份带来的 Mapper 扫描问题
Mybatis 模块拆份带来的 Mapper 扫描问题
33 0
|
21天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
下一篇
无影云桌面