【Mybatis】Bonus02 补充
关于主键生成问题
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 补充的更多相关文章
- Spring Boot 知识笔记(整合Mybatis续-补充增删改查)
续上篇,补充数据库增删改查的其他场景. 一.Mapper中添加其他场景操作 package net.Eleven.demo.Mapper; import net.Eleven.demo.domain. ...
- 深入浅出Mybatis系列(二)---Mybatis入门
一.Mybatis环境搭建及简单实例 1. 新建web项目, 添加依赖包:mybatis包.数据库驱动包(我使用的是mysql).日志包(我使用的是log4j), 由于我的是maven项目, 那么添加 ...
- 【Java资源免费分享,网盘自己拿】
JavaSE: Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xb Java毕向东:链接:https://pan.baidu.com/s/1ggzHk ...
- JAVA视频链接
Java基础Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xb Java刘意:链接:https://pan.baidu.com/s/1kVZQCqr密 ...
- Java视频教程免费分享(网盘直接取)
Java基础 Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xb Java刘意:链接:https://pan.baidu.com/s/1kVZQCqr ...
- Spring框架第一天(搭建项目)
Spring框架 1.简介 1.1 Spring是什么 一个开源的框架,是JavaEE开源框架 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以IoC(Inve ...
- MyBatis数据库连接的基本使用-补充Mapper映射器
补充 Mapper映射器的使用: Mapper映射器,google添加.Mapper映射器是将mapper.xml中配置的sql id,parameterType和resultMap按照规则一一映射到 ...
- MyBatis数据库连接的基本使用-补充
补充1 MyBatis使用过程中,返回值类型可能是Map,不一定是实体类 返回查询结果也可以是一个Map,不一定是实体类 (1)mybatis会先将查询结果返回为一个map,字段名作为key,字段值 ...
- Mybatis源码学习第六天(核心流程分析)之Executor分析(补充)
补充上一章没有讲解的三个Executor执行器; 还是贴一下之前的代码吧;我发现其实有些分析注释还是写在代码里面比较好,方便大家理解,之前是我的疏忽,不好意思 @Override public < ...
- MyBatis的关联关系补充 多对多 继承
多对多 一个学生有多个课程 一个课程有多个学生 思路分析 :使用一个中间表 用学生表和课程表的主键作为中间表的联合主键 1数据库表的设计 课程表 学生表 中间表 2/实体类的设计 课程类 public ...
随机推荐
- Linu部署服务启停脚本
Linux项目部署启停 WEB应用(WAR包)部署 实际开发中,难免遇见新业务项目构建.项目重构(重新优化整个项目的架构,相当于重写),也可能是项目拆分多个模块,也可能部分拆分,但项目的模块化分离,就 ...
- webpack配置css预处理
webpack默认只支持js的打包,不支持其它类型,为了让它支持样式的打包就需要加载一些loader 打包css文件 在webpack中配置对应的loader 在入口js文件中通过import导入样式 ...
- 浅谈ChatGPT模型中的惩罚机制
本文由ChatMoney团队出品 在探讨ChatGPT模型的文本生成能力时,除了采样算法,惩罚机制同样扮演着至关重要的角色.这些机制不仅影响生成文本的多样性和创意性,还为我们提供了调整文本风格和质量的 ...
- 幻想领域图床系统V1.2正式版发布
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 幻想领域图床系统V1.2正式版发布 日期:2018-4-1 ...
- 为什么Python的多线程是假的呢?
https://www.zhihu.com/question/23474039/answer/269526476
- Vim编辑的小技巧
Vim编辑的小技巧 如何快速纠错 Ctrl + h 删除上一个字符, Ctrl + w 删除上一个单词, Ctrl + u 删除当前行. 从编辑模式快速切换到Nornal模式 1.Esc 2.Ctrl ...
- 记录一次EF实体跟踪错误
记录一次EF实体跟踪错误 前言 在我写文章编辑接口的,出现了一个实体跟踪的错误,详情如下 System.InvalidOperationException: The instance of entit ...
- 复习 - js基础语法
今天继续复习了js基础语法 最后一天了 学完了进入dom bom的复习 今天发现了很多经典案例 我都不知道一个随笔放的完不 逻辑性感觉还是蛮强的 主要就是作用域 对象 内置对象等一些的操作嘛 话不多 ...
- Salt安装部署
Salt安装部署 一:salt简介 早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护.系统管理员面临的问题主要是1.系统配置管理,2.远程执行命令,因此诞生了 ...
- rem适配布局
没有一张图解决不了的事 https://www.processon.com/mindmap/5e3a589be4b021dc2899f511 <link rel="stylesheet ...