分类: Java

PageHelper不支持STATEMENT非预编译的SQL

发表于2年前(Apr 18, 2016 10:09:05 AM)  阅读 962  评论 0

分类: Java

标签: mybatis 分页 PageHelper statementType STATEMENT 预编译 非预编译 intercepts 拦截器 动态sql 动态表名 动态字段名

PageHelper是一个很方便的mybatis的分页组件,如果你正在使用mybatis,建议尝试使用PageHelper进行分页。PageHelper是使用mybatis的拦截器intercepts实现分页操作的。

但PageHelper并不支持STATEMENT非预编译的SQL的分页,笔者调试时观察了一下,应该是由于SQL里面的分页参数使用的?,PageHelper修改SQL的时候无法将参数正确设置,所以导致了语法错误,mybatis使用的很少,笔者也不知道这个问题是不是一个问题,能否解决,如果有读者也遇到该问题,请暂时想别的办法吧。

其实笔者之所以使用STATEMENT非预编译的SQL,是想实现一个通用的Mapper,动态传入表名和字段名,查看网上资料都表明需要设置statementType="STATEMENT",所以出现了上面的问题,但后来笔者实验发现,动态sql并不需要强制设置statementType="STATEMENT",在默认预编译环境下运行,笔者测试暂时未发现有什么问题,笔者自己

......

java类通过反射读写私有变量

发表于2年前(Apr 14, 2016 4:51:44 PM)  阅读 595  评论 0

分类: Java

标签: 反射 private 私有变量 私有方法 reflect

我们写代码时会出现很多private的属性和方法,不允许用户直接访问这些,而是通过public的接口来访问。根据软件设计的开闭原则,一般来说当软件需要修改时,是通过扩展来完成,而不是通过对原有代码修改,即对扩展开放,对修改关闭。

在使用别人写的类库时,可能会遇到需要读写私有变量,或方法的情况,出现这种情况通常都是因为该类库没有很好地考虑到用户可能遇到的情况,没提供扩展的方法,这时,我们可以通过java的放射机制来实现我们的需求。

设置私有变量工具类示例代码(其他类似):

package com.cangzhitao.common.util;

import java.lang.reflect.Field;

/**
 * Created by cangzhitao on 16/4/14.
 */
public class ReflectUtil {

    public static Object setFiled(Object tar
......

指定log4j配置文件路径

发表于2年前(Apr 13, 2016 2:56:57 PM)  阅读 1412  评论 0

分类: Java

标签: log4j classpath classpath* Log4jConfigListener log4jConfigLocation

log4j是使用频率很高的java日志组件,一般项目中都会在class根目录创建一个log4j.properties配置文件,Spring容器会默认在class根目录中寻找log4j.properties,约定优于配置。但难免存在需要显示指定的情况,这时,我们可以在web.xml中进行如下配置:

<context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>
            WEB-INF/classes/log/log4j.properties
        </param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.ut
......

城市、行业、职位数据收录

发表于2年前(Mar 30, 2016 4:42:52 PM)  阅读 568  评论 0

分类: Java WEB前端

标签: 城市 行业 职位 招聘 数据抓取

1、前言

系统中选择城市是很常见的一个功能,而选择行业和职位是一个招聘网站最基本的功能,这几个功能一般不是几个下拉列表进行联动,就是弹出一个大面板进行选择,不管前台怎么展示,我们首先需要最基础的数据,本文就是来解决这几个基础数据列表怎么获取。

2、城市

城市在这里正确的表达方式应该是行政区划,这个行政区划代码在国家统计局网站上是有的。http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/​

打开最新的《最新县及县以上行政区划代码(截止2014年10月31日)》,可以看到我国行政区划分以及编码,细看可以发现,行政编码共6位数字,每两位为一个标识,分为省市区三级。直接复制网页内容,存在本地,再用程序稍微处理或者入库就可以作为数据源使用了(注意:编码与名称之间包含全角的空格,处理时需要注意)。

在国家统计局网站上还可以

......

A cycle was detected in the build path of project: XXX

发表于3年前(Jun 16, 2015 10:45:32 AM)  阅读 1148  评论 0

分类: Java 开发运维环境 异常

标签: 循环依赖

昨天从公司svn服务器上拉取一个历史遗留项目,项目采取分模块工程方式开发,但是模块间出现了相互依赖的情况,这是很不合理的,我们要避免这种情况的发生。出现这种情况的时候,eclipse给出了A cycle was detected in the build path of project: XXX  错误信息,一个循环依赖被检查到,导致无法编译。

最简单的方法,参照网上给出的,直接将eclipse这个错误级别由error改成warning。

Eclipse Menu -> Window -> Preferences... -> Java -> Compiler -> Building -> Building path problems -> Circular dependencies -> 将Error改成Warning。

以上是将整个工作空间的编译选项都改了,一般建议只修改报错工程的编译选项就行

......

java实现多线程、断点下载

发表于3年前(Jun 8, 2015 11:58:42 AM)  阅读 642  评论 0

分类: Java 类库工具

标签: 多线程下载 断点下载 Content-Disposition RANGE Content-Range

1、知识预备

平时我们用下载工具用的很多,下载工具具有多线程下载,断点续传等优点。多线程下载简单来说就是向服务器发起多个连接,一般来说服务器会给当前连接的每个客户端平均分配带宽,如果你的连接多,自然而然的速度就比别人快。不过现在很多服务器都有安全机制,一般会限制每个ip的连接数,碰到这种情况的话,就要靠代理ip来解决了。

使用多线程下载主要是发起连接时,向服务器说明此次连接需要获取的数据段,通过URLConnection类的setRequestProperty("RANGE","bytes=0-23245")来设定,如果服务器支持的话,在response的header里面将会带入Content-Range属性,里面标示了这次返回的字节范围。

断点续传的话就比较简单,无非记录本次下载的进度,下次连接时,还是通过制定数据字节范围,继续未完成的下载。麻烦的地方主要在于如何记录进度,记录的频率,还有异常的情况发生,这里异常的情况指的是,用户强行结束进程,电脑宕机断电等情况,如何在这些情况发

......

java解析华为网盘真实下载地址

发表于3年前(Jun 3, 2015 4:22:35 PM)  阅读 578  评论 0

分类: Java 类库工具

标签: 华为网盘 外链 解析下载地址

1、背景:

这几年涌现出一大批网盘运营商,对于很多服务器磁盘有限的站长也经常将要提供下载的文件上传到网盘,以节省自己的空间。一般来说,都是链接到网盘页面,然后用户点击下载开始下载文件,其中不乏有些网盘需要登录,需要提取码等等,这些操作能不能简化,一次性过呢?是可以的,笔者写的这个java类是针对华为网盘,通过网盘的链接地址,获取到该页面下载列表里面的所有文件的真实下载地址。获得真实下载地址后,其实直接可以使用该地址作为图片、音乐等等的外链了。不过最后测试的时候,笔者发现,华为网盘的下载地址是有时效性的,过一段时间后必须重新加密计算,做外链的话多了一次解析加密的过程。

2、原理:

华为网盘的真实下载地址主要由两个字段计算出来,一个是encryKey,一个是downloadurl,downloadurl是一大长串字符,每个文件唯一对应,而encryKey不是固定的,每个下载页面对应一个encryKey(时效性就跟这个值有关),同一个下载页面的所有文件encryKey相同。

加密所需要的两个字段都在下载页面

......

org.apache.tomcat.util.http.parser.TokenMgrError

发表于3年前(May 24, 2015 8:30:46 PM)  阅读 1105  评论 0

分类: Java 异常

标签: TokenMgrError setContentType

1、TokenMgrError

前两天同事搭建项目环境,在eclipse部署完启动项目时出现如下报错:

org.apache.tomcat.util.http.parser.TokenMgrError: Lexical error at line 1, column 16. Encountered: "," (44), after : ""

同事环境跟笔者唯一不同的地方就是tomcat使用的版本是7,而笔者使用的是6。

2、错误定位

根据错误提示,定位到报错的代码应该是如下一行:

this.getRespone().setContentType("text/javascript,charset=UTF-8");

text/javascript是在服务器返回json数据时设置,这里同时设置了字符集为UTF-8,两者之间使用的","分隔,就是这个逗号出现了问题。

......

JAVA生成RSS订阅--ROME

发表于3年前(May 7, 2015 7:22:52 PM)  阅读 1266  评论 0

分类: Java

标签: RSS订阅 ROME feed

1、什么是RSS

RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用。RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者。发布一个RSS文件后,这个RSS Feed中包含的信息就能直接被其他站点调用,而且由于这些数据都是标准的XML格式,所以也能在其他的终端和服务中使用,是一种描述和同步网站内容的格式。

2、为什么要使用RSS

举个例子,如果用户获取到了网站的RSS文件,就可以获取该网站最新发布的文章信息。用户可以使用一些聚合功能来阅读这些信息,笔者就喜欢使用QQ邮箱的订阅以及Foxmail的RSS订阅功能,由此可见,RSS对网站的推广具有很大的作用,所以网站必须提供标准的RSS文件。RSS协议有很多版本,0.9,1.0,2.0,现在使用较多的应该是2.0了。

3、什么是ROME

ROME是一组Atom/RSS工具类,它用Java来操作大部份RSS。ROME可能是目前最完善的开源聚合工具,ROM

......

hibernate-jpa与persistence-api冲突

发表于3年前(Apr 18, 2015 9:23:30 AM)  阅读 1559  评论 0

分类: Java 开发运维环境

标签: junit javax.persistence.Table.indexes[Ljavax/persistence/Index javax.persistence.JoinColumn.foreignKeyLjavax/persistence/ForeignKey hibernate4.3 persistence-api hibernate-jpa

1、背景

hibernate版本使用的是4.3.8,项目架构是jpa,使用注解注册实体。启动tomcat容器测试时,运行无问题,使用junit运行单元测试时,报出几种错误,网上搜索有如下信息:

错误一
错误信息:javax.persistence.Table.indexes([Ljavax/persistence/Index 
原因:Hibernate4.3不支持@table(name="tablename")
解决方案:使用@entity(name="tablename")代替@table(name="tablename")

错误二
错误信息:javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey
原因:Hibernate4.3在多对一映射的时候不能使用@JoinColu

......