`
zzq19860626
  • 浏览: 263977 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
B20df9e2-fb3d-3644-9f72-c1619842f682
设计模式学习笔记
浏览量:179759
87eaf24f-812a-3463-8e65-e3197d2ad8c2
java虚拟机
浏览量:26558
社区版块
存档分类
最新评论

最近看mybatis源码分享两个小知识点

    博客分类:
  • java
阅读更多

最近看mybatis源码,看了一段时间了,还在继续,里面有很多好东西,后面整理出来分享给大家,这里先写两个小的细节,可能有些同学已经是这么写了,那么就当做你没看好了。希望你觉得是新鲜的。

 

先来看下面这段代码,这个代码本身没什么意义,只是表示一下写法:

 

 

package collection;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MTest {

	private static final Map<Integer,String> map  = new HashMap<Integer,String>(){
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		{
			put(1, "a");
			put(2, "b");
			
		}

	};
	
	public static void main(String[] args) {

		List<String> list = new ArrayList<>();
		list.add("a");
		list.add("b");
		list.toArray(new String[list.size()]);
	}

}

 上面代码中包含了我要说的两个点:

 

第一点:在写静态map的时候直接匿名内部类初始化,代替static块:

原来我是这么写:

private static final Map<Integer,String> map  = new HashMap<Integer,String>();
static{
      map.put(1,"a");
      map.put(2,"b");
}

现在可以用如下代码代替:

private static final Map<Integer,String> map  = new HashMap<Integer,String>(){
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		{
			put(1, "a");
			put(2, "b");
			
		}

	};

这种写法的优点是把map的创建和初始化绑在一起,在代码上比较固定,不容易出错,如果用静态块去初始化,那么静态库必须放在map下方的任意地方,随意性比较大,如果中间隔很多代码不易阅读。类似于

int i=0;和  int i;   i=0;一样。静态map和静态块几乎同时加载,在性能和编译执行上没有太大的差别。如果理解了这种写法,就会发现这种方式简洁明了。缺点是利用了匿名内部类,对刚接触java的新手来说觉得是难以理解的写法。

 

 

第二点:集合类转数组的时候指定数组大小:

原来我的写法:

	list.toArray(new String[]{});

改用如下写法更好:

	list.toArray(new String[list.size()]);

这种写法的好处是明确指定大小能让系统少进入一些条件之中,能提高效率,源码这里有不贴了,读者可以自己去看看。其实这一点跟我们平时使用数组的写法一样,如   :

Integer[] s1= new Integer[]{};

Integer[] s2= new Integer[5];

如果已经很明确的知道有多少元素,那就使用s2的写法,提高执行效率。

 

 

 

怎么样,你是不是这么写的?

9
9
分享到:
评论
11 楼 lord_is_layuping 2015-07-29  
QuarterLifeForJava 写道
zzq19860626 写道
robert.wei 写道
算是点编码的小技巧吧

恩算是吧,这么多人踩,难道这标题让这么多人失望了?

呵呵,是的,题大身小,让人失望了(^O^)。啊!不过,博主,我没踩你啊!
顶过
10 楼 zzq19860626 2013-09-29  
perwarz 写道
struts2的源码也有那种初始化map的写法,不过我感觉那样写比较难理解,不是很好,不是必须的场合尽量避免

个人觉得如果理解了,那么这种初始化方式对代码管理来说更明了简单。
9 楼 zzq19860626 2013-09-29  
kjmmlzq19851226 写道
只要是原创都应该顶,楼主再接再厉,建议把分析也写一写,为什么要这么写,优点在哪里,缺点在哪里等等。

谢谢你的鼓励和支持,已经添加了一些我的理解。
8 楼 perwarz 2013-09-27  
struts2的源码也有那种初始化map的写法,不过我感觉那样写比较难理解,不是很好,不是必须的场合尽量避免
7 楼 kjmmlzq19851226 2013-09-27  
只要是原创都应该顶,楼主再接再厉,建议把分析也写一写,为什么要这么写,优点在哪里,缺点在哪里等等。
6 楼 m635674608 2013-09-27  
看jdk源码,,
5 楼 QuarterLifeForJava 2013-09-27  
zzq19860626 写道
robert.wei 写道
算是点编码的小技巧吧

恩算是吧,这么多人踩,难道这标题让这么多人失望了?

呵呵,是的,题大身小,让人失望了(^O^)。啊!不过,博主,我没踩你啊!
4 楼 arthur8 2013-09-26  
第二种在jdk src cllection framework很多地方都能看到
3 楼 zzq19860626 2013-09-26  
robert.wei 写道
算是点编码的小技巧吧

恩算是吧,这么多人踩,难道这标题让这么多人失望了?
2 楼 robert.wei 2013-09-26  
算是点编码的小技巧吧
1 楼 hialaric 2013-09-26  
第一点没试过,第二点早就这么写了。

相关推荐

    Mybatis知识点整理

    3. OneToOne:一对一关联映射,两个表中的记录一一对应。 4. resultMap:自定义复杂的结果映射,处理多表关联查询。 六、Mybatis缓存 Mybatis提供了本地缓存和二级缓存两种机制。本地缓存是在SqlSession级别,同一...

    Mybatis源码学习-代码+笔记

    在深入学习Mybatis源码的过程中,我们可以了解到它的工作原理,更好地优化数据库交互,提高程序性能。 1. **Mybatis概述** Mybatis 源码的学习可以帮助开发者理解其内部机制,包括动态SQL的解析、SQL映射文件与...

    MyBatis入门实例源码

    在这个"MyBatis入门实例源码"中,我们可能看到以下几个关键的知识点: 1. **MyBatis基本概念**:MyBatis的核心组件包括SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession和Mapper接口。...

    mybatis源码包

    在mybatis-3.4.6源码包中,我们可以深入理解MyBatis的核心机制,包括以下几个关键知识点: 1. **SqlSessionFactoryBuilder**: 这是创建SqlSessionFactory的构建者,它可以接收一个配置源(XML或Java Config),然后...

    SpringBoot 整合 Redis、mybatis 完整项目源码下载

    - `src` 主要存放源代码,通常包含`main`和`test`两个目录,分别对应主代码和测试代码。 以上就是SpringBoot整合Redis和MyBatis的主要知识点,以及从项目源码结构中可能观察到的信息。这个项目源码下载后,开发者...

    mybatis-3.4.5框架源代码

    MyBatis是一个流行的Java持久层框架,它允许开发者将SQL语句与Java代码相结合,提供了灵活的数据访问控制。在3.4.5版本中,MyBatis继续优化了其核心功能,增强了性能,并修复了一些已知的问题。接下来,我们将深入...

    翻译好的mybatis-3.5.2源码包

    在MyBatis 3.5.2中,我们可以深入探讨以下几个关键知识点: 1. **SqlSessionFactoryBuilder**:它是创建SqlSessionFactory的工具类,通过读取配置文件或XML配置流来构建SqlSessionFactory。 2. **...

    Mybatis入门三天源码

    在三天的Mybatis入门学习过程中,主要涉及以下几个关键知识点: 1. **配置文件**:Mybatis的配置文件(mybatis-config.xml)是整个框架的入口,它包含了数据库连接信息、映射文件位置、设置等重要信息。你需要理解...

    mybatis分页插件源码

    这个源码分享主要针对MySQL和Oracle两大主流数据库,为开发者提供了高效且易于使用的分页解决方案。下面我们将深入探讨MyBatis分页插件的相关知识点。 1. **MyBatis框架基础** MyBatis是一个优秀的持久层框架,它...

    Mybatis学习源代码

    总的来说,"Mybatis学习源代码"提供了一个实践性的学习平台,结合狂神说的视频教程,可以帮助初学者快速掌握Mybatis的精髓,提升数据库操作的效率。在实际开发中,理解并熟练运用Mybatis可以极大地提高开发效率,...

    mybatis的中文api文档

    MyBatis的Java API包括了SqlSessionFactory和SqlSession,这两个类是MyBatis的核心类。SqlSessionFactory是MyBatis的工厂类,用于创建SqlSession对象。SqlSession是MyBatis的会话类,用于执行SQL语句和获取映射器。 ...

    spring mvc mybatis项目源码

    Spring MVC 和 MyBatis 是两个在Java Web开发中广泛使用的框架。Spring MVC 是Spring框架的一部分,主要用于...同时,对于给定的源码,可以结合以上知识点进行分析和学习,理解项目的整体架构和各个组件的交互方式。

    Spring+MyBatis企业应用实战 源代码

    在IT行业中,Spring和MyBatis是两个非常重要的框架,广泛应用于Java Web开发。Spring作为一个全面的框架,提供了包括依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)在内的多种功能,而MyBatis则是一个优秀...

    SpringBoot+mybatis+Oracle整合代码

    8. **newculture文件**:这个可能是项目的主模块或源码包名称,其中可能包含了项目的所有源代码、配置文件和其他资源。进一步研究这个文件,我们可以看到具体如何组织和实现SpringBoot、MyBatis和Oracle的整合。 ...

    mybatis3.4.4的jar包及其源代码

    而`mybatis-3-mybatis-3.4.4.zip`可能是包含MyBatis源代码的文件,对于学习和理解MyBatis的内部工作机制非常有帮助,可以查看其具体实现,包括SQL解析、动态SQL生成等核心功能。 通过深入学习和研究这两个文件,...

    黑马程序员燕青Mybatis课堂笔记和源码

    Mybatis的配置文件包括两个部分:全局配置文件和映射文件。全局配置文件定义了数据源、事务管理器等信息;映射文件则包含了具体的SQL映射,包括选择、插入、更新和删除等操作。 3. **实体类与映射文件** 实体类...

    mybatis课件和练习代码

    以下是一些关键的知识点和概念: 1. **MyBatis 概述**:MyBatis 是一个基于 Java 的持久层框架,它解决了 JDBC 的繁琐代码问题,通过 XML 或注解配置以及接口方式,将 SQL 语句与 Java 代码分离,提供了一种更加...

    mybatis-3.5.7.zip

    8. **ResultHandler与ParameterHandler**:这两个处理器是MyBatis内部处理SQL执行结果和参数的关键,ResultHandler用于处理查询结果,ParameterHandler负责设置SQL参数。 9. **Spring整合**:MyBatis可以无缝地与...

    Mybatis系列教程Mybatis源码剖析共15页.pd

    【描述】"Mybatis系列教程Mybatis源码剖析共15页.pdf.zip" 是一个压缩文件,包含了15页关于Mybatis源码分析的教程内容。通过解压这个.zip文件,用户可以获取到PDF格式的教程文档,便于学习和查阅。这15页的内容通常...

    mybatis分页插件代码

    【标题】"mybatis分页插件代码"主要涉及到MyBatis框架中的一种增强功能——分页插件的使用。MyBatis是一个优秀的持久层框架,它支持定制化SQL...通过提供的文件,开发者可以学习到这些关键知识点,并应用于实际项目中。

Global site tag (gtag.js) - Google Analytics