mybatis竟然报"Invalid value for getInt()"

发布时间:2021-10-31 MYBATIS INVALID

目录

  • 背景
  • 场景
  • 初探
  • 再探
  • 结局

背景

使用mybatis遇到一个非常奇葩的问题,错误如下:

Cause: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'name' from result set.  Cause: java.sql.SQLException: Invalid value for getInt() - 'hhhh'

场景

还原一下当时的情况:

public interface UserMapper {
    @Results(value = {
            @Result(property = "id", column = "id", javaType = Long.class, jdbcType = JdbcType.BIGINT),
            @Result(property = "age", column = "age", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
            @Result(property = "name", column = "name", javaType = String.class, jdbcType = JdbcType.VARCHAR)
    })
    @Select("SELECT id, name, age FROM user WHERE id = #{id}")
    User selectUser(Long id);
}

@Data
@Builder
public class User {
    private Long id;
    private Integer age;
    private String name;
}

public class MapperMain {
    public static void main(String[] args) throws Exception {
        MysqlConnectionPoolDataSource dataSource = new MysqlConnectionPoolDataSource();
        dataSource.setUser("root");
        dataSource.setPassword("root");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8");

        TransactionFactory transactionFactory = new JdbcTransactionFactory();
        Environment environment = new Environment("development", transactionFactory, dataSource);
        Configuration configuration = new Configuration(environment);
        configuration.addMapper(UserMapper.class);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper userMapper = session.getMapper(UserMapper.class);
            System.out.println(userMapper.selectUser(1L));
        }
    }
}

数据库如下:

上面是一个很简单的例子,就是根据id选出用户的信息,运行结果如下:

User(id=1, age=2, name=3)

没有任何问题,但是我再往数据库里插入一条数据,如下:

MapperMain类中增加一行代码,如下:

System.out.println(userMapper.selectUser(2L));

运行结果如下:

User(id=1, age=2, name=3)
### Error querying database.  Cause: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'name' from result set.  Cause: java.sql.SQLException: Invalid value for getInt() - 'hhhh'
……

可以看出第一条查询没有问题,第二条查询就报错了

初探

其实我的直觉告诉我,是不是因为User类里字段顺序和SQL语句里select字段的顺序不一致导致的,那就来试一下吧

改一下User类里字段的顺序:

@Data
@Builder
public class User {
    private Long id;
    private String name;
    private Integer age;
}

结果如下:

User(id=1, name=3, age=2)
User(id=2, name=hhhh, age=3)

果不其然,直觉还是很6的

或者改一下SQL语句里select字段的顺序:

@Data
@Builder
public class User {
    private Long id;
    private Integer age;
    private String name;
}

public interface UserMapper {
    @Results(value = {
            @Result(property = "id", column = "id", javaType = Long.class, jdbcType = JdbcType.BIGINT),
            @Result(property = "age", column = "age", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
            @Result(property = "name", column = "name", javaType = String.class, jdbcType = JdbcType.VARCHAR)
    })
    @Select("SELECT id, age, name FROM user WHERE id = #{id}")
    User selectUser(Long id);
}

以我们的直觉,结果肯定也没问题,果不其然,如下:

User(id=1, age=2, name=3)
User(id=2, age=3, name=hhhh)

再探

其实到上一步,问题已经解决了,可以继续干活了,但是搞不懂为什么,心里总觉得不踏实。

bugdebug开始,从下面的入口开始:

追踪到如下:

可以看出User这个类是有构造函数的,而且是包含所有字段的构造函数
利用这个构造函数创建实例的时候,参数的顺序就是SQL语句选择字段的顺序,不会根据映射关系去选择
所以就出现了类型不匹配

那我们再来看一下问什么会有一个这样的构造函数产生,直觉告诉我是@Builder这个注解

一起来看一下User编译后的结果:

public class User {
    private Long id;
    private String name;
    private Integer age;

    User(final Long id, final String name, final Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public static User.UserBuilder builder() {
        return new User.UserBuilder();
    }

    public static class UserBuilder {
        private Long id;
        private String name;
        private Integer age;

        UserBuilder() {
        }

        public User.UserBuilder id(final Long id) {
            this.id = id;
            return this;
        }

        public User.UserBuilder name(final String name) {
            this.name = name;
            return this;
        }

        public User.UserBuilder age(final Integer age) {
            this.age = age;
            return this;
        }

        public User build() {
            return new User(this.id, this.name, this.age);
        }
    }
}

果然如此,UserBuilder.build()方法就是利用这个构造函数来生成的。

结局

最终解决方案就是给User类加上无参的构造函数就OK了,如下:

@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer age;
    private String name;
    private Long id;
}

字段顺序随便放,最后再执行一下:

User(age=2, name=3, id=1)
User(age=3, name=hhhh, id=2)

更多相关推荐


Mybatis-plus sql输出

发布时间:2021-11-02 MYBATIS PLUS
1.引入pom<dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>3.8.5</version></dependency>2.指定使用特殊驱动datasource.propertiesspring.data...

Mybatis-plus 使用xml进行调用

发布时间:2021-11-02 MYBATIS PLUS
mybatis-plus使用xml进行调用1.创建xml文件创建层级目录a.dao.mapper(而不是创建一个目录名字叫a.dao.mapper)创建文件ContactMapper.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http...

mybatis里使用枚举Enum判断不同条件

发布时间:2021-09-15 MYBATIS ENUM
  publicenumPlatformEnum{WX("WX","微信"),TB("TB","淘宝"),;privateStringplatform;privateStringshowDesc;<iftest="null!=param.platformEnum">ANDplatform=#{param.platformEnum}<iftest="param.platformEn...

mybatis 自定义查询语句

发布时间:2017-08-12 自定义 MYBATIS
通过mybatis插件生成的mapper文件只有基本的增、删、改、查、汇总。但是实际使用场景中,总是有各种需要连表、汇总、分组查询的需求,那我们一般都通过自定义查询语句去实现。有时候会有表结构更改的,重新生成mapper、entity等文件会覆盖原文件。为了减少这种修改,我们一般都重新新建一个文件来区分开。只需要两步就可以啦,少说话,看代码。1.新增自定义mapper文件<?xmlversi...

请说说mybatis的一级缓存和二级缓存

发布时间:2021-12-07 MYBATIS 缓存
在面试过程中经常会问​​请说说mybatis的一级缓存和二级缓存​​,下文将带你实现如何使用。如果不敢兴趣请直接看结论。1.理解mybatis缓存Mybatis的一级缓存和二级缓存是Mybatis自带的。目的:将sql的查询结果存放于缓存内,在接下来再次查询时,会直接从缓存中取出而不是从数据库里面获取。这样会提升查询速度,但是会产生脏读。注意:一级缓存是自动开启的,二级缓存是需要手动开启的。所以开...

(转) MyBatis(1)——快速入门

发布时间:2022-03-08 MYBATIS 入门
MyBatis简介MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis,是一个基于Java的持久层框架。​持久层:​ 可以将业务数据​存储到磁盘,具备长期存储能力​,只要磁盘不损坏,在断电或者其他情况下,重新开启系统仍然可以读取到这些数据。​优点:​ 可以​使用巨大的磁盘...

MyBatis源码- SqlSession门面模式 & selectList 源码解析

发布时间:2021-05-31 源码 MYBATIS
 文章目录Pre工程概览pom.xmlmybatis-config.xmlUserMapper测试类selectList源码解析附SQLlog4j.propertiesapp.propertiesUser Pre如果MyBatis的基础用法还不熟悉,31篇入门博客拿走不谢戳戳戳—>https://blog.51cto.com/u_15239532工程概览pom.xml<?xmlvers...

MyBatis源码-深入理解MyBatis Executor的设计思想

发布时间:2021-05-31 MYBATIS 源码
 文章目录PreJDBC的执行过程JDBCDemoJDBCStatement接口MyBatis执行过程四大组件组件之间的关系Executor执行器组件架构总览接口继承关系 Pre如果MyBatis的基础用法还不熟悉,31篇入门博客拿走不谢戳戳戳—>https://blog.51cto.com/u_152395325317.htmlJDBC的执行过程MyBatis半自动的ORM框架,归根到底底...

mybatis 标签 和注解 ( 动态 sql的 用法)

发布时间:2020-10-21 MYBATIS SQL
1.动态sql            mybatis select元素      总结:一般下执行完commit操作都需要刷新缓存,flushCache=true表示刷新缓存,这样可以避免数据库脏读。注意:(1)当为select语句时:flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。useCache默认为true,表示会将本条语句的结果进行二级缓存。(...

Mybatis---概述

发布时间:2022-03-23 MYBATIS ---
 /***【mybatis】*what?*ORM框架(将Java对象与数据库字段进行映射);**How?*a,导入jdbc驱动包*b,导入mybatis包*c,开发即可**【org.apache.ibatis.session.SqlSessionFactory】*每个基于MyBatis应用都是以一个SqlSessionFactory实例为核心;*SqlSessionFactory实例可以通过Sql...

Mybatis简单查询

发布时间:2021-09-15 MYBATIS 查询
目录前言一、时间区间查询1.xml中实现2.MybatisPlus方式二、模糊查询1.xml中实现2.MybatisPlus方式前言 好记性不如烂笔头,记录内容,方便日后复制。一、时间区间查询 简单记录两种时间查询的方式:1.xml中实现controller文件@ApiOperation(value="查询用户的通知列表",notes="查询用户的通知列表")@PostMapping("/quer...

Mybatis返回新增数据的自增ID

发布时间:2022-03-24 MYBATIS 自增
问题描述我按照mybatis插入数据返回自增id的规则设置如下://增加useGeneratedKeys="true"keyProperty="versionId":versionId是实体类SysVersion的属性<insertid="insertSysVersion"parameterType="SysVersion"useGeneratedKeys="true"keyProperty...

mybatis批量插入/新增数据

发布时间:2022-03-24 MYBATIS 批量
1、原生批量插入(性能好)原生批量插入方法是依靠MyBatis中的foreach标签,将数据拼接成一条原生的insert语句一次性执行的,核心实现代码如下。<insertid="insertBatch">INSERTINTOsys_device_software(device_id,software_id)VALUES<foreachcollection="list"separa...

MyBatis 批量插入数据的 3 种方法!

发布时间:2021-10-08 MYBATIS 批量
批量插入功能是我们日常工作中比较常见的业务功能之一,之前我也写过一篇关于《MyBatisPlus批量数据插入功能,yyds!》的文章,但评论区的反馈不是很好,主要有两个问题:第一,对MyBatisPlus(下文简称MP)的批量插入功能很多人都有误解,认为MP也是使用循环单次插入数据的,所以性能并没有提升;第二,对于原生批量插入的方法其实也是有坑的,但鲜有人知。​所以综合以上情况,磊哥决定再来一个M...

Mybatis

发布时间:2021-05-30 MYBATIS
介绍用来操作数据库的持久层框架,通过xml和简单注解来执行数据库的增删改查操作架构接口层-与数据库操作方式使用传统的MyBatis提供的API通过操控sqlSession对象,根据传入的statementid和查询参数来对数据库进行增删改查的操作,这种方式不符合面向接口编程习惯使用Mapper接口将xml中<mapper>抽象为java接口中的方法,<mapper>节点的C...

mybatis 知识1

发布时间:2021-07-26 MYBATIS 知识
1. Mybatis中<dataSource>标签的作用(A)A.配置数据库链接 B.配置实体类 C.引用其他配置文件 D.配置实体类中的属性 2. Mybatis中<mapper resource =“”>标签的作用(D)A.配置数据库链接 B.配置实体类 C.引用其他配置文件D.配置实体类中的属性 3. Mybatis中< resultMap >标签的作用(...

mybatis 2

发布时间:2022-03-10 MYBATIS
1. Mybatis是一种_______的ORM实现  BA全自动化 B半自动化 C不自动化 D不确定的2. Mybatis会不会为程序员在运行期自动生成SQL执行?AA不会 B会 C可能会 D不确定3. Mybatis的功能框架不包含哪一层 DA接口层B数据处理层 C基础支撑层D表现层4. ORM模式是为了解决_______和_______存在的不匹配现象的技术。BCA面向接口 B面向对象 C关...

MyBatis的发展和选型

发布时间:2019-09-18 MYBATIS 选型
数据层框架的发展史JDBC编码的几大问题和MyBatis等框架的发展支持原因?在最初编写JDBC连接数据库的时候,各种代码操作较为复杂,而且有很多缺陷。缺陷总结如下:方法的封装问题数据源的支持映射结果集的接收和处理SQL语句硬编码程序参数只能按照顺序传入(占位符)没有实现实体类到数据库记录的映射没有提供缓存等功能工具类封装的出现解决了一部分问题相应的工具类如:springjdbc、jdbcutil...

SpringBoot2.0 整合Mybatis Mapper接口继承

发布时间:2018-07-03 SPRINGBOOT2.0 MYBATIS
SpringBoot2.0整合MybatisMapper接口继承通用Mapper是一个可以实现任意MyBatis通用方法的框架,项目提供了常规的增删改查操作以及Example相关的单表操作。那么,如何在springboot中使用呢?第一步:添加pom依赖。<dependency><groupId>org.mybatis.spring.boot</groupId>...

mybatis阶段学习总结

发布时间:2022-03-18 MYBATIS 总结
  之前之所以准备学习mybatis主要是因为在学习spring的过程中经常会遇到不少知识点不连贯的问题,在经过这几天的学习我基本厘清了之前的一些卡壳的问题,由于我想主要学习spring,所以对于mybatis的学习就到目前为止,不过在之后的学习中如果遇到问题我仍然会回顾mybatis。接下来继续学习spring。...

Mybatis-Plus学习第一天

发布时间:2021-07-04 MYBATIS PLUS
Mybatis-Plus1.快速入门地址:安装|MyBatis-Plus(baomidou.com)2.创建数据库mybatis-plusCREATETABLEuser(idBIGINT(20)NOTNULLCOMMENT'主键ID',nameVARCHAR(30)NULLDEFAULTNULLCOMMENT'姓名',ageINT(11)NULLDEFAULTNULLCOMMENT'年龄',ema...

Mybatis考试复习资料

发布时间:2021-05-25 复习资料 MYBATIS
Mybatis特点1、简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。2、灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求3、解除sql与程序代码的耦合:通过提供DAO层...

Mybatis-Plus第二天(完结)

发布时间:2021-07-04 MYBATIS PLUS
Mybatis-Plus第二天(完结)16.分页查询分页网站在每个网站都使用1、使用原始的limit进行分页2、pageHelper第三方的插件3、MP内置了分页插件如何使用???1.配置拦截器组件即可//最新版@BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptor=ne...

通过源码理解手写简单版本MyBatis框架(十)

发布时间:2021-09-17 源码 MYBATIS
一、需求分析1.1项目需求通过原始的JDBC代码来操作数据库非常的麻烦,里面存在着太多的重复代码和低下的开发效率,针对这种情况需要提供一个更加高效的持久层框架。1.2核心功能首先来看下JDBC操作查询的代码。publicclassJdbcTest{publicstaticvoidmain(String[]args){newJdbcTest().queryUser();newJdbcTest().a...

Mybatis框架----->(5) 深入理解Mybatis封装输出的结果和模糊查询like

发布时间:2021-01-26 MYBATIS -----
一、深入理解Mybatis封装输出的结果1、resultType指的是执行SQL语句得到ResultSet转换的类型,这里使用的转换类型可以为:(1)全限定名称:com.hcz.entity.Student(2)类型的别名:例如java.lang.Integer别名是int(3)自定义别名:在mybatis主配置文件中定义,使用<typeAlias>定义别名,然后可以在resultTy...

mybatis动态sql

发布时间:2022-03-24 MYBATIS SQL
1.动态SQL【官方声明】动态SQL是MyBatis的强大特性之一。如果你使用过JDBC或其它类似的框架,你应该能理解根据不同条件拼接SQL语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态SQL,可以彻底摆脱这种痛苦。使用动态SQL并非一件易事,但借助可用于任何SQL映射语句中的强大的动态SQL语言,MyBatis显著地提升了这一特性的易用性。如果...

mybatis 缓存 + spring 整合详解

发布时间:2020-10-22 MYBATIS SPRING
@Test//测试自动映射publicvoidtestAutoMapping()throwsIOException{//2.获取sqlSessionSqlSessionsqlSession=sqlSessionFactory.openSession();//3.获取对应mapperTUserMappermapper=sqlSession.getMapper(TUserMapper.class);/...

mybatis-plus代码自动生成(懒人必备)

发布时间:2021-10-23 MYBATIS PLUS
//1、全局配置GlobalConfigglobalConfig=newGlobalConfig();globalConfig.setActiveRecord(true);//是否支持AR模式//生成路径globalConfig.setOutputDir("E:\\spring\\尚硅谷\\mybatisPlus\\编程\\003-mp03\\src\\main\\java");globalCon...

初识Mybatis框架,实现增删改查等操作(动态拼接和动态修改)

发布时间:2016-08-27 动态 MYBATIS
此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢?这个问题在我的另一篇blogs中有专门的讲解,今天我主要是带着大家来探讨一下如何简单的使用Mybatis这个框架可能有的朋友知道,Mybatis中是通过配置文件来实现这个的,这里面有很多的东西,我们就一点一点的讲吧...

Mybatis框架中实现双向一对多关系映射

发布时间:2016-08-28 MYBATIS 映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现一对多的关系映射呢? 其实很简单首先我们照常先准备前期的环境(具体解释请 参考初识Mybatis进行增、删、改、查blogs)这里我就直接上代码了主配置文件:Configuration.xml<?xmlversio...

MyBatis日志工厂

发布时间:2022-03-24 MYBATIS 日志
主要作用就是可以把我们sql语句执行过程打印出来,可以更好的看见我们sql语句的执行错误1.首先我们需要先配置好我们的日志,这里因为我使用的是LOG4J,所以需要先配置好我们的LOG4J,可以参考我之前编写的LOG4J的配置使用进行配置2.然后修改我们的MyBatis核心配置文件mybatis-config.xml,注意下方日志配置项<?xmlversion="1.0"encoding="U...

mybatis-plus使用Wrapper执行自定义SQL

发布时间:2021-03-05 自定义 MYBATIS
最近项目种引入了mybatis-plus框架,看名字就知道了mybatis的增强版,以下简称MP。官方描述:MyBatis-Plus(opensnewwindow)(简称MP)是一个MyBatis(opensnewwindow)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。使用MP做单表的CRUD简直不要太舒服,体验跟JPA一样,面向接口编程,集成基类就可以快速实...

MyBatis typeAliases元素标签(含注解方式)及其属性、设置

发布时间:2022-03-02 MYBATIS TYPEALIASES
个人建议还是采用全类名的方式,这样可以很轻松的看到该类的所有方法等,比较方便直观;这样不过也有缺点,不利于维护等。简介typeAliases:别名处理器,可以为java类型(resultType)起别名。类型别名是为Java类型设置一个短的名字。它只和XML配置有关,存在的意义仅在于用来减少类完全限定名的冗余。注意:在不指定别名情况下,别名默认就是类名小写。某些情况下别名不区分大小写。通过单个定义...

Mybatis注解开发

发布时间:2022-03-25 MYBATIS 注解
Mybatis注解开发其实就是可以省略掉我们的映射文件,直接在接口上编写sql,虽然很方便,但是复杂的sql语句还是使用xml文件来编写更好首先,我们需要先创建一个Maven项目,可参考我之前编写的Maven项目的创建1.导入相关依赖包<!--Mybatis核心--><dependency><groupId>org.mybatis</groupId>...

mybatis 动态sql 拼接注意点

发布时间:2021-09-16 MYBATIS SQL
foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是c...

MyBatis原理与执行流程

发布时间:2020-08-20 MYBATIS 流程
首先感谢尚硅谷的老师讲解! Mybatis流程分​​四步​​:1.返回创建SqlSessionFactory对象2.返回SqlSession的实现类DefaultSqlSession对象3.返回一个MapperProxy的代理对象4.执行询流程。  第一步返回创建SqlSessionFactory对象SqlSessionFactoryBuilder().build(inputStream);如何得...

Mybatis快速入门

发布时间:2020-07-21 MYBATIS 入门
目录​​1.Mybatis简介​​​​1.1原始jdbc操作(查询数据)​​​​1.2原始jdbc操作(插入数据)​​​​1.3原始jdbc操作的分析​​​​1.4什么是Mybatis​​​​2.Mybatis的快速入门​​​​2.1MyBatis开发步骤​​​​2.2环境搭建​​​​2.3编写测试代码​​​​2.4知识小结​​​​3.MyBatis的映射文件概述​​​​4.MyBatis的增删改...

浅谈 Mybatis 分页

发布时间:2022-01-07 浅谈 MYBATIS
一、自行车有时候我们可能会用到,自己业务代码查出来一个List,然后用sublist进行手动分页。手动分页就了解清楚List的subList方法使用就了,但是这是很可取的,如果返回值太大,内存容易被无情撑爆。importdao.TestMapper;importentity.TestEntity;importorg.apache.ibatis.io.Resources;importorg.apac...

Mybatis与Spring集成时都做了什么?

发布时间:2021-07-23 MYBATIS SPRING
   Mybatis是java开发者非常熟悉的ORM框架,Spring集成Mybatis更是我们的日常开发姿势。  本篇主要讲Mybatis与Spring集成所做的事情,让读过本文的开发者对Mybatis和Spring的集成过程,有清晰的理解。  以mybatis-spring-2.0.2 为例,工程划分六个模块。一、annotation模块  定义了@MapperScan和@MapperScan...

Spring整合Mybatis方式(MapperFactoryBean实现)

发布时间:2021-10-27 SPRING MYBATIS
​数据库准备根据数据库建立entity包放一个VoteUser类VoteUser.javapackageentity;importjava.io.Serializable;importjava.util.List;publicclassVoteUserimplementsSerializable{privateStringuserName;privateStringuserPwd;privatei...

Springboot + Mybatis-plus事务管理

发布时间:2021-08-10 SPRINGBOOT MYBATIS
事务事务就是为了保证多次数据库操作的原子性。举个简单的例子买商品第一步要扣钱,第二步要扣库存。如果没有事务,一旦第一步与第二步之间出现了异常,那么钱是扣了,库存却没变,这显然不符合业务场景。要么都成功要嘛都失败在springboot中使用事务就很简单了,首先引入依赖spring-tx,但是mybatis-plus的依赖中已经引入,因此又少了一步开启事务,在Springboot的启动类,或者某个@C...

mybatis存储过程及mode=IN,mode=OUT的使用

发布时间:2020-02-04 MYSQL MYBATIS MYSQL
[mybatis]Mapper.mxl中mode=IN,mode=OUT使用场景需配合statementType=“CALLABLE”使用存储过程有三种类型的参数,分别为IN(输入参数),OUT(输出参数),INOUT(输入输出参数)。一个存储过程,可以有多个IN参数,至多有一个OUT或INOUT参数只有IN参数的存储过程不多说有INOUT或OUT参数的存储过程addUser.sql<sel...

Mybatis

发布时间:2020-09-07 MYBATIS
MyBatis缓存机制https://tech.meituan.com/2018/01/19/mybatis-cache.html一级缓存一级缓存配置如何使用MyBatis一级缓存。开发者只需在MyBatis的配置文件中,添加如下语句,就可以使用一级缓存。共有两个选项,SESSION或者STATEMENT默认是SESSION级别,即在一个MyBatis会话中执行的所有语句,都会共享这一个缓存。另一...

mybatis generator 的日常使用

发布时间:2020-07-09 MYBATIS GENERATOR
一、mybatis-generator的基本配置与使用  使用mybatis-generator来生成常用的dao层类与xml,可以满足基础的增删改查功能  1.添加pom依赖,常用的几个依赖包<dependency>  <groupId>org.mybatis.generator</groupId><artifactId>mybatis-gener...

1.3 mybatis常识!

发布时间:2021-09-14 1.3 MYBATIS
​ 称Mybatis是半自动ORM映射工具,是因为在查询关联对象或关联集合对象时,需要手动编写sql来完成。不像Hibernate这种全自动ORM映射工具,Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取。 1.#{}和${}的区别是什么?${}是字符串替换,#{}是预处理 Mybatis在处理${}时,就是把${}直接替换成变量的值。而Mybatis在处理#{}时,...

mybatis和mybatisplus使用记录

发布时间:2021-09-14 MYBATIS MYBATISPLUS
(1)获取自增返回的主键值框架:若依使用若依时,因为若依的数据库使用自增主键,就有点疑惑框架怎么获取的插入数据的自增主键的值通过在网上查资料发现,这个其实是mybatis的功能实现:在对应的xml文件里面的insert语句里面有这两个属性即可一般来说自动生成的xml语句里面会有这两个属性在插入数据后,插入的数据的组件会返回到对应的实体类的属性里面,直接getId即可获取(2)添加控制台输出执行的s...