2014年工作中遇到的20个问题:161-180

161.Mybatis的Dao找不到xml中的映射配置,可能的一个原因是:xml配置中的namespace不对。

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.p2p.user.dal.dao.MemberPointDao.selectForUpdateByUserId

<mapper namespace="com.p2p.user.dal.dao.MemberPointDao">这个地方的名字要正确。

162.Mybatis的ResultType映射,可以使用注解@ResultMap。

@ResultMap("MemberPointResultMap")

@Select("select "+columns+" from "+tableName+" where user_id=#{userId} for update")

MemberPoint selectForUpdateByUserId(String userId);

<mapper namespace="com.p2p.user.dal.dao.MemberPoint">

<resultMap id="MemberPointResultMap" type="MemberPoint">

<result column="user_id" property="userId" />

<result column="produce_cumulative" property="produceCumulative" />

<result column="consume_cumulative" property="consumeCumulative" />

<result column="level" property="level" />

</resultMap>

</mapper>

163.mysql数据库修改密码。

登录服务器Linux,想登录mysql,提示/tmp/socket不能连接。

在本地,通过dos连接远程mysql,可以正常登录和查看,但是没有mysql数据库的权限。非root用户,没权限修改自己的密码。

奇怪的是,线上mysql使用的socket是自己安装目录下的,为什么不能正常登录mysql呢?

只能让root去修改密码了。

164.异步搜索和表格,回显用户的查询条件比较麻烦,还有高亮等样式。

同步打开新页面的方式,方便用户搜藏当前链接,利于搜索引擎优化。

如果是后台管理系统或者内部使用的系统,AJAX的方式更加方便友好。

165.把Freemarker、Java-EL表达式和Mybatis的表达式搞混淆了。

<#assign queryUrl="${base}/loan/list.html?time=${page.time}&term=${page.term}"/>

这里只能使用${},取的是Java后台的变量。

#只有Freemarker内部和Mybatis配置文件中支持。

166.不使用left-join等多表关联查询,只用单表查询和Java程序,简便实现“多表查询”效果,

局限性:单表查询,不适合做多表联合搜索,并且需要分页的时候。

167.分页的URL有2种情况。

如果传入的url包含有参数,含有“?”后面的参数,就不需要再加上?了。

<#if url?contains(‘?‘) == -1 >

<#assign pageUrl = "${url}?pageNum=${pageNum}&pageSize=${data.pageSize}">

<#else>

<#assign pageUrl = "${url}&pageNum=${pageNum}&pageSize=${data.pageSize}">

</#if>

这个问题也可以说明,分页url打开新的页面,并且使用Freemarker生成,维护参数比较麻烦。

如果使用AJAX的分页组件,不刷新页面,JS中维护分页查询参数就简单很多了。

168.JQuery POST发送参数有要求。

$.post(

"/article/comment/list.json",{

"params[article_id]":${article.id},

pageNo:pageNo

}

正确的写法:article_id,"params.article_id","params[article_id]"

如果参数名称包含“()[]”,需要用引号括起来。

169.Mybatis属性必须存在。

传入的对象,必须存在maxDate等属性,否则就会报错。

为什么会出现这种问题呢?

searchListPage(PageVo);

searchListPage(LoanPageVo);

LoanPageVo有maxDate属性,而PageVo没有。

带搜索的分页,可能会接收更多的条件,普通的其它地方的查询可能不需要maxDate等字段,想把参数设置得更为通用,

能用PageVo就不用LoanPageVo,但是最后却遇到了上面的问题。

做法是:把2个dao分开,简化处理。

<select id="searchListPage" resultType="java.util.Map">

select t.*

from p2p_transfer t left join p2p_loan_info l on t.lid =

l.lid

where 1=1

<if test="maxDate != null">

and #{maxDate} >= t.exptime

</if>

<if test="minDeadline != null">

and deadline >= #{minDeadline}

</if>

<if test="maxDeadline != null">

and deadline &lt;= #{maxDeadline}

</if>

order by id desc

</select>

170.Freemarker中的“大于”和“小于”。

用“gt”和“lt”。

<#if category.count gt 0 >

科普一下:

gt :great than

lt : less than

171.SpringMVC2种访问方式,的动态渲染与JSON格式同时支持。

http://fansunion.cn/case.json

http://fansunion.cn/case.html

<bean

class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">

<property name="defaultContentType" value="application/json" />

<property name="mediaTypes">

<map>

<entry key="html" value="text/html" />

<entry key="json" value="application/json" />

<entry key="xml" value="application/xml" />

</map>

</property>

<property name="defaultViews">

<list>

<bean

class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">

</bean>

<bean id="marshallingView"

class="org.springframework.web.servlet.view.xml.MarshallingView">

<property name="marshaller">

<bean id="xStreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">

<property name="autodetectAnnotations" value="true" />

</bean>

</property>

<property name="contentType" value="application/xml" />

</bean>

</list>

</property>

</bean>

这种方式的好处,如果想由动态渲染转换为JSON格式,很方便。

172.SpringMVC的@ModelAttribute。

@ModelAttribute

protected void menuColumnList(Model model) {

List<Map<String, Object>> menuColumnList = initMenuColumnList();

model.addAttribute("menuColumnList", menuColumnList);

currentColumn(model, 0);

}

在BaseController定义了上述方法,ArticleController继承BaseController,那么ArticleController的每个方法响应的时候,都会

执行menuColumnList方法,从而查询菜单数据。

但是,在后端管理系统中,菜单是固定的,不是动态的,因此不需要再查询。

解决办法是,新建AdminBaseController,所有Controller共用的方法才放到Controller,原来的BaseController可以改名为

FrontController。

173.AJAX方法报错。

某Web前端同事封装了AJAX方法,结果在使用过程中报错了。

为什么这么说呢?同样的参数,$.ajax和$.post都是可以的,只要使用了ptp.ajax就不正常,

对比一下,就知道对错了。

174.substring包头不包尾。

java.lang.String.substring public String substring(int beginIndex,int endIndex)返回一个新字符串,它是此字符串的一个子字符串。

该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。

因此,该子字符串的长度为 endIndex-beginIndex。

175.SpringMVC拦截器排除某些路径。

<mvc:interceptors>

<mvc:interceptor>

<mvc:mapping path="/*"/>

<mvc:exclude-mapping path="/resource/**"/>

<bean  class="com.xinlong.cms.front.interceptor.CmsFrontInterceptor"></bean>

</mvc:interceptor>

</mvc:interceptors>

到此还有个问题mvc:exclude-mapping 标签不被spring-mvc-3.0.xsd支持,

该配置在spring-mvc-3.2.xsd中,可以通过http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd获取,

SpringMVC头部引入

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd

http://www.springframework.org/schema/util

http://www.springframework.org/schema/util/spring-util-3.0.xsd">

使用spring-mvc-3.2.xsd。

176.replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中,

1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。

2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

表有3个字段:uid,name,value

主索引:可以是uid,或者 uid和uname

replace into p2p_user_info(user_id,info_name,info_value) values(#{uid},‘borrower_auth‘,#{auth}

177.数据库与Map大小写。

查询数据库结果保存在map中,数据库的字段是大写的,比如USER_INFO,Map取数据的时候,用的是小写“user_info”。

把数据库的统一改为小写。

178.Html中重复定义相同元素,会导致很多奇葩的问题。

比如定义2个title,<title></title>;<title>1</title>页面中的标题为空,浏览器将其默认为当前访问的url。

定义2个相同的id,js取值会取错。

2个同名name的input框,表单提交都会提交,但是后端接收的时候,可能会是第1个,可能不是想要的。

179.sql查询排序不稳定。

select * from user order by id desc;

主键id是唯一的,排序也是唯一的。

select * from user order by name desc;

如果遇到2个一样的name,比如“boy”,那么查询结果就是不稳定的。

我用mysql-front查询,发现结果都一样。

但是换一个数据库查询工具,还有web界面中看到的,每次是不一样的。

排序不稳定,给人的感觉不稳定。

180.SpringMVC安全问题。

@RequestMapping("list")

public void list(PageVo form, Model model) {

form.handleSearch();

PageVo page = withdrawService.listPage(form);

form.resetSearch();

model.addAttribute("res", 1);

model.addAttribute("data", PageUtils.data(page));

}

list.json直接响应json格式的请求。

这里面存在一个问题,如果model.addAttribute里放置的属性有多余的,那么通过这种方式,前端获得的json

会存放有多余的信息,比如当前登录的用户信息。

model.addAttribute("user",user);

手动响应JSON格式的请求,只发送必要的字段,比较好。

原文首发:http://fansunion.cn/article/detail/559.html

时间: 2024-11-10 15:09:07

2014年工作中遇到的20个问题:161-180的相关文章

2014年工作中遇到的20个问题:201-220

201.Mybatis查询不到结果时,返回的是为空不为null的List.   @Select("select * from p2p_role_privilege where privilege_acl = #{acl}") List<Map<String, Object>> listByPrivilege(Integer acl); 202.日期的12小时表示与24小时表示.yyyy-MM-dd HH:mm:ss 大写的HH,表示是24小时制,下午2点,就是1

2014年工作中遇到的20个问题:141-160

141.日期转换. //输入的时间为毫秒的准确时间 //firstTime:1417139867916,lastTime:1419731867916 public static int getDayBetweenTwoDate(long firstTime, long lastTime){ //当天的0点:1417104000000 long firstCalendaStartTime = getTheDayStartTime(firstTime); //当天的0点:1419696000000

2014年工作中遇到的20个问题:120-140

121.Tomcat增加JVM启动参数.set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%set JAVA_OPTS=%JAVA_OPTS% -Dp2p.config_path=file:C:/Users/Administrator/git/p2p2/yiqihao JAVA_OPTS后的的"=",左右两边不能出现空格.以前好像总结过这个问题,这次又犯了相同的错误,和上面的Tomcat默认配置比较一下,很快就想起了这个问题. 122.图片无法响应,总

2014年工作中遇到的20个问题:41-60

41.Maven工程中,src/main/webapp目录结构太深,不方便点击.在普通的Web工程中,WebContent直接就在项目的根目录下,打开页面比较方便.因此,为了方便,把Maven工程的src/main/webapp直接作为"Source  Code"加入到Build Path下,这样可以方便编辑webapp目录中的页面.但是,导致的结果是:Maven打包时,不会把webapp目录下的页面打包到target目录对应的文件中.因此,把src/main/webapp作为Sour

2013年工作中遇到的20个问题:181-200

每个人在工作中遇到的问题,很多都是类似的.了解别人遇到的问题,自己遇到的时候就可以很快地解决它. 很多人不屑于这种“细节问题”,但我想说,掌握这些细节问题一次可能只能帮你节省1s的时间,但是这个细节使用频率非常高, 1年可以节省不少时间的.如果按1秒*20次*300天=100分钟. 181.MySQL数据库是否区分大小写. 方法1:设置字符集校对collate 通过查询资料发现需要设置collate(校对) . collate规则: *_bin: binary case sensitive co

2014年工作中遇到的10个问题:221-230

221.新建Maven项目的2种方式. a.新建Dynamic Web Project,然后转换成Maven项目. b.新建Maven Project,Next,Next,选择cocoon-22-archetype-webapp. 第2种方式,是boss告诉我的,以前我一直喜欢用第1种方式. 第2种方式,暂时没有去实践.上次尝试了下,报错,郁闷~ 222.web.xml中配置taglib. 在Eclipse中会在taglib那一行有一个错误标志,但是运行的 时候没有问题-- 原因: 所使用版本的

分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据

原文:分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据 分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据 今天开发找我,说数据库insert不进数据,叫我看一下 他发了一个截图给我 然后我登录上服务器,发现了可疑的地方,而且这个数据库之前有一段经历 在月初的时候这个数据库曾经置疑过,启动不起来 Could not redo log record (163041:116859:5), for transaction ID (0:-1175226963), on

知乎上关于前端工作中经常遇到的问题总结

有哪些经常被误用的 HTML.JavaScript.CSS 的元素.方法和属性? 以前想要把一个元素(input 之类的)设成只读的时候都是用 disabled,后来发现这是不对的. 因为在 HTML 里面,如果一个元素被设置成 disabled, 那么它的值就不会被发送到 server 端. 正确的做法应该是使用 readonly. 那么除了这个 disabled,在 Web 开发中还有哪些东西是经常被误用的? 添加评论分享 按票数排序 按时间排序 21 个回答 一丝,专业 CSS 吐槽,下面

2014年终工作总结

今天是我来到公司的第20天,2015年的钟声即将敲响,伴随着新的一年的到来,现将个人在2014年的工作总结如下: 首先,来到公司后,我就去熟悉公司原来的比特币的项目代码以及业务逻辑.说实话这个项目的代码写的不是很好,代码中有许多的冗余,代码的重用性太差,接口的通用性不强,而且少了很多关键代码该有的注释,所以,对于我来说,熟悉代码的过程有点长,但是,我每天努力坚持看,现在基本熟悉其中的整体框架以及业务流程.相信慢慢的会更加熟悉,将这个项目未完成的部分努力完成,完成的部分做得更好. 其次,就是现在正