MyBatis

Java中不可或缺的50个小技巧,好用!

拥有回忆 提交于 2020-12-24 01:01:27
《Effective JavaJava》名著,必读。如果能严格遵从本文的原则,以编写API的质量来苛求自己的代码,会大大提升编码素质。 以下内容只记录了我自己整理的东西,还是建议读原文。为了聚焦知识点,一些说明故意忽略掉了。相当于是一篇摘要。 1、考虑用静态工厂方法替代构造函数 例子: Integer.valueOf(“1”)、Boolean.valueOf(“true”)等。 优势: 可读性高(方法名) 性能(不一定创建对象) 灵活性高 下面针对三个优势进行一些解读。 可读性高 new Point(x,y)和Point.at(x,y)、Point.origin()。构造函数只能看出两个参数,不知其意,后者更易理解。 性能 在某些情况下,可以事先进行实例化一些对象,调用时直接调用即可,不需要进行改变。比如,Boolean。 public final class Boolean implements Serializable, Comparable<Boolean> { // 预先设置两个对象 public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); public Boolean(boolean var1) { this

MyBatis 源码分析系列文章合集

拈花ヽ惹草 提交于 2020-12-23 00:33:58
1.简介 我从七月份开始阅读MyBatis源码,并在随后的40天内陆续更新了7篇文章。起初,我只是打算通过博客的形式进行分享。但在写作的过程中,发现要分析的代码太多,以至于文章篇幅特别大。在这7篇文章中,有4篇文章字数超过了1万,最长的一篇文章约有2.7万字(含代码)。考虑到超长文章对读者不太友好,以及拆分文章工作量也不小等问题。遂决定将博文整理成电子书,方便大家阅读。 经过两周紧张的排版,《一本小小的MyBatis源码分析书》诞生了。本书共7章,约300页。本书以电子书的形式发布,大家可自由的下载。下载地址如下: 百度网盘: 点击下载 百度文库: 审核中,这里先放上我的个人主页 CSDN: 点击下载 测试代码: GitHub 下面来看看本书章节的缩略图。 2.目录 第1章 MyBatis入门 1.1 MyBatis是什么 1.2 为什么要使用MyBatis 1.2.1 使用MyBatis访问数据库 1.2.2 使用JDBC访问数据库 1.2.3 使用SpringJDBC访问数据库 1.2.4 使用Hibernate访问数据库 1.3如何使用MyBatis 1.3.1 单独使用MyBatis 1.3.2 在Spring中使用MyBatis 1.4 本章小结 第2章 配置文件解析过程 2.1 配置文件解析过程分析 2.1.1 解析节点 2.1.2 解析节点 2.1.3

阿里的御用框架,MyBatis与设计模式的激情碰撞

↘锁芯ラ 提交于 2020-12-23 00:23:08
前言 Java程序员以前连接数据库是这样的 现在连接数据库是这样的 在传统的JDBC 实现中,我们需要把查询过程写在Java 类中,这样非常不便于后期维护。而使用Mybatis 则可以将查询语句配置在配置文件中,只需要维护好映射关系即可。 Mybatis是一个开源的轻量级半自动化ORM框架,使得面向对象应用程序与关系数据库的映射变得更加容易。熟悉Mybatis的都知道,其源码里涉及到非常多的设计模式,比如 设计模式 Builder模式 : 例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder; 工厂模式: 例如SqlSessionFactory、ObjectFactory、MapperProxyFactory; 单例模式: 例如ErrorContext和LogFactory; 代理模式: Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader 包 使用了cglib或者javassist达到延迟加载的效果; 组合模式: 例如SqlNode和各个子类ChooseSqlNode等; 模板方法模式: 例如BaseExecutor和SimpleExecutor

Java编程在线学习靠谱吗?能学会吗?

落爺英雄遲暮 提交于 2020-12-22 22:24:33
  Java编程在线学习靠谱吗?能学会吗?在线学习Java的方式靠不靠谱主要看机构的课程,和个人的努力情况。费用、时间上有压力建议选择在线学习,但在线学习对自控能力要求更高,坚持看完整期课程需要自律。如果找到一家靠谱的在线学习平台课程内容有保障,那么学习的方向不会出错。   重点是看Java在线培训机构的课程大纲,那么Java编程在线学习内容有哪些呢?   1、Java核心库   JavaSE的内容包括:环境搭建、基础语法、面向对象、数组、集合、常用类、IO流、反射机制、网络编程。   2、MySQL数据库   搞定一门数据库相关的课程,如:MySQL、Oracle,搞定一个就可以了,目前互联网公司都在使用MySQL,学习MySQL数据库,小巧轻盈,免费,由于互联网公司的项目访问量比较大,所以一般会搭建数据库的集群,可以一个数据库不够,所以需要搭建数据库集群,应付高并发。   3、WEB前端   从事Java开发JavaEE开发,主要开发的系统结构是B/S结构的,B指的是Browser,S指的是Server。要开发这种系统,B端要会,S端也要精通。WEB前端的学习就是学习B端技术。包括:HTML、CSS、JavaScript(JS)、jQuery框架。   4、WEB后端   WEB后端其实可以是很多种不同的编程语言,例如:PHP、C、C++、Java

Mybatis 标签合集

心不动则不痛 提交于 2020-12-22 22:23:39
1、定义sql语句 增:<insert> 删:<delete> 改:<update> 查:<select> 其中select最复杂。共有id、parameterType属性,此外select还有resultType、ResultMap 2、sql标签 定义通用的sql语句,以便sql引入:<sql> 引入<sql>:<include> 3、resultMap中的标签 实现列与实体属性的映射:<resultMap> 多对多:<collection> 一对一:<association> 4、动态sql标签 单条件:<if> 多条件:<choose> <when> <otherwise> 用来处理sql连接:<trim> 处理where条件:<where> 更新语句:<set> 循环语句,在in里面使用:<foreach> 定义上下文变量:<bind> 来源: oschina 链接: https://my.oschina.net/u/4312211/blog/4821429

MyBatis学习笔记二:增删改查

老子叫甜甜 提交于 2020-12-22 05:03:13
MyBatis基本的增删改查操作,有图有真相,项目截图[ MyBatis-0200 ] 项目依赖及表参阅 上一篇 [user.xml] <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 命名空间:通常是Mapper接口的完整类路径,在MyBatis3.x中不可省略 --> <mapper namespace="net.yeah.likun_zhang.mapper.IUserMapper"> <!-- ======================================== eviction : 回收方式( LRU – 最近最少使用的:移除最长时间不被使用的对象(默认)。 FIFO – 先进先出:按对象进入缓存的顺序来移除它们。 SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。 WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。 ) flushInterval : 可以被设置为任意的正整数,而且它们代表一个合理的毫秒 形式的时间段。默认情况是不设置,也就是没有刷新间隔

Java多线程访问Synchronized同步方法的八种使用场景

 ̄綄美尐妖づ 提交于 2020-12-22 01:50:58
简介 本文将介绍7种同步方法的访问场景,我们来看看这七种情况下,多线程访问同步方法是否还是线程安全的。这些场景是多线程编程中经常遇到的,而且也是面试时高频被问到的问题,所以不管是理论还是实践,这些都是多线程场景必须要掌握的场景。 八种使用场景: 接下来,我们来通过代码实现,分别判断以下场景是不是线程安全的,以及原因是什么。 两个线程同时访问同一个对象的同步方法 两个线程同时访问两个对象的同步方法 两个线程同时访问(一个或两个)对象的静态同步方法 两个线程分别同时访问(一个或两个)对象的同步方法和非同步方法 两个线程访问同一个对象中的同步方法,同步方法又调用一个非同步方法 两个线程同时访问同一个对象的不同的同步方法 两个线程分别同时访问静态synchronized和非静态synchronized方法 同步方法抛出异常后,JVM会自动释放锁的情况 场景一:两个线程同时访问同一个对象的同步方法 分析:这种情况是经典的对象锁中的方法锁,两个线程争夺同一个对象锁,所以会相互等待,是线程安全的。 两个线程同时访问同一个对象的同步方法,是线程安全的。 1 我们在前文中已经讲过了。代码和详细讲解在《Java中synchronized实现对象锁的两种方式及原理解析》中的第二部分《方法锁》中,在此就不再重述了。 场景二:两个线程同时访问两个对象的同步方法 这种场景就是对象锁失效的场景

JVM GC耗时频频升高,我来教你排查

好久不见. 提交于 2020-12-22 00:13:32
1. 背景 多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 2. 知识回顾 2.1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。 老年代(Old Generation) 在新生代中经历了几次Minor GC仍然存活的对象,就会被放到老年代。Major GC针对的是老年代的垃圾回收。本文重点分析的CMS就是一种针对老年代的垃圾回收算法。另外Full GC是针对整堆(包括新生代和老年代)做垃圾回收的。 永久代(Perm) 主要存放已被虚拟机加载的类信息,常量,静态变量等数据。该区域对垃圾回收的影响不大,本文不会过多涉及。 2.2 CMS垃圾回收的6个重要阶段 1、initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。 2、concurrent-mark 并发标记阶段,由第一阶段标记过的对象出发,所有可达的对象都在本阶段标记。 3、concurrent-preclean 并发预清理阶段,也是一个并发执行的阶段。在本阶段,会查找前一阶段执行过程中

mybatis中:returned more than one row, where no more than one was expected.异常

淺唱寂寞╮ 提交于 2020-12-21 17:44:42
mybatis中:returned more than one row, where no more than one was expected.异常 参考文章: (1)mybatis中:returned more than one row, where no more than one was expected.异常 (2)https://www.cnblogs.com/simpledev/p/4253906.html 备忘一下。 来源: oschina 链接: https://my.oschina.net/u/4438370/blog/4818679

SSM框架之_Mybatis入门笔记,详解快速上手(二):增删改查篇

扶醉桌前 提交于 2020-12-21 14:27:34
CRUD 增删改操作,执行完sql后,需要提交事务,否则不生效。 查询不需要提交事务。 通过SqlSession对象提交事务。 参数格式 sql语句中填写参数的格式: #{} 在sql语句中填写参数时,如果接口中的参数是类,那么可以直接写类中的属性,如果不是类,接口中的方法参数是什么,就写什么。 select id:对应namespace中的方法名 resulteType:sqlj返回值结果的数据类型 parameterType:sql参数类型 步骤: 在接口中定义方法。 在mapper.xml中定义sql语句。 接口中的方法: List < User > getUserList ( ) ; sql语句 < select id = " getUserList " resultType = " top.jarvaniv.pojo.User " > select * from test.temp </ select > 执行: // 查询所有用户 @Test public void getUserListTest ( ) { SqlSession sqlSession = MyBatisUtils . getSqlSession ( ) ; UserMapper userDao = sqlSession . getMapper ( UserMapper . class ) ; List