Spring 与 MyBatis 集成详解

MyBatis 是介于 JDBC 与 Hibernate 之间的半 ORM 应用框架,在 Spring 开发中占有很重要的地位。
此文对此做简要的总结。

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

—— 摘自 MyBatis 中文官网

阅读更多

漫谈 JDBC 以及与 Spring 之整合

JDBC 是 Java 数据库连接(Java Database Connectivity)的简称,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,用来连接 Java 与数据库,提供了诸如查询和更新数据库中数据的方法。


JDBC 的 API 支持两层和三层处理模式进行数据库访问,但一般的 JDBC 架构由两层处理模式组成:

  • JDBC API : 提供了应用程序对 JDBC 管理器的连接。
  • JDBC Driver API : 提供了 JDBC 管理器对驱动程序连接。

JDBC API 使用驱动程序管理器和数据库特定的驱动程序来提供异构(heterogeneous)数据库的透明连接。

JDBC 驱动程序管理器可确保正确的驱动程序来访问每个数据源。该驱动程序管理器能够支持连接到多个异构数据库的多个并发的驱动程序。

阅读更多

Java 8 中的函数式编程与流之总结

还记得在上一份工作面试时,被问到了是否熟练 Java8Scala, 我说不会。

Java 8 本已是一项不新的技术,虽然不复杂,却没掌握,的确是我不该。入职新东家后,纯正的互联网基因给了我短时间掌握和使用的机会。在学习了 《Java 8 in Action》,并经过一段时间实践后,在此做一次后知后觉的总结。

Java 8 于 2014年 3月发布,主要的新特性我认为就是两个:流处理、函数式编程。

函数式编程是一个古老而久远的话题。一句话总结,就是函数被作为一等公民,方法可以直接传递函数,函数只有输入输出,而不对外界造成影响(无共享的可变数据)。例如方法 getBetterApple(Apple A, Apple B, Comparator<Apple> comp) 中的 Comparator<Apple> 就是一个函数,此处定义了一个方法实现获得一个更好的苹果,但具体什么是“好”的这个评判标准,则可以通过传入函数来改变,例如按照大小、颜色、水分等等来比较。为了适应函数式编程,Java 8 对原有的接口做了相应改变,允许了在 interface 中定义 default 默认方法

,是针对日常工程中最为常见的集合制造与处理过程,其基础是函数式编程。Java8 提供了过滤、映射、循环等常用操作的 Stream API,并支持开发者自定义实现。并在流基础上,提供了多线程封装,只需要将 stream() 改为 parallelStream() 就完成了从单线程向多线程的转变,非常简单,不过其中也有些细节(坑),下文会展开介绍。

除了以上两点,Java 8 还提供了 Optional 、异步 API、新的时间处理API 等。

阅读更多

关于 Maven (三) POM.xml 配置详解

POM 代表项目对象模型。它是工作在 Maven 的基本单位。这是一个 XML 文件。它始终保存在该项目基本目录中的 pom.xml 文件。
POM 包含的项目是使用 Maven 来构建的,以及它也包含各种配置信息。
POM 也包含了目标和插件。在执行任务或目标时,Maven 会使用当前目录中的 POM。它读取POM,得到所需要的配置信息,然后执行目标。

阅读更多

关于 Maven (一)介绍入门与安装

每次对一项新技术,都是从一个陌生名词开始的。记不起什么时候看到的 Maven 这词,觉得高大上(在IT这行混久了,一旦不学习,看什么都觉得高大上了),后来终于运用到了实践当中,问了下厂,发觉自己落伍太久了。抽个没加班的日子,把这个给梳理一下。

阅读更多

聊聊几种常用的 Java 构建工具: Maven, Ant+ivy 与 Gradle 之比较

在前公司开发时,为公司项目引入了 Maven,摆脱了无止境的 jar 管理,方便了工程打包和发布。当时的项目,由于我拥有着绝对的主导权,并且项目本身工程量不大。Maven 运行的非常好,迁移转交给同事,基本上能克服原有的复杂的环境配置和依赖管理,实现顺利的交接。
近了新的公司,发现这边对于项目构建,采用的是 Ant+ivy 方案,这么选择固然有其历史原因,作为后来者,想要改变原有的技术方案,是十分困难的(由于变更风险巨大,基本不可能实现),因此,我不得不去学习这种新的构建方案。

之前仅学习过使用过 Maven,在了解了 Ant 后发现了其诸多的优点。由于对 Maven、Ant+ivy、Gradle 这几种构建又存在着一些困惑,故在此做一个梳理,区分下优劣,仔细了解下应用场景。
几种构建方法,没有绝对的好坏之分,必须要针对引用场景具体问题具体分析

阅读更多

Markdown 语法简单小结

最终,我的博客还是回归到了起点。
博客断断续续几年,尽是折腾界面美化和各种网站框架或者建站工具,最终,失去了其核心价值,即内容和思想的沉淀。这更使得我的博客流于表面,对于自己的成长,也没有起到太多正面的作用。

反思后,决心回归最简单的格式外观,将重点集中于高质量内容的沉淀上。
这也是为什么又回到了 Markdown 的怀抱。

至于编辑器,我用过了众多纯编辑器,众多 Web 版的富文本编辑器,以及许许多多Markdown 编辑器后,决定使用最的 Vim。同时,也推荐一款 Markdown 编辑器Typora。这款软件足够轻量级,同时功能做到了尽可能的简单。至于 Web 编辑器,我使用简书

阅读更多

读《代码整洁之道(Clean Code)》后感

《Clean Code》是一本不太厚的书,在大学时就拜读过,工作一段时间后又重拾读了一遍,又有了些新的感悟,再次略做随笔。

如果时间退回到大学,包括《Clean Code》,《重构》,《设计模式》此类书必然被我奉为神书,战战兢兢地写着代码,生怕哪里违反了什么什么准则,什么什么约定。

工作几年后看,并不是这样。更多了一些淡然,或者说破罐子破摔?大误。

例如书中强调对类、方法、变量的最合理的命名,而减少注释。事实是,即使在当下这家不错的互联网公司,对英语的理解力都是不足的,更别说前几家东家中还存在着大量的技艺勉强,英语更不敢评价的外包员工。连命名都困难的话,如果仅仅依靠代码理解业务逻辑,更是不敢想象。因此实践中,前 TL 也是强制对代码注释提了需求,也是可以理解的。

Coding 进入实际工程,准则和约定都多了不少妥协。但程序员,或者是工程师们,在当代即是一类工匠。工匠们不仅产出手艺成品,也产出智力产品。工匠需要工匠精神,对程序员而言,就是整洁高效的代码。

这是一种哲学理念。所谓 “格物致知”,从代码就能看出一个程序员对自己技术的追求。

在书中,也提到了对代码的 5S 哲学,包括:

  • 整理(Seiri),理清事物本质,并善于设计
  • 整顿(Seiton),系统化,物皆有其位,而后物尽归其位
  • 清楚(Seiso),命名注释清晰,无废弃代码
  • 清洁(Seihetsu),标准化
  • 身美(Shitsuke),自律、持续迭代、重构

一个优秀的程序员,必定会对自己的技艺不断的追求精进,格物致知,码品如人品。

阅读更多

探索 Java 中 String 的本质,从 char 说起

String 类可以认为是 Java 语言中最为常用的类了,对于 String 的理解更是 Java 面试题的常客。
但作为一个 Java 程序员,对于 String 是否足够了解了呢?
本篇文章将对 String的存储,使用做一个详细的探讨。


先来简单介绍下 StringString是 JDK 提供的位于 java.lang 中的基础类,但区别于 byte,short,int,long,char,boolean,float,double这些基本类型,String不是基本数据类型,而是一个类。
因为是类,实例化的String 对象的空值为 null,但String是如此常用,于是 JDK 对其有特殊的优化。

阅读更多