161.Mybatis的Dao找不到xml中的映射配置,可能的一個緣由是:xml配置中的namespace不對。html
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">這個地方的名字要正確。java
162.Mybatis的ResultType映射,可使用註解@ResultMap。mysql
@ResultMap("MemberPointResultMap")web
@Select("select "+columns+" from "+tableName+" where user_id=#{userId} for update")ajax
MemberPoint selectForUpdateByUserId(String userId);spring
<mapper namespace="com.p2p.user.dal.dao.MemberPoint">sql
<resultMap id="MemberPointResultMap" type="MemberPoint">數據庫
<result column="user_id" property="userId" />apache
<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 <= #{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