分类:
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
标签:
反射
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
......
分类:
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
......
分类:
WEB前端
JS
标签:
join
行内js
slice
分类:
Java
WEB前端
标签:
城市
行业
职位
招聘
数据抓取
1、前言
系统中选择城市是很常见的一个功能,而选择行业和职位是一个招聘网站最基本的功能,这几个功能一般不是几个下拉列表进行联动,就是弹出一个大面板进行选择,不管前台怎么展示,我们首先需要最基础的数据,本文就是来解决这几个基础数据列表怎么获取。
2、城市
城市在这里正确的表达方式应该是行政区划,这个行政区划代码在国家统计局网站上是有的。http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/
打开最新的《最新县及县以上行政区划代码(截止2014年10月31日)》,可以看到我国行政区划分以及编码,细看可以发现,行政编码共6位数字,每两位为一个标识,分为省市区三级。直接复制网页内容,存在本地,再用程序稍微处理或者入库就可以作为数据源使用了(注意:编码与名称之间包含全角的空格,处理时需要注意)。
在国家统计局网站上还可以
......
分类:
开发运维环境
标签:
用户注册
邮箱激活
激活失效
1、发生的问题
上周开发的一个APP做上线测试,用户注册功能发现出现一点问题。用户注册的流程为:使用APP填写注册申请,服务器记录注册信息,发送注册用户激活邮件,用户登录邮箱,点击激活链接,完成激活操作,然后可以登录APP。线上问题展现为,用户注册完直接变成了正式用户,激活邮件里面的链接已经失效。
2、问题产生的原因
本地单步调试一切正常,服务器测试怎么都不行,折腾了一个多小时,终于推测出问题原因,正如标题所描述的那样,原来是邮件服务器自动安全扫描造成的。一般邮件服务器都会有安全扫描机制,用来过滤病毒以及垃圾邮件等,这里提一下,笔者使用的是QQ邮箱。对于激活邮件,邮件服务器扫描了该链接,然后导致该链接已经激活过。至于为什么本地正常,那是因为本地使用的是内网地址,邮件服务器访问不到,所以才导致了该问题的产生,第一次做类似功能,囧。
3、问题解决方法
问题原因找到了,现在要解决的问题就是如何避免邮件服务器扫描激活链接,或者判断链接的访问者,是否是邮件服务器,或者机器人访问,笔者猜想大部
......
分类:
移动应用开发
ios
标签:
UIAlertController
UIAlertActionStyle
Alert
ActionSheet
应该是从ios8开始,ios将UIAlertView以及UIActionSheet两个控件的功能都合并到UIAlertController了,因为两者无论在功能还是视图上都极其相近,接下来将简单描述下UIAlertController的使用。
1.对话框:
我们先看对话框的最终效果
对应的代码如下:
func showPop1() {
let alertController = UIAlertController(title: "确认提醒", message: "你确定要提交订单吗?", preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(title: "Ok", style: UIAlertAction
......
分类:
移动应用开发
ios
标签:
xib
loadNibNamed
ios界面设计主要分为三种方式,一是使用storyboard方式,这也是苹果现在主推的开发方式,二是使用完全使用代码进行UI设计,storyboard的优势是可以使用拖拽的方式快速构建UI界面,几乎不需要编写什么代码,而使用代码的方式则是更适合多人协作开发。使用xib+代码进行开发则介于两者之间,xib更利于UI的封装以及重用。
本文主要介绍如何使用xib进行ios界面设计,这里假设我们要做一个文章标题的UI界面,一个简单的居中对齐的UILabel。
1.新建一个Single View Application,添加一个UI界面,这里我们命名为XibView:
2.打开XibView,可以看到跟storyboard类似的设计界面,我们可以在里面添加任何元素:
3.现在我们拖入一个UILabel进来,并将它与XibView的四边的距离约束为0,并将UILabel的对齐方式设为居中对齐:
4.新建一个Cocoa Touch Class类,命名为
......
分类:
开发运维环境
标签:
修改时区
修改时间
新部署的环境,发现文章显示的发布时间不对,查看估计服务器时间不准,上服务器看时间是正确的,那就应该是时区不对,使用下面的方法修改服务器的时区:
将时区设置为上海所在的时区,即东八区。
若要修改时间,使用date -s "2008-08-08 12:00:00" 命令。
修改完时区,如果有服务使用系统时间的,如mysql服务,必须重启相应的服务。
分类:
移动应用开发
ios
标签:
动态库
framework
framework search paths
copy items if needed
封装重用是软件编程人员经常做的事,在使用一门语言时,我们经常会用到其他软件开发人员提供的工具,像github以及code4app网站上就提供了很多基于ios应用封装的工具,这些工具能减少我们很多工作。当熟悉了一门语言后,有想法的程序员都会想到封装自己的工具,阅读完本文,您将了解如何使用Xcode7,swift语言来封装一个动态库。
1、首先我们建立一个Cocoa Touch Framework工程,这里我命名为myframework:
2、在myframework添加我们的一个自定义Person类
注意,class以及init构造方法前面都必须使用public修饰,或者其他工程不能引用到。
3、先选择IOS Device版本进行编译
此时可以看到Products目录下的myframework.framwork文件由原来的红色变成了黑色(红色表示该文件不存在),说明我们成功生成了.framewor
......