`
frank-liu
  • 浏览: 1665578 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
简介     在使用传统jdbc的方式来访问数据的时候,我们会发现它本身的过程非常繁琐。在实际的使用过程中有太多小的细节要关注,这样就使得直接对它的使用效率非常低下。因此,为了实际项目中提高工作效率,我们需要提供一个抽象的基础来使得开发人员更多的去关注业务的实现。这里,我们结合spring对于将jdbc的使用到进一步抽象和提炼出一个基础类框架的过程做一个详细的讨论。   jdbc访问数据     在最初学习使用jdbc的时候,相信不少人都体验过使用原生的jdbc api来访问数据库的种种不便。总体来说,我们需要考虑怎么获取jdbc连接,然后准备执行的语句,再根据执行的结果进行处理和解 ...
简介     在之前的文章里,对于字符串的搜索算法,我曾经讨论过KMP算法的思路和实现。 KMP算法的实现思路是基于模式串里面的的前缀和后缀匹配,这种算法的效率已经足够快了。没想到的是,这里我们要讨论的Boyer Moore算法效率更加惊人。   思路分析     在之前的算法里,我们是通过从模式串的开头到结尾这么一个个的去和目标串比较,这种方式在碰到匹配的元素时则继续比较下一个,在没有匹配的时候,则通过查找模式表构建的匹配表来选择模式串里后面的第几个元素来继续进行比较。这样目标串里的索引就不用往回挪。但是,这里比较的顺序恰好相反。假设目标串长度为n, 模式串长度为m。那么,首先我们 ...
简介   在前面的讨论里已经提到了mybatis的各种配置和操作。从原生的使用角度来看,其实还是有点繁琐的,因为要配置数据源、指定配置文件,设定mapper文件以及接口。在实际的应用中,单纯使用mybatis的机会并不多,它更多的是和spring结合起来用。这里,我们就结合具体的示例讨论详细的配置过程。   和spring的集成   mybatis和spring的集成需要额外加入一些依赖的库,重点是mybatis-spring这个库。详细的依赖库定义如下:   <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...
简介   在之前的文章里讨论过mybatis纯xml或者annotation的开发。同时,也讨论了针对不同对象关系情况下的实现细节。在实际的开发应用中,我们会发现,有时候单纯的使用某一种方式来开发的话并不一定有最佳的效率。比如说当我们使用纯xml的时候,会发现里面有很多比较繁琐的配置,而且因为很多sql语句因为是写在xml配置文件里,一个是容易出错,另外对于一些特殊符号还要做一些处理,这样就显得开发的效率不理想。但是使用annotation的话,如果想要重用一些元素比如ResultMap的话就会比较麻烦,每次要重复定义一些元素。所以,如果能够结合两者一些比较好的地方,对于开发来说会更加理想 ...
简介   在之前的文章里已经讨论过mybatis的基本配置和应用,但是在实际应用中,我们需要支持更加复杂的操作,比如对多个表之间数据的连接访问等。这里就牵涉到数据关系建模里的各种关系映射。比如一对一映射,一对多映射等。这里对这几种情况的实现做一个讨论。   数据库表结构定义   在讨论具体的实现代码之前,我们先定义一系列的数据库表。它们有的是一对一的关系,有的是一对多的关系。这些表格的详细定义如下:   CREATE TABLE ADDRESSES ( ADDR_ID INT(11) NOT NULL AUTO_INCREMENT, STREET VARCHAR( ...
简介   在前一篇文章里我们已经讨论了一个简单的基于xml配置文件运行mybatis的示例。实际上,要完成上述的功能,mybatis里还提供了一种基于annotation的实现方式。对于有些不喜欢繁琐的xml配置文件的人来说,这种方式因为是 ...
简介     mybatis是一个比较流行的ORM框架,在很多应用里都有牵涉到。它本身提供对原生sql语句的支持,同时可以让使用者采用更加细粒度的方式来设置对象和数据的映射关系。本文通过一个简单的示例来熟悉mybatis工程的配置和api应用。   工程示例   这个示例采用mysql数据库,结合mybatis的xml配置文件进行设置。   创建数据库   首先,我们创建一个数据库表。详细的创建表的sql脚本如下: CREATE TABLE user ( user_id int(10) unsigned NOT NULL AUTO_INCREMENT, email ...
简介   在使用一些搜索引擎去搜一些东西的时候,我们经常会碰到一个有意思的事情。有时候我们在搜索框输入一部分内容的时候,会发现搜索框会显示一个下拉的列表,里面有一些以前面输入的内容为开头的一系列搜索字 ...

gradle学习总结

简介   Java的自动化构建工具比较多,从最开始的ant,到maven以及现在的gradle。他们的灵活性和功能越来越强大。相对前面的工具来说,gradle使用专门的编程groovy来描述项目构建过程中的一些任务。由于有编程语言的灵活性,它的表达能力更加强,结合一些强大的插件支持,我们可以使用少量的代码和配置来达到项目构建的目的。这里针对一些常见的问题做一个总结。   安装     gradle的安装过程相对来说还是比较简单的,一种最简单的方法就是到它的官网下载:https://gradle.org/gradle-download/。将gradle下载到本地之后,解压到某个目录并设 ...
简介   在之前的一些排序算法中,主要是对一些数值的类型比较的比较多一点。而对于字符串类型来说,它有一些特殊的性质。如果按照传统的排序方法,对于字符串的比较性能其实还取决于字符串的长度以及相似程度。实 ...
问题描述       Shortest path in complement graph.:Given a graph G, design an algorithm to find the shortest path (number of edges) between s and every other vertex in the complement graph G'. The complement graph contains the same vertices as G but includes an edge v-w if and only if the ...
简介   在之前的文章里我讨论过计算图里最短路径的几种方法,一个是Dijkstra's algorithm,一个是Bellman-Ford Algorithm。它们都是针对一个比较通用形式的图来进行计算处理的。在实际的应用中,有些比较特殊的图,在计算它们的最短路径的应用中往往还有一些更加简单的方法。   问题描述    Given a graph that is a tree (connected and acyclic), find the longest path, i.e., a pair of vertices v and w that are as far apart as ...
简介   我在之前的文章里有对Dijkstra's Algorithm进行了思路的分析和讨论,但是也提到了一点,就是这个算法它有一点限制,要求图里面所有的边的权值都是非负的。因为如果有权值为负数的边,就打破了原来算法里每次取得 ...
简介 Dijkstra's algorithm是一个求图中单点到其他所有点最短距离的算法。我在之前的一篇文章里也有过一些讨论。只是那篇文章写得比较仓促,对于该算法的思想和推导理解得也并不深刻。经过一些时间的思考,这里想对该算法的思想做一个进一步的阐述,并对一些和它相关的问题进行比较讨论。   算法描述分析   对于这个算法来说,它有这么一个前提。在一个连通的图中(可以是有向图或者无向图),所有的边都有一个对应的权值。我们给定一个起点,需要求基于这个起点到所有其他节点的最短路径。为了解决这个问题,Dijkstra's algorithm的解决步骤如下: 1.设定给定源节点到自身的边权 ...
问题描述   给定一个图中间两个节点,我们需要返回这两个节点之间所有的simple path。什么是simple path呢?就是图中间不包含有重复节点的路径。   问题分析   对于这个问题,我们比较容易想到一些和其他问题近似的地方。比如说给定两个节点要判断它们是否连通。而且在连通的时候我们可以找到一条这两个节点之间的路径。对于这个相对简化的问题来说,我们可以通过图的某种遍历方式,每次遍历的时候记录节点之间的访问关系,一直到目标节点。   对于我们这个问题本身来说,它和那个简化的问题不一样。因为这里要列出所有到达目标节点的路径。对于两个节点之间,它们可能有多个路径是连通的。比如说 ...
Global site tag (gtag.js) - Google Analytics