`
文章列表
执行方式2: DeptMapper mapper = openSession.getMapper(DeptMapper.class); Dept dept2= mapper.select(d); DefaultSqlSession#getMapper @Override public <T> T getMapper(Class<T> type) { return configuration.<T>getMapper(type, this); } //从MapperRegistry获取 public ...
DefaultResultSetHandler#handleResultSets 处理结果集 @Override public List<Object> handleResultSets(Statement stmt) throws SQLException { ErrorContext.instance().activity("handling results").object(mappedStatement.getId()); final List<Object> multipleResults = new Ar ...
@Override   public <E> List<E> query(MappedStatement ms, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException {     BoundSql boundSql = ms.getBoundSql(parameterObject);     CacheKey key = createCacheKey(ms, parameterObject, rowBounds, boundSql);   ...
MyBatis执行两种方式: 1. SqlSession openSession = sqlSessionFactory.openSession(); Dept d = new Dept(); d.setId(1506720); Object dept = openSession.selectOne("dao.DeptDAO1.select",d); System.out.println(dept); 2. DeptMapper mapper = openSession.getMapper(DeptMapper.class); Dep ...
1.接着上一篇文章解析mapper第一步 mapperElement(root.evalNode("mappers")); private void mapperElement(XNode parent) throws Exception { if (parent != null) { for (XNode child : parent.getChildren()) { if ("package".equals(child.getName())) { String mapperPack ...
1.XMLConfigBuilder.parse public Configuration parse() { if (parsed) { throw new BuilderException("Each XMLConfigBuilder can only be used once."); } parsed = true; parseConfiguration(parser.evalNode("/configuration")); return configuration; ...
概述:本文按三个部分依次循序渐进对mybatis源码-原理进行分析 1.MyBatis 启动流程 2.MyBatis 执行流程 3.MyBatis 核心组件 第一部分 启动流程 String resource = "mybatis.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); ...

2.Lambda 表达式

在说一下Lambda表达式之前,我们先了解下为什么java要引入Lambda表达式 在java8 之前要将行为参数化我们有两种选择: 1.策略模式,根据参数传入的具体实现决定方法的实现 2.匿名内部类。 1的缺点是要新增新的行为必须创建新的 ...

1.接口默认方法

在java8中接口可以实现默认方法 ,使用default 关键字 package com.dx; public interface Caculate { default int sum( int i,int k){ return i+k; } void sayHello(String msg); } 当然实现接口的类可以选择实现或者不实现默认接口方法。 提问:为什么要新加入默认方法的特性呢? 假设一个场景,现在有一个接口,而且有很多实现类都实现了这个接口,如果要对这个接口添加新的方法,那么按照接口语义所有子类都 ...

1. 内存区域

    博客分类:
  • jvm
JVM内存区域划分:方法区、虚拟机栈、本地方法栈、堆、程序计数器 Java堆(java Heap):(when)堆是被所有线程共享的一块区域,由虚拟机启动时创建。(what)用来存放对象实例和数组;(where)Java堆可以处在不连续的内存空间中,只要在 ...

1.并发简介

1、单道程序,即在内存中只有一个程序运行,在这个程序结束之前其他程序无法使用内存。 2、多道程序:多道程序设计技术是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序(我们后来常说的内核)控制下,相互穿插运行,两个或两个以上程序在计算机系统中同处于开始到结束之间的状态, 这些程序共享计算机系统资源。多道程序的发展,在一定程度上促进了操作系统和多cpu的发展。 3、为什么后来会引入进程? 由于程序在并发执行时,可能会造成执行结果的不可再现,所以用“程序”这个概念已无法描述程序的并发执行,所以必须引入新的概念—进程来描述程序的并发执行,并要对进程进行必要的管理,以保证进程在并发执行时结果可 ...
假设一个应用场景:需要模拟车辆一天的运行轨迹,并且实时监控,就需要不断的像已有的数据集合中添加新的数据,并且遍历集合。 在传统的java集合包中的集合中像 ArrayList  HashMap等;在同一线程中传统集合是不允许修改的,也就是遍历时不能修改,添加,删除等操作。多个线程就更不行了。 为此java.util.concurrent包中提出了一些解决方法: 使用Collections.synchronizedList() ,new CopyOnWriteArrayList<String>() 等,将集合包装为安全的集合,这样确实是结局了同步的问题。其内部的原理,就是将资源sync ...
JDK 1.7 引入了 java.lang.AutoCloseable 接口,用来自动关闭像InputStream,OutputStream这样的一些资源,只要该类实现了此接口 就可以使用 try-catch-resource 块将声明部分包括在其中,执行完毕后资源会自动关闭,没有必要再去写 in.close() 类似的代码。 这样的好处是:在手动释放jdbc连接的时候,需要关闭 Connection,Statement,ResultSet 这样的资源,需要嵌套多个try-catch。 使用方式: 多个语句之间用分号分隔 一个简单的读取文件的例子: public class Try ...
public class SelectSort { public static void main(String[] args) { int[] a = { 5, 7, 9, 2, 4, 365, 65536, 6, 34, 421, 2, 14, 51, 57, 90, 7 }; for(int i = 0; i < a.length-1 ;i ++){ /** * 将第一个元素与每个元素比较 将小的元素放到前面 * 第二个元素与每个元素比较 * 。。。。 * 倒数第二个元素与最后一个元素比较 */ ...
public class Bubble { public static void main(String[] args) { int[] a = { 5, 7, 9, 2, 4, 365, 65536, 6, 34, 421, 2, 14, 51, 57, 90, 7 }; // 遍历数组 将相邻的两个元素比较 左边的元素大于右边的元素就交换位置 //首先进行内部遍历 可视为第一次遍历 将最大的元素放到末尾 // 第二次遍历将 第二大的元素放到倒数第二位置 //依次类推 需要进行 N次外部循环 for (int k ...
Global site tag (gtag.js) - Google Analytics