关于主键生成问题

Mybatis的主键生成是基于JDBC的使用主键【getGeneratedKeys()】方法

也就是说,必须要JDBC驱动的支持才行

    @Test
public void junitTest() throws SQLException {
Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByOriginalJdbc();、

PreparedStatement preparedStatement = connectionByOriginalJdbc.prepareStatement("");

ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
}

useGeneratedKeys 表示使用数据库生成的主键,

keyProperty 表示绑定数据表的主键返回给实体类的哪个字段

在之前的插入SQL中并不需要主键生成功能就能完成主键自增生成,

看来是JDBC自动生成的【如果开启就像官方说的一样,是强制生成的】


实现主键生成的第二种方式:

使用<SelectKey> 标签

SELECT last_insert_id 表示查询最后一次插入的id

如果在SQL执行前查询,就返回最后一次插入的记录的id

然后我们的插入SQL就会按这个查询的id插入,这样插入是有问题的,

所以要选择AFTER,在执行插入后返回主键,再生成

对应的,使用注解实现的方式


关于getMapper底层实现原理

这是一个查询的SQL

先获取会话实例

然后从会话中获取Mapper实现类

调用查询SQL,完成后释放资源

通过调试查看源码

其实也是使用动态代理完成的

根据command的类型来处理,

一共四个Case,也正好就是我们Mapper的4个SQL标签

而在增删改3个,都是直接注入SQL即可,因为返回只有修改的记录结果数

SELECT反而更为复杂

需要根据查询的结果要求进行处理

摘要自: https://www.bilibili.com/video/BV1dV411o7bA?p=11


关于参数占位符

在多个普通参数注入的情况,我们可以使用这种占位符表示,

也就是不通过名称标识注入

如果是多个实体类类型的参数。。。


关于驼峰命名匹配

Java实体类声明的映射字段是以驼峰命名的,

例如:

  userId,userName,userPassword

但是数据库的字段是不区分大小写的,尤其是Oracle数据库,会直接全大写

一般设置的字段会是这样,

例如:

  user_id,user_name,user_password

或者Oracle全大写的这样

  USER_ID,USER_NAME,USER_PASSWORD

Mybatis的设置项中可以开启一个驼峰命名映射,帮助这个字段进行匹配

<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

如果你打算完全一致的声明ORM字段列表示,请不要设置驼峰匹配!!!

这会导致Mybatis无法找到数据表的字段【显示一切正常】

你会根本找不到什么问题,所有配置完全一致,结果就是返回null


关于模糊查询Like 更好的安全写法


【Mybatis】Bonus02 补充的更多相关文章

  1. Spring Boot 知识笔记(整合Mybatis续-补充增删改查)

    续上篇,补充数据库增删改查的其他场景. 一.Mapper中添加其他场景操作 package net.Eleven.demo.Mapper; import net.Eleven.demo.domain. ...

  2. 深入浅出Mybatis系列(二)---Mybatis入门

    一.Mybatis环境搭建及简单实例 1. 新建web项目, 添加依赖包:mybatis包.数据库驱动包(我使用的是mysql).日志包(我使用的是log4j), 由于我的是maven项目, 那么添加 ...

  3. 【Java资源免费分享,网盘自己拿】

    JavaSE: Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xb Java毕向东:链接:https://pan.baidu.com/s/1ggzHk ...

  4. JAVA视频链接

    Java基础Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xb Java刘意:链接:https://pan.baidu.com/s/1kVZQCqr密 ...

  5. Java视频教程免费分享(网盘直接取)

    Java基础 Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xb Java刘意:链接:https://pan.baidu.com/s/1kVZQCqr ...

  6. Spring框架第一天(搭建项目)

    Spring框架 1.简介 1.1 Spring是什么 一个开源的框架,是JavaEE开源框架 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以IoC(Inve ...

  7. MyBatis数据库连接的基本使用-补充Mapper映射器

    补充 Mapper映射器的使用: Mapper映射器,google添加.Mapper映射器是将mapper.xml中配置的sql id,parameterType和resultMap按照规则一一映射到 ...

  8. MyBatis数据库连接的基本使用-补充

    补充1  MyBatis使用过程中,返回值类型可能是Map,不一定是实体类 返回查询结果也可以是一个Map,不一定是实体类 (1)mybatis会先将查询结果返回为一个map,字段名作为key,字段值 ...

  9. Mybatis源码学习第六天(核心流程分析)之Executor分析(补充)

    补充上一章没有讲解的三个Executor执行器; 还是贴一下之前的代码吧;我发现其实有些分析注释还是写在代码里面比较好,方便大家理解,之前是我的疏忽,不好意思 @Override public < ...

  10. MyBatis的关联关系补充 多对多 继承

    多对多 一个学生有多个课程 一个课程有多个学生 思路分析 :使用一个中间表 用学生表和课程表的主键作为中间表的联合主键 1数据库表的设计 课程表 学生表 中间表 2/实体类的设计 课程类 public ...

随机推荐

  1. go 1.6 废弃 io/ioutil 包后的替换函数

    go 1.6 废弃 io/ioutil  包后的替换函数 io/ioutil 替代 ioutil.ReadAll -> io.ReadAll ioutil.ReadFile -> os.R ...

  2. 惠普 HP 战66 AMD 4700U 烫手 发烫,使用 Ryzen Controller 温控

    由于战66只有单风扇,动不动就上80-90度. 下载:Ryzen Controller 并安装. Ryzen Controller Team / Ryzen Controller · GitLab 勾 ...

  3. 夜莺中心端管理categraf采集规则并下发

    痛点 市面上常见的采集器,比如 telegraf.grafana-agent.datadog-agent 等,通常内置了多种采集插件,比如可以采集操作系统的常规指标,也可以采集 mysql.redis ...

  4. WPF/C#:程序关闭的三种模式

    ShutdownMode枚举类型介绍 ShutdownMode是一个枚举类型,它定义了WPF应用程序的关闭方式.这个枚举类型有三个成员: OnLastWindowClose:当最后一个窗口关闭或者调用 ...

  5. Luban小试牛刀

    Luban小试牛刀 LubanUnity LubanUnity配置工具配置解决方案 简介 Github  文档   视频教程  Unity工具 个人感觉挺强大,便捷的,适合中大型游戏项目的配置工作.小 ...

  6. TCP,UDP,IP,数据链路层头部详解

    UDP头部 可以看到UDP头部由(源端口).(目的端口).(长度)跟(校验和)组成,总共8字节. 源端口:发送方的端口号,16位,即2字节. 目的端口:接收方的端口号,16位,即2字节. 长度:头部+ ...

  7. Linux内核驱动:cdev、misc以及device三者之间的联系和区别

    Linux内核驱动:cdev.misc以及device三者之间的联系和区别 背景 我想在cdev中使用dev_err等log打印函数,但是跟踪了一下cdev中的原型,发现并不是我想要的. 常见的驱动是 ...

  8. 网络OSI七层模型及各层作用 tcp-ip

    背景 虽然说以前学习计算机网络的时候,学过了,但为了更好地学习一些物联网协议(MQTT.CoAP.LWM2M.OPC),需要重新复习一下. OSI七层模型 七层模型,亦称OSI(Open System ...

  9. Java实现分页的方式有哪些?

    1.手动分页 不使用任何框架,用limt分页 select xx from tab_a limt #{pageNo},#{pageSize} 2.RowBounds分页(不推荐) 这个是内存分页,它的 ...

  10. 使用gitea搭建源码管理【0到1架构系列】

    使用开源搭建Git源码方案,gitlab和gitea是两个不错的方案,gitlab以前简单易用,现在功能复杂且对开源并不友好,gitea一直保持功能单一易用且完全开源,个人推荐gitea. 通过容器安 ...