MyBatis

mybatis - mapper.java 的创建

假装没事ソ 提交于 2020-02-12 22:14:57
一. Mapper.java 创建过程 在前面注册 bean 的时候, 对beanClass 进行了替换, 为 MapperFactoryBean. 那么创建实例的时候, 会调用 MapperFactoryBean 的 getObject() 方法得到实例. @Override public T getObject() throws Exception { return getSqlSession().getMapper(this.mapperInterface); } public SqlSession getSqlSession() { return this.sqlSession; } 这里的的 sqlSession 就是 前面在配置类中创建的 SqlSessionTemplate 实例. 所以 getMapper 调用的就是 SqlSessionTemplate 的 getMapper 方法. 具体调用过程有点曲折, 最后会调用 MapperRegistry 的 getMapper 方法 // SqlSessionTemplate.java @Override public <T> T getMapper(Class<T> type) { return getConfiguration().getMapper(type, this); } | | \|/ //

Day39——MyBatis整合第三方缓存

五迷三道 提交于 2020-02-12 19:44:16
一. 知识储备 前往免费下载源码 二. 例子 ehcache.xml <?xml version="1.0" encoding="UTF-8"?> < ehcache xmlns: xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi: noNamespaceSchemaLocation = " ../config/ehcache.xsd " > <!-- 磁盘保存路径 --> < diskStore path = " D:\atguigu\ehcache " /> < defaultCache maxElementsInMemory = " 1000 " maxElementsOnDisk = " 10000000 " eternal = " false " overflowToDisk = " true " timeToIdleSeconds = " 120 " timeToLiveSeconds = " 120 " diskExpiryThreadIntervalSeconds = " 120 " memoryStoreEvictionPolicy = " LRU " > </ defaultCache > </ ehcache > <!-- 属性说明: l diskStore:指定数据在磁盘中的存储位置。 l

Mybatis学习----入门案例

柔情痞子 提交于 2020-02-12 19:31:44
MyBatis 框架概述 mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql语句本身, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 mybatis通过xml 或注解的方式将要执行的各种statement配置起来,并通过java对象和statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并 返回。 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc进行了封装,屏蔽了 jdbc api 底层访问细节,使我 们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。 为了我们能够更好掌握框架运行的内部过程,并且有更好的体验,下面我们将从自定义 Mybatis 框架开始来 学习框架。此时我们将会体验框架从无到有的过程体验,也能够很好的综合前面阶段所学的基础。 ORM思想: Object Relationl Mapping 对象关系映射 简单的说: 就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。 入门案例 项目结构: 数据库表: 依赖: < ? xml version = "1.0" encoding = "UTF-8" ? > <

mybatis - buildSqlSessionFactory()

半世苍凉 提交于 2020-02-12 18:58:53
buildSqlSessionFactory() 这个方法比较长, 干的事情也比较多. 包括一些别名, 插件, 类型处理器等的解析. 从主流程上来看, 最主要的其实是干了两件事:1. 对 mapper.xml 文件进行解析2. 使用 SqlSessionFactoryBuilder 创建 sqlSessionFactorymapper.xml的扫描工作不在这个方法里, 但是放到这里来看, 会更加清晰一点. 1. mapperLocation 的解析 @Bean @ConditionalOnMissingBean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); ......if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) { factory.setMapperLocations(this.properties.resolveMapperLocations()); } return factory.getObject(); } 在

TK mybatis SelectByPrimaryKey异常

送分小仙女□ 提交于 2020-02-12 18:09:01
今天在使用TK mybatis 插件时出现了一个奇怪的现象,当我调用selectByPrimaryKey(7)时,mybatis的sql日志打印为如下所示 ===> Preparing SELECT id,a, b, c FROM test WEHER id =? and a = ? and b = ? and c=? ===> Parameters: 7(Long),7(Long),7(Long),7(Long),7(Long) 然后我百度查了相似问题, 发现是PO类里没有给主键添加javax.persistence.@ID注解导致的 添加完后的sql打印为: ===> Preparing SELECT id,a, b, c FROM test WEHER id =? ===> Parameters: 7(Long) 来源: https://www.cnblogs.com/myblogs-miller/p/12299958.html

SpringBoot图文教程「概念+案例 思维导图」「基础篇上」

一个人想着一个人 提交于 2020-02-12 15:30:43
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 每个知识点配套自测面试题,学完技术自我测试 本文初学向,所以希望文中所有的代码案例都能敲一遍 大哥大姐新年好,点赞转发不要少 **文本已收录至GitHub开源仓库 Lu_JavaNodes 码云仓库地址 Lu_JavaNodes ,**包含教程涉及所有思维导图,案例代码和后续讲解视频,欢迎Star增砖添瓦。 前言 庚子鼠年,封村儿,在试过了睡觉,打麻将,做凉皮,做蛋糕之后, 我不由的陷入了对人生和社会的大思考 两年的开发经验和三年的大数据讲师经验告诉我 ,是时候写些什么了,我也早觉得有写些东西的必要了。我向来是不惮以最多的无聊揣测这个假期的,但我没想到……(不能再往下了,再往下真就算抄袭了) 于是决定将自己的的毕生功力汇聚整理成册, 写出《图文教程》系列Java技术学习秘籍 ,本功法力求 『图文并茂』 『简单易懂』,概念和代码实践相结合,每个知识点辅助以自测面试题,希望大家通过本系列教程能够快乐学Java,从练气到飞升。 本期选择的技术是SpringBoot ,SpringBoot 现如今已是Java程序员的必备修炼功法,具备SpringBoot大成的开发功力,才能行走江湖,纵横大厂小派而不惧需求。 在正式开始学习之前,先通过思维导图了解本教程的功法纲要 简单说明,教程分为基础篇

SpringBoot图文教程「概念+案例 思维导图」「基础篇上」

跟風遠走 提交于 2020-02-12 12:35:45
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 每个知识点配套自测面试题,学完技术自我测试 本文初学向,所以希望文中所有的代码案例都能敲一遍 大哥大姐新年好,点赞转发不要少 **文本已收录至GitHub开源仓库 Lu_JavaNodes 码云仓库地址 Lu_JavaNodes ,**包含教程涉及所有思维导图,案例代码和后续讲解视频,欢迎Star增砖添瓦。 前言 庚子鼠年,封村儿,在试过了睡觉,打麻将,做凉皮,做蛋糕之后, 我不由的陷入了对人生和社会的大思考 两年的开发经验和三年的大数据讲师经验告诉我 ,是时候写些什么了,我也早觉得有写些东西的必要了。我向来是不惮以最多的无聊揣测这个假期的,但我没想到……(不能再往下了,再往下真就算抄袭了) 于是决定将自己的的毕生功力汇聚整理成册, 写出《图文教程》系列Java技术学习秘籍 ,本功法力求 『图文并茂』 『简单易懂』,概念和代码实践相结合,每个知识点辅助以自测面试题,希望大家通过本系列教程能够快乐学Java,从练气到飞升。 本期选择的技术是SpringBoot ,SpringBoot 现如今已是Java程序员的必备修炼功法,具备SpringBoot大成的开发功力,才能行走江湖,纵横大厂小派而不惧需求。 在正式开始学习之前,先通过思维导图了解本教程的功法纲要 简单说明,教程分为基础篇

MyBatis-复习篇

南笙酒味 提交于 2020-02-12 11:31:36
1.Mybatis工作流程 2.封装方法 3.采用映射方法实现接口查询 4.接口配置文件 讲述增删改查(源代码) (1)模糊查询的方法 (2)Mapper生命周期 5.pojo实体类中的字段和数据库中的字段不一样 (1)换一个别名 (2)、使用返回类型 resultMap 6.Mybatis分页查询 (1).通过UserMapper.xml配置来实现 UserMapper.xml配置: 测试类: (2).通过Java代码实现分页 (不建议使用,但是快) (3)分页可以使用其他方法 7.按照查询嵌套处理(多对一复杂查询) (1).通过子查询来完成 (2).按照结果嵌套查询--联表查询 8.类似于联表查询 一对多 联表查询 小结 提取SQL片段: 引用SQL片段: 测试 如下 10.二级缓存 注意:采用了二级缓存会出现序列化的问题 缓存工作流程图 结论 1.Mybatis工作流程 2.封装方法 SqlSessionFactoryUtils 里面的openSession 3.采用映射方法实现接口查询 UserMapper userMapper =session.getMapper(UserMapper.class); List<User> userList =userMapper.getList(); 4.接口配置文件 讲述增删改查(源代码) (1)模糊查询的方法 (2

SpringBoot2.x学习-集成Mybatis框架

a 夏天 提交于 2020-02-12 11:31:19
一、添加启动依赖 在SpringBoot工程的maven文件里面添加依赖如下: <properties> <java.version>1.8</java.version> <druid.version>1.1.13</druid.version> <mybatis.version>2.1.0</mybatis.version> <druid.version>1.1.21</druid.version> </properties> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> 这个启动器相关依赖如下 二、配置 1.在启动类*Application配置@MapperScan注解,告诉Spring Boot扫描哪些包下面的Mapper接口。如下 @SpringBootApplication @MapperScan(basePackages = "com.soft.fireadmin.platform.*.dao") public class FireAdminApplication { public static

mybatis中的#和$的区别

眉间皱痕 提交于 2020-02-12 08:20:40
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".    2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.    3. #方式能够很大程度防止sql注入。    4.$方式无法防止Sql注入。 5.$方式一般用于传入数据库对象,例如传入表名.    6.一般能用#的就别用$. MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换 默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用: ORDER BY ${columnName} 这里MyBatis不会修改或转义字符串。 重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击