2016年工作中遇到的問題1-10:select-for-update鎖表
1.select... for update鎖表。
注意事項:
事務下使用,@Transactional
如果用主鍵,只鎖住1行記錄
如果不用主鍵,會鎖住多條記錄,mysql下測試,查詢1條,鎖住1行,查詢2條,鎖住2行。
網上不少文章說,沒有用主鍵,會“鎖表”,似乎不符合事實額。
比如,http://www.cnblogs.com/chenwenbiao/archive/2012/06/06/2537508.html
2.分頁跳轉的輸入框,可以用html5中的input-number.
<input type="number" max="10" min="1"/>
右側的“增加-減少”輸入工具,可以+1或者-1。
如果使用者手動輸入,字串等非數值是不允許的。
但是,存在1個問題。
使用者輸入的數字,不會檢查是否滿足 min 和 max屬性的限制。
因此,需要額外寫js事件去判斷,blur失去焦點事件是可以的。
最後需要注意一點,jquery的attr獲得是string型別,使用者輸入的頁數 是否 滿足min和max,需要先轉換成int型別。
//解決分頁輸入,可能超過最大頁數的問題。html5的input-number,不會檢查使用者的輸入,是否滿足min和max這2個屬性
$(function(){
var toGoPage=$("#toGoPage");
if(toGoPage){
toGoPage.blur(function(){
var page=parseInt(toGoPage.val());
var maxPage=parseInt(toGoPage.attr("max"));
var minPage=parseInt(toGoPage.attr("min"));
console.log("page,"+page);
console.log("maxPage,"+maxPage);
console.log("minPage,"+minPage);
if(page>maxPage){
page=maxPage;
}
if(page<minPage){
page=minPage;
}
toGoPage.val(page);
console.log("page,"+page);
});
console.log("bind2");
}
});
</script>
3.用字串替換replace,而不是手動拼接字串。
var str ="<a href='{url}' target='_about'>{name}</a>";
str=str.replace("{url}",url);
str=str.replace("{name}",name);
手動拼接字串,太麻煩了,可讀性很差。
4.jquery-easyui,格式化函式formatter.
注意事項:
a.formatter只需要填寫函式的名字。
b.如果是格式化某個欄位,field就是欄位的名稱。
c.如果格式化需要多個欄位,field不能不寫,同時不能寫某個指定的欄位,可以用個不存在的欄位,比如“null”。
formatLink函式,就存在一定的技巧。field用不存在的“null”,挺好使的。
<#include "common/common.html"/>
<meta charset="UTF-8">
<table
class="easyui-datagrid"
id="datagrid"
title="友情連結"
url="${base}/friendlink/list"
toolbar="#toolbar"
rownumbers="true"
fitColumns="true"
singleSelect="true"
data-options="fit:false,border:false,pageSize:10,pageList:[5,10,15,20]" >
<thead>
<tr>
<th field="id" width="5%">ID</th>
<th field="name" width="5%">名稱</th>
<th field="url" width="35%">URL</th>
<th field="remark" width="35%">備註</th>
<th field="sort" width="5%">排序</th>
<th field="null" width="10%" formatter="formatLink" width="5%">效果</th>
</tr>
</thead>
</table>
<script type="text/javascript">
function formatLink(val,row,index){
if(!row){console.error("The row is null,index="+index);return;};
var name = row.name;
var url = row.url;
var str ="<a href='{url}' target='_about'>{name}</a>";
str=str.replace("{url}",url);
str=str.replace("{name}",name);
return str;
}
</script>
5.電商系統,後端新增商品預覽。
後端再做一套“商品詳細頁面”,工作量巨大。
解決方法:
前端商品詳細頁面,改造下。
再增加一個url,service查詢資料的時候,可以查詢“未釋出”的商品。
後端使用Iframe,嵌入前端新增的url。
“完全逼真”的預覽效果。
6.Mybatis的“#{}”和"${}"
@Select("select * from ${tableName} where status =0 order by sort asc,id asc")
List<CommonCategory> listAll(@Param("tableName")String tableName);
這個地方的tableName只能用${},不會帶“引號”。
str=abc, ${str}輸出abc,#{str}輸出 'abc'。
7.SpringMVC3的ResponseBody返回字串亂碼問題.
這個問題遇到很多次了,最近找不到那個配置了,網上找了一個。
引起亂碼原因為spring mvc使用的預設處理字串編碼為ISO-8859-1,具體參考org.springframework.http.converter.StringHttpMessageConverter類中public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
解決方法:
第一種方法:
對於需要返回字串的方法新增註解,如下:
@RequestMapping(value="/getUsers", produces = "application/json; charset=utf-8")
public String getAllUser() throws JsonGenerationException, JsonMappingException, IOException
{
List<User> users = userService.getAll();
ObjectMapper om = new ObjectMapper();
System.out.println(om.writeValueAsString(users));
DataGrid dg = new DataGrid();
dg.setData(users);
return om.writeValueAsString(dg);
}
此方法只針對單個呼叫方法起作用。
第二種方法:
在配置檔案中加入
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value = "text/plain;charset=UTF-8" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
參考:http://www.cnblogs.com/dyllove98/p/3180158.html
網上也有配置了mappingJacksonHttpMessageConverter,不需要。
但是如果配置了這個,訪問一個url,比如http://localhost/category/list?amw=w,Chrome出現的“下載”,而不是直接展示內容了。
<mvc:annotation-driven >
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter" >
<property name = "supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>applicaton/json;charset=UTF-8</value>
</list>
</property>
</bean> -->
</mvc:message-converters>
</mvc:annotation-driven>
8.Mybatis,There is no getter for property named 'merchantId' in 'class java.lang.String'。
如果mybatis語句中,增加了<if test="merchantId != null">這個if判斷,需要給dao方法中,手動增加@Param("merchantId")。
List<String> findByShopId(@Param("merchantId")String merchantId);
<select id="findByShopId" resultType="string">
select id from mall_brand where 1 =1
<if test="merchantId != null">
and merchantType=2 and merchantId=#{merchantId}
</if>
</select>
如果只是#{}取值,不需要手動@Param("merchantId")。
List<String> findByShopId(String merchantId);
<select id="findByShopId" resultType="string">
select id from mall_brand where 1 =1
and merchantType=2 and merchantId=#{merchantId}
</select>
9. Spring直接把配置檔案中的變數,放到Java變數中,放到xml中有時候不夠直接。
@Value("${mailFromAddress}")
private String mailFromAddress;
10.SpringMVC傳送郵件,必須設定“from”引數。
在這個bean中設定from引數不行,因為沒有from這個引數。
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host">
<value>${mailServerHost}</value>
</property>
<property name="port">
<value>${mailServerPort}</value>
</property>
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.timeout">25000</prop>
</props>
</property>
<property name="username">
<value>${mailUserName}</value> <!-- 傳送者使用者名稱 -->
</property>
<property name="password">
<value>${mailPassword}</value> <!-- 傳送者密碼 -->
</property>
<!-- <property name="from">
<value>${mailFromAddress}</value>
</property> -->
</bean>
@Resource
private JavaMailSender mailSender;
@Value("${mailFromAddress}")
private String mailFromAddress;
//在傳送的時候,必須設定from
public void send(String subject,String content,String to){
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(content);
simpleMailMessage.setFrom(mailFromAddress);
simpleMailMessage.setTo(to);
mailSender.send(simpleMailMessage);
}
#配置引數
mailServerHost=
mailServerPort=25
mailUserName=
mailPassword=
mailFromAddress=
shopHost=
需要特別注意,userName是用來連線伺服器的,from引數是可以手動設定的。
from和userName可以不同。
相關文章
- 2016年工作中遇到的問題11-20
- 2016年工作中遇到的問題21-30
- 工作中遇到的問題
- 關於工作中遇到的問題
- 有待整理的工作中遇到的問題
- vue工作中遇到的一些小問題Vue
- 2015年工作中遇到的問題91-100
- 2015年工作中遇到的問題141-150
- 2015年工作中遇到的問題121-130
- 工作中遇到的一些問題和處理
- 【面試】工作中遇到的難點及解決方案——人臉解鎖相機衝突問題面試
- 2015年工作中遇到的問題111-120
- 2015年工作中遇到的問題101-110
- oracle鎖表問題Oracle
- 2015年工作中遇到的問題:131-140(有圖才有真相)
- MySQL實際應用中遇到的鎖問題薦MySql
- Oracle 解決鎖表問題Oracle
- Casperjs中fill提交表單遇到的問題JS
- Error-工作中遇到的Error
- 工作遇到的問題
- mysql 遇到的問題MySql
- 工作中遇到的Linux命令Linux
- 【雜談】JPA樂觀鎖改悲觀鎖遇到的一些問題與思考
- 關於動態表單遇到的一些問題
- DML的鎖,修改表經常遇到的的場景
- linux遇到的問題Linux
- 使用git遇到的問題Git
- AndroidJNI遇到的問題Android
- 面試中遇到的問題面試
- ueditor使用遇到的問題
- JSP遇到的問題....JS
- WangEditor遇到的問題
- 2017年秋季遇到的相容問題總結
- 那些前端工作中遇到的坑(01)前端
- mysql innodb 索引失效問題引起表級鎖MySql索引
- Oracle死鎖一例(ORA-00060),鎖表導致的業務死鎖問題Oracle
- [譯] 怎樣更好地使用 Vue:我在新工作中遇到的一些問題清單Vue
- javaweb中自己遇到的問題JavaWeb