MyBatis学习笔记
MyBatis学习笔记
飞过秋天
一曲肝肠断,天涯何处觅知音。
展开
-
二十八、自定义缓存-Ehcache
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7NxEhcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。Ehcache最初是由Greg Luck于2003年开始开发。2009年,该项目被Terracotta购买。软件仍然是开源,但一些新的主要功能(例如,快速可重启性.原创 2020-12-02 08:30:46 · 178 阅读 · 0 评论 -
二十七、Mybatis缓存原理
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、Mybatis缓存原理图原创 2020-12-02 08:27:15 · 107 阅读 · 0 评论 -
二十六、二级缓存
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、概念https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#cache二级缓存也叫全局缓存,一级缓存作用域太低了,所有诞生了二级缓存。基于namespace级别的缓存。一个名称空间,对应一个二级缓存。工作机制:一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中。如果当前会话关闭了,这个会话对应的一级缓存就没了。但是我们想要的是,会话.原创 2020-12-02 08:24:43 · 212 阅读 · 0 评论 -
二十五、一级缓存
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx一级缓存也叫本地缓存:与数据库同一次会话期间查询到的数据会放在本地缓存中。以后如果需要获取相同的数据,直接从缓存中拿,没必须在去查询数据库。1、一级缓存测试相同的查询@Testpublic void test01(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper.原创 2020-12-02 08:18:43 · 136 阅读 · 0 评论 -
二十四、缓存简介
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、简介存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询。从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。2、为什么使用缓存减少和数据库的交互次数,减少系统开销,提高系统效率。3、什么样的数据能使用缓存经常查询并且不经常改变的数据。4、Mybatis缓存Mybatis包含一个非常强大的查询缓存特性,它可.原创 2020-12-02 08:13:42 · 110 阅读 · 0 评论 -
二十三、动态SQL之foreach
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、SQL片段公共的部分抽取出来复用。sql和include标签mapper文件修改<!--复用sql--><sql id="if-title-author"> <if test="title != null"> title = #{title} </if> <if test="author != .原创 2020-12-01 09:22:54 · 1036 阅读 · 0 评论 -
二十二、动态SQL常用标签
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、choose、when、otherwise有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。测试mapper文件<!--choose标签--><select id="queryBlogByChoose" parameterType="map" re.原创 2020-12-01 09:20:28 · 242 阅读 · 0 评论 -
二十一、动态SQL之IF语句
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、接口类BlogMapper.java新增方法/** * 查询信息 * @param map * @return */List<Blog> queryBlog(Map map);2、mapper文件BlogMapper.xml修改<select id="queryBlog" parameterType="map" resultType="Blog"> .原创 2020-12-01 09:17:31 · 297 阅读 · 0 评论 -
二十、动态SQL环境搭建
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、什么是动态SQLhttps://mybatis.org/mybatis-3/zh/dynamic-sql.html动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。使用动态 SQL .原创 2020-12-01 09:12:39 · 126 阅读 · 0 评论 -
十九、一对多的处理
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx一个老师拥有多个学生。对于老师而言,就是一对多的关系。1、实体类修改Student.java/** * @Description TODO * @Author Administrator * @Date 2020/11/28 13:38 */@Datapublic class Student { private int id; private String name.原创 2020-12-01 09:09:46 · 81 阅读 · 0 评论 -
十八、多对一的处理
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、需求查询所有的学生信息,以及对应的老师的信息2、接口StudentMapper.java新增方法/** * @Description TODO * @Author Administrator * @Date 2020/11/28 13:42 */public interface StudentMapper { /** * 查询所有的学生信息,以及对应的老师的信息.原创 2020-12-01 09:04:40 · 144 阅读 · 0 评论 -
十七、复杂查询环境搭建
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx多对一:关联一对多:集合1、数据库和表建立CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8;INSERT INTO teacher(`id`, `name`).原创 2020-12-01 09:00:25 · 158 阅读 · 0 评论 -
十六、Lombok的使用
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7NxProject Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with one annotation your class has a.原创 2020-12-01 08:58:11 · 227 阅读 · 0 评论 -
十五、注解增删改查
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、自动提交事务我们可以在工具类创建的时候实现自动提交事务!/** * 获取SqlSession * @return */public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession();}openSession默认未实现事务。@Overridepublic SqlSessio.原创 2020-12-01 08:54:21 · 275 阅读 · 0 评论 -
十四、Mybatis执行流程剖析
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、流程图原创 2020-12-01 08:49:55 · 137 阅读 · 0 评论 -
十三、使用注解开发
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、Java为什么要面向接口编程接口泛指实体把自己提供给外界的一种抽象化物,用以由内部操作分离出外部「沟通方法」,使其能被内部修改而不影响外界其他实体与其交互的方式。在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了(通俗的说,就是你会调接口就完事了,接口背后具体怎么实现的你不用管);而各个对象之间.原创 2020-11-30 11:10:58 · 125 阅读 · 0 评论 -
十二、分页
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、为什么需要分页数据量太大。分页展示,减少数据的处理量。2、使用limit分页select * from user limit startIndex,pageSize从第startIndex+1条开始查,每页显示pageSize条数据。select * from user limit pageSize等价于select * from user limit 0,pageSize从第.原创 2020-11-30 11:06:51 · 93 阅读 · 0 评论 -
十一、日志
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx如果数据库操作出现异常,需要排错。日志就是最好的助手!曾经:sout、debug。现在:日志工厂。1、日志工厂设置名描述有效值默认值logImpl指定 MyBatis 所用日志的具体实现,未指定时将自动查找。SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOG.原创 2020-11-30 11:01:46 · 227 阅读 · 1 评论 -
十、ResultMap结果集映射
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx解决属性名和字段名不一致的问题1、测试数据库字段CREATE TABLE user ( id INT(20) NOT NULL, name VARCHAR(30) DEFAULT NULL, pwd VARCHAR(30) DEFAULT NULL, PRIMARY KEY(id))ENGINE=INNODB DEFAULT CHARSET=UTF8;实体类:其中密码字段名不一样.原创 2020-11-30 10:54:13 · 136 阅读 · 0 评论 -
九、生命周期和作用域
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx不同作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。1、SqlSessionFactoryBuilder这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder.原创 2020-11-30 10:52:07 · 256 阅读 · 0 评论 -
八、配置之映射器说明
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7NxMapperRegistry:注册绑定我们的mapper文件未注册会报错:org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserMapper is not known to the MapperRegistry1、使用相对于类路径的资源引用(推荐使用)<mappers> &.原创 2020-11-30 10:50:05 · 116 阅读 · 0 评论 -
七、配置之设置优化
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、常用配置这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。设置名描述有效值默认值cacheEnabled全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。true | falsetruelazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟.原创 2020-11-30 10:44:24 · 192 阅读 · 0 评论 -
六、配置之别名优化
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、类型别名(typeAliases)类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。修改核心配置文件<!--引入外部配置文件--><properties resource="db.properties"> <property name="username" value="root"/> .原创 2020-11-29 15:31:05 · 108 阅读 · 0 评论 -
五、配置之属性优化
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、核心配置文件mybatis-config.xmlMyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。官方文档https://mybatis.org/mybatis-3/zh/configuration.html环境配置(environments)MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多.原创 2020-11-29 15:25:37 · 159 阅读 · 0 评论 -
四、Map和模糊查询扩展
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、万能Map实体类或者数据库中的表字段或者参数过多,考虑使用Map。UserMapper.java接口中新增一个方法/** * 使用map传入参数查询用户 * @param map * @return */User getUserById2(Map<String,Object> map);/** * 使用map参数插入用户 * @param map 传入Map.原创 2020-11-29 15:17:17 · 175 阅读 · 0 评论 -
三、增删改查实现
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、namespacenamespace中的包名要和Dao/Mapper接口的包名一致!<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybati.原创 2020-11-29 15:10:39 · 387 阅读 · 0 评论 -
二、第一个Mybatis程序
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、搭建环境创建MySQL数据库及表CREATE DATABASE mybatis;USE mybatis;CREATE TABLE user ( id INT(20) NOT NULL, name VARCHAR(30) DEFAULT NULL, pwd VARCHAR(30) DEFAULT NULL, PRIMARY KEY(id))ENGINE=INNODB DEFAU.原创 2020-11-29 14:58:26 · 94 阅读 · 0 评论 -
一、什么是Mybatis
狂神说Java:https://www.bilibili.com/video/BV1NE411Q7Nx1、环境准备JDK环境>java -versionjava version "1.8.0_121"Java(TM) SE Runtime Environment (build 1.8.0_121-b13)Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)MySQL环境Server version: 8..原创 2020-11-29 14:52:30 · 121 阅读 · 0 评论