MyBatis

MyBatis源码解析 ——MyBatis初始化过程解析

巧了我就是萌 提交于 2020-12-18 06:41:06
创建项目 为了看清楚MyBatis的整个初始化过程,先创建一个简单的Java项目,目录结构如下图所示: 以下代码均有代码生成器生成 Student实体类 package com.softtool.mybatis.dao; import java.io.Serializable; public class Student implements Serializable { private Integer id; private String name; private Integer age; private String sex; private static final long serialVersionUID = 1L; public Student(Integer id, String name, Integer age, String sex) { this.id = id; this.name = name; this.age = age; this.sex = sex; } public Student() { super(); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return

灵魂拷问,AQS 是个啥???

谁说我不能喝 提交于 2020-12-18 04:27:55
每天早上 七点三十 ,准时推送干货 啥?你连 AQS 是啥都不知道? 如果想要精通 Java 并发的话, AQS 是一定要掌握的。今天跟着阿粉一起搞一搞 基本概念 AQS 是 AbstractQueuedSynchronizer 的简称,翻译成中文就是 抽象队列同步器 ,这三个单词分开来看: Abstract (抽象):也就是说, AQS 是一个抽象类,只实现一些主要的逻辑,有些方法推迟到子类实现 Queued (队列):队列有啥特征呢?先进先出( FIFO )对吧?也就是说, AQS 是用先进先出队列来存储数据的 Synchronizer (同步):即 AQS 实现同步功能 以上概括一下, AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单而又高效地构造出同步器。 AQS 内部实现 AQS 队列在内部维护了一个 FIFO 的双向链表,如果对数据结构比较熟的话,应该很容易就能想到,在双向链表中,每个节点都有两个指针,分别指向直接前驱节点和直接后继节点。使用双向链表的优点之一,就是从任意一个节点开始都很容易访问它的前驱节点和后继节点。 在 AQS 中,每个 Node 其实就是一个线程封装,当线程在竞争锁失败之后,会封装成 Node 加入到 AQS 队列中;获取锁的线程释放锁之后,会从队列中唤醒一个阻塞的 Node (也就是线程) AQS 使用 volatile 的变量

14-springboot系列: 邮件发送

隐身守侯 提交于 2020-12-18 03:17:19
今天讲解springboot的 spring-boot-starter-mail 邮件发送,业务场景: 注册验证,忘记密码或者是给用户发送营销信息 等。 1、pom配置 < dependencies > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-mail </ artifactId > </ dependency > </ dependencies > 2、application.propertis配置邮箱 #邮箱服务器地址 spring.mail.host=smtp.163.com #用户名 spring.mail.username= z13128600812@ 163 .com #开通授权码 spring.mail.password=********** spring.mail. default -encoding=UTF- 8 spring.mail

mybatis连接MySQL乱码

我怕爱的太早我们不能终老 提交于 2020-12-18 02:42:40
首先我想说这个问题.对于我来说坑了一下午 首先问题就是我用mybatispuls 连接mysql 第一步 jdbc:mysql: // localhost:3306/11e?useUnicode=true&characterEncoding=UTF-8 先把连接改了.设置utf-8 ,但是发现问题并没有解决 第二步. 然后我在是不是没有没有配置my.cnf 查找MySQL用到的my.cnf ps aux|grep mysql|grep ' my.cnf ' 发现没有找到. mysql --help |grep ' my.cnf ' 使用这个命令发现有 在etc/下创建 my.cnf # Default Homebrew MySQL server config [mysqld] # Only allow connections from localhost bind -address = 127.0 . 0.1 default -character- set = utf8 [mysqld] character - set -server= utf8 init_connect = ’SET NAMES utf8’ [client] default -character- set =utf8mb4 mysql: [Warning] World-writable config file '

我设计了一个牛逼的本地缓存!

百般思念 提交于 2020-12-17 20:54:24
点击上方 java项目开发 , 选择 设为星标 优质文章,及时送达 -- 作者:ksfzhaohui http://dwz.win/Ws4 最近在看Mybatis的源码,刚好看到缓存这一块,Mybatis提供了一级缓存和二级缓存;一级缓存相对来说比较简单,功能比较齐全的是二级缓存,基本上满足了一个缓存该有的功能;当然如果拿来和专门的缓存框架如ehcache来对比可能稍有差距;本文我们将来整理一下实现一个本地缓存都应该需要考虑哪些东西。 考虑点 考虑点主要在数据用何种方式存储,能存储多少数据,多余的数据如何处理等几个点,下面我们来详细的介绍每个考虑点,以及该如何去实现; 1.数据结构 首要考虑的就是数据该如何存储,用什么数据结构存储,最简单的就直接用Map来存储数据;或者复杂的如redis一样提供了多种数据类型哈希,列表,集合,有序集合等,底层使用了双端链表,压缩列表,集合,跳跃表等数据结构; 2.对象上限 因为是本地缓存,内存有上限,所以一般都会指定缓存对象的数量比如1024,当达到某个上限后需要有某种策略去删除多余的数据; 3.清除策略 上面说到当达到对象上限之后需要有清除策略,常见的比如有LRU(最近最少使用)、FIFO(先进先出)、LFU(最近最不常用)、SOFT(软引用)、WEAK(弱引用)等策略; 4.过期时间 除了使用清除策略,一般本地缓存也会有一个过期时间设置

教你设计一个超牛逼的本地缓存!

瘦欲@ 提交于 2020-12-17 20:54:03
点击上方“ 掌上编程 ”,选择“ 置顶或者星标 ” 优质文章第一时间送达! 来源:ksfzhaohui juejin.im/post/5dd942e15188257324096fe7 前言 考虑点 如何实现 总结 前言 最近在看Mybatis的源码,刚好看到缓存这一块,Mybatis提供了一级缓存和二级缓存;一级缓存相对来说比较简单,功能比较齐全的是二级缓存,基本上满足了一个缓存该有的功能;当然如果拿来和专门的缓存框架如ehcache来对比可能稍有差距;本文我们将来整理一下实现一个本地缓存都应该需要考虑哪些东西。 考虑点 考虑点主要在数据用何种方式存储,能存储多少数据,多余的数据如何处理等几个点,下面我们来详细的介绍每个考虑点,以及该如何去实现; 1.数据结构 首要考虑的就是数据该如何存储,用什么数据结构存储,最简单的就直接用Map来存储数据;或者复杂的如redis一样提供了多种数据类型哈希,列表,集合,有序集合等,底层使用了双端链表,压缩列表,集合,跳跃表等数据结构; 2.对象上限 因为是本地缓存,内存有上限,所以一般都会指定缓存对象的数量比如1024,当达到某个上限后需要有某种策略去删除多余的数据; 3.清除策略 上面说到当达到对象上限之后需要有清除策略,常见的比如有LRU(最近最少使用)、FIFO(先进先出)、LFU(最近最不常用)、SOFT(软引用)、WEAK(弱引用

手把手教设计一个牛逼的Java本地缓存

瘦欲@ 提交于 2020-12-17 19:28:40
点击蓝色“ Java后端编程 ”关注我哟 加个“ 星标 ”,每天下午 17:33,干货推送! 来源: ksfzhaohui | http://dwz.win/Ws4 最近在看Mybatis的源码,刚好看到缓存这一块,Mybatis提供了一级缓存和二级缓存;一级缓存相对来说比较简单,功能比较齐全的是二级缓存,基本上满足了一个缓存该有的功能;当然如果拿来和专门的缓存框架如ehcache来对比可能稍有差距;本文我们将来整理一下实现一个本地缓存都应该需要考虑哪些东西。 考虑点 考虑点主要在数据用何种方式存储,能存储多少数据,多余的数据如何处理等几个点,下面我们来详细的介绍每个考虑点,以及该如何去实现; 1.数据结构 首要考虑的就是数据该如何存储,用什么数据结构存储,最简单的就直接用Map来存储数据;或者复杂的如redis一样提供了多种数据类型哈希,列表,集合,有序集合等,底层使用了双端链表,压缩列表,集合,跳跃表等数据结构; 2.对象上限 因为是本地缓存,内存有上限,所以一般都会指定缓存对象的数量比如1024,当达到某个上限后需要有某种策略去删除多余的数据; 3.清除策略 上面说到当达到对象上限之后需要有清除策略,常见的比如有LRU(最近最少使用)、FIFO(先进先出)、LFU(最近最不常用)、SOFT(软引用)、WEAK(弱引用)等策略; 4.过期时间 除了使用清除策略

Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute

和自甴很熟 提交于 2020-12-17 08:28:45
继续前面的章节,这里我介绍下注解,其实Java注解跟.NetCore的特性标签类似,下面我们通过代码来说明 Java自定义注解 首先我先说下Java注解需要使用的注解 @Target(value = ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented Taget:指定注解在什么地方生效,作用于什么对象上,参数很多这里把源码拉出来了,每一个的意思就不过多介绍,一看就明白 public enum ElementType { /** 类、接口(包括注释类型)或枚举声明 */ TYPE, /** 字段声明(包括枚举常量) */ FIELD, /** 方法声明 */ METHOD, /** 形式参数声明 */ PARAMETER, /** 构造函数声明 */ CONSTRUCTOR, /** 局部变量声明 */ LOCAL_VARIABLE, /** 注释类型声明 */ ANNOTATION_TYPE, /** 程序包声明 */ PACKAGE, /** * 类型参数声明 * * @since 1.8 */ TYPE_PARAMETER, /** * 使用类型 * * @since 1.8 */ TYPE_USE } public enum RetentionPolicy { /** 注解将被编译器丢弃 */

spring+springMVC+mybatis框架搭建

微笑、不失礼 提交于 2020-12-17 00:46:57
一、项目结构 创建一个Dynamic Entities from Tables工程, 命名shop 二、向WebContent下的WEB-INF下的lib中导入相关jar包 三、配置文件 1.srcsrc下面创建:applicationContext.xml,添加约束 并配置相应的视图解释器,扫描器,拦截器等 2.srcsrc下面创建:Spring的配置文件applicationContext.xml 四、数据库连接 1.src下面创建:jdbc.properties 2.springMVC配置文件src下面创建:springmvc-config.xml(约束同spring配置文件的约束) 四、配置文件---web.xml 五、测试 创建UserController类 运行后得到 来源: oschina 链接: https://my.oschina.net/u/4092743/blog/3019440

2020年,阿里内推Java后端面试题,文末附面试福利。

穿精又带淫゛_ 提交于 2020-12-16 13:57:49
阿里一面题目: osi七层网络模型,五层网络模型,每次层分别有哪些协议 死锁产生的条件, 以及如何避免死锁,银行家算法,产生死锁后如何解决 如何判断链表有环 虚拟机类加载机制,双亲委派模型,以及为什么要实现双亲委派模型 虚拟机调优参数 拆箱装箱的原理 JVM垃圾回收算法 CMS G1 hashset和hashmap的区别,haspmap的底层实现put操作,扩容机制,currenthashmap如何解决线程安全,1.7版本以及1.8版本的不同 md5加密的原理 有多少种方法可以让线程阻塞,能说多少说多少 synchronized和reetrantlock锁 AQS同步器框架,countdowmlatch,cyclebarrier,semaphore,读写锁 阿里二面题目: B-Tree索引,myisam和innodb中索引的区别 BIO和NIO的应用场景 讲讲threadlocal 数据库隔离级别,每层级别分别用什么方法实现,三级封锁协议,共享锁排它锁,mvcc多版本并发控制协议,间隙锁 数据库索引?B+树?为什么要建索引?什么样的字段需要建索引,建索引的时候一般考虑什么?索引会不会使插入、删除作效率变低,怎么解决? 数据库表怎么设计的?数据库范式?设计的过程中需要注意什么? 共享锁与非共享锁、一个事务锁住了一条数据,另一个事务能查吗? Spring bean的生命周期