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>
目录
相关文章
|
10月前
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
1166 9
|
10月前
|
SQL Java 数据库连接
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
|
SQL Java 数据库连接
Mybatis拦截器实现公共字段填充
通过使用MyBatis拦截器,可以实现对公共字段的自动填充,简化代码,提高开发效率。拦截器通过拦截SQL操作,在插入和更新操作时自动填充公共字段,使得开发者不再需要手动设置这些字段。本文详细介绍了实现步骤,并通过示例代码展示了具体实现方法,希望能为您的开发工作提供实用的指导和帮助。
780 13
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
2071 5
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
SQL Java 数据库连接
mybatis如何仅仅查询某个表的几个字段
【10月更文挑战第19天】mybatis如何仅仅查询某个表的几个字段
671 1
|
SQL XML Java
Mybatis的<where>,<if>等标签用法
这篇文章详细解释了Mybatis中<where>和<if>等标签的用法,展示了如何在SQL动态构建中有效地过滤条件和处理逻辑分支。
934 1
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
320 0
Mybatis入门(select标签)
|
SQL Java 数据库连接
Mybatis的<insert>,<update>,<delete>标签用法
这篇文章详细讲解了Mybatis中<insert>, <update>, <delete>标签的使用方法,并提供了示例代码来展示如何执行数据库的增删改操作。
1275 0
|
7月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1311 1
Spring boot 使用mybatis generator 自动生成代码插件