js isnotemptyy 和isNotBlank的区别

ibatis/Mybatis实战分享与讨论 - 记录些可以拿出来分享讨论的东东 - ITeye技术网站
以前有类似讨论,互联网项目要用spring jdbc 或者ibatis 不然会有种种问题,神乎其神,到底是为啥呢?hibernate到底有啥不好,做互联网项目还是先看看ibatis是个什么东东吧
关于ibatis入门如何?
入门相对容易,好像没什么有他官方上那本pdf更好的,而且有中文版,看起来速度刷刷的
ibatis主要提供了什么?
数据库字段到model映射,这个通过强大的xml配置解决,可以做出类似hibernate的效果,但是sql语句是你自己书写,也没有面向对象建立数据库的压力,又比spring jdbc之类强大
模板配置sql到底多强大?
可以动态配置sql,可以使用ognl表达式,你的sql用广告词,叫做会跳舞的sql,以前看帖子,有哥们说他们项目自己该造,用freemarker搭建了一个模板,很强大,到底有那些好处,具体不太了解,我觉得现在的绝对够用,就是配置有些繁琐
比如我们ognl严重
&where&
&if test="@Ognl@isNotEmpty(clickId)"&
AND click_id = #{clickId}
public class Ognl {
* 可以用于判断String,Map,Collection,Array是否为空
* @param o
public static boolean isEmpty(Object o) throws IllegalArgumentException {
if(o == null)
if(o instanceof String) {
if(((String)o).length() == 0){
} else if(o instanceof Collection) {
if(((Collection)o).isEmpty()){
} else if(o.getClass().isArray()) {
if(Array.getLength(o) == 0){
} else if(o instanceof Map) {
if(((Map)o).isEmpty()){
throw new IllegalArgumentException("Illegal argument type,must be : Map,Collection,Array,String. but was:"+o.getClass());
* 可以用于判断 Map,Collection,String,Array是否不为空
* @param c
public static boolean isNotEmpty(Object o) {
return !isEmpty(o);
public static boolean isNotBlank(Object o) {
return !isBlank(o);
ibatis这些点怎么搭建一个良好快速的开发环境呢?(也就是对ibatis提供的特性进行了强力的封装)
1.代码生成器需要统一的几个点
利用代码生成器,我们每张表的常规操作,CRUD于基于简单字段查询条件的分页都自动生成映射到model上了
统一了几个点:namespace=table.xxx xxx代表具体操作,每张表生成适合都是统一的
也自动生成了action--service--dao--xml
2.底层统一接口调用的问题
Dao层继承BaseIbatisDao,上面统一的几个点造成了一些Crud于有条件的分页可以放到顶层的Dao中
不可能每次调用都要打开sqlsession 关闭sqlsession
那么模板方法模式封装好这个流程,然后每次调用就可以了,每次直接调用模板sqlsessionTemplete
类似模板方法:
public Object execute(SqlSessionCallback action)
SqlSession session =
session = sqlSessionFactory.openSession();
Object result = action.doInSession(session);
}finally {
if(session != null) session.close();
public Object executeBatch(SqlSessionCallback action)
SqlSession session =
session = sqlSessionFactory.openSession(false);
Object result = action.doInSession(session);
}finally {
if(session != null) {
mit(true);
session.close();
3.分页问题解决
这个没想象那么难,见下面模板跟代码
&select id="AdClickinfo.findPage" resultMap="RM.AdClickinfo"&
SELECT &include refid="AdClickinfo.columns" /&
FROM ad_clickinfo
&include refid="AdClickinfo.findPage.where"/&
&if test="@Ognl@isNotEmpty(sortColumns)"&
ORDER BY ${sortColumns}
&sql id="AdClickinfo.findPage.where"&
&!-- ognl访问静态方法的表达式 为@class@method(args),以下为调用rapid中的Ognl.isNotEmpty()方法,还有其它方法如isNotBlank()可以使用,具体请查看Ognl类 --&
&if test="@Ognl@isNotEmpty(clickId)"&
AND click_id = #{clickId}
&if test="@Ognl@isNotEmpty(adId)"&
AND ad_id = #{adId}
&if test="@Ognl@isNotEmpty(clickDatetimeBegin)"&
AND click_datetime &= #{clickDatetimeBegin}
&if test="@Ognl@isNotEmpty(clickDatetimeEnd)"&
AND click_datetime &= #{clickDatetimeEnd}
&if test="@Ognl@isNotEmpty(clickIp)"&
AND click_ip = #{clickIp}
&if test="@Ognl@isNotEmpty(clickFrom)"&
AND click_from = #{clickFrom}
public static Page pageQuery(SqlSessionTemplate sqlSessionTemplate,String statementName,String countStatementName, PageRequest pageRequest) {
Number totalCount = (Number) sqlSessionTemplate.selectOne(countStatementName,pageRequest);
if(totalCount == null || totalCount.longValue() &= 0) {
return new Page(pageRequest,0);
Page page = new Page(pageRequest,totalCount.intValue());
Map filters = new HashMap();
filters.put("offset", page.getFirstResult());
filters.put("pageSize", page.getPageSize());
filters.put("lastRows", page.getFirstResult() + page.getPageSize());
filters.put("sortColumns", pageRequest.getSortColumns());
Map parameterObject = PropertyUtils.describe(pageRequest);
filters.putAll(parameterObject);
List list = sqlSessionTemplate.selectList(statementName, filters,page.getFirstResult(),page.getPageSize());
page.setResult(list);
public class Page&T& implements Serializable,Iterable&T&
protected List&T&
protected int pageS
protected int pageN
/* added by xiajun 新增设置当前页数方法 */
public void setPageNumber(int pageNumber) {
this.pageNumber = pageN
protected int totalCount = 0;
public Page(PageRequest p, int totalCount) {
this(p.getPageNumber(),p.getPageSize(),totalCount);
public Page(int pageNumber,int pageSize,int totalCount) {
this(pageNumber,pageSize,totalCount,new ArrayList(0));
public Page(int pageNumber,int pageSize,int totalCount,List&T& result) {
if(pageSize &= 0) throw new IllegalArgumentException("[pageSize] must great than zero");
this.pageSize = pageS
this.pageNumber = putePageNumber(pageNumber,pageSize,totalCount);
this.totalCount = totalC
setResult(result);
实际使用遇到的问题
1.关于灵活性的问题
你需要model中的几个属性值,你是调用自动生成的代码取得整个model,还是自己写一个,如果这个查询发生次数多,必须自己写
2.关于配置复杂的问题
看下官方文档高级映射,就知道这个难度不大,写着麻烦,配置很繁琐,为了一个特殊的查询是否有必要取那样做,前后端都hashmap,跨过model映射这个,如果要自己写,你的model要符合,我们的model不满足,全部直接都hashmap
论坛回复 /
(21 / 10289)
浏览: 82070 次
来自: 上海
②非数字如何处理 对于文档中只要出现某些文字,就提升权重,没有 ...
同感同感只不过是身处一个起点比较高的创业公司
看了一下豆瓣 感觉人气不旺 呵呵
cuichang 写道要推荐去豆瓣,送货快是京东。其他价格之类 ...
要推荐去豆瓣,送货快是京东。其他价格之类的没多少区别。2016年1月 Java大版内专家分月排行榜第二2015年12月 Java大版内专家分月排行榜第二2015年8月 Java大版内专家分月排行榜第二2015年3月 Java大版内专家分月排行榜第二2015年1月 Java大版内专家分月排行榜第二2014年12月 Java大版内专家分月排行榜第二2014年11月 Java大版内专家分月排行榜第二2014年6月 Java大版内专家分月排行榜第二2014年4月 Java大版内专家分月排行榜第二2014年1月 Java大版内专家分月排行榜第二2013年11月 Java大版内专家分月排行榜第二
2015年9月 Java大版内专家分月排行榜第三2015年6月 Java大版内专家分月排行榜第三2015年5月 Java大版内专家分月排行榜第三2015年2月 Java大版内专家分月排行榜第三2014年3月 Java大版内专家分月排行榜第三2013年12月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。StringUtils
isNotEmpty :判断某字符串是否非空StringUtils.isNotEmpty(null) = falseStringUtils.isNotEmpty(&&) = falseStringUtils.isNotEmpty(& &) = trueStringUtils.isNotEmpty(&bob&) = trueisNotBlank:判断某字符串是否不为空且长度不为0且不由空白符(whitespace)构成,下面是示例:StringUtils.isNotBlank(null) = falseStringUtils.isNotBlank(&&) = falseStringUtils.isNotBlank(& &) = falseStringUtils.isNotBlank(&\t \n \f \r&) = false
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:10246次
排名:千里之外
原创:22篇
转载:12篇
(1)(4)(3)(5)(21)

我要回帖

更多关于 mybatis isnotempty 的文章

 

随机推荐