mybatis開發記錄

問:插入一條記錄後如何返回主鍵id?數據庫

id設爲主鍵自增,加入<selectKey>標籤,以下。mybatis

<insert id="insert" parameterType="entity.Order">
	<selectKey keyProperty="id" resultType="long" order="AFTER">
		SELECT max(id)  AS value  from tb_order
	</selectKey>
	INSERT INTO tb_order
	(id,member_id,order_no)
	VALUES
	(#{id},#{memberId},#{orderNo})
	</insert>

令insert語句返回值爲主鍵id,加上keyProperty和useGeneratedKeys屬性。調試

<!--此處keyProperty="id"中的id是Java實體類中的屬性名-->
<insert id="insert" parameterType="entity.Order" useGeneratedKeys="true" keyProperty="id">
	INSERT INTO tb_order
	(id,member_id,order_no)
	VALUES
	(#{id},#{memberId},#{orderNo})
</insert>

經過配置能夠使插入記錄成功後自動將生成的主鍵封裝到實體類中。code

 

數據庫中爲某個浮點數字段設置默認值0.00,使用mybatis添加一條數據該字段並非默認值,而是null。xml

mybatis中的增改的SQL中的字段不該該隨意寫,數據庫默認值會被覆蓋。對象

 

記一次開發中的問題:在使用mybatis插入一條記錄時,要讓一個字段初始的值爲null,對應實體類中的屬性是int類型,數據庫默認值是null,可是新插入的記錄該字段的值始終是0接口

解決的辦法是將實體類中該字段的類型改成int的包裝類型,int類型是沒法用null賦值的,開發

因此若是數據庫中的字段容許爲空,對應實體類屬性就要用包裝類字符串

 

問:#{} 和${}傳參的區別get

#{}:將參數傳到數據庫再替換
${}:在編譯的時候替換,容易被SQL注入,要檢查字符串參數是否合法

limit  ${page*(page-1)},${pageSize}

${page*(page-1)}:參數使用表達式時,必須使用${},#{page*(page-1)}是不對的
,並且page必須是數值類型,不能是String類型

 

問:

mybatis中一條查詢語句的resultType設爲hashmap

可是對應的接口方法的返回類型是實體類的List集合 List<Recommend>

以下調用該方法

List<Recommend> dataList = recommendDao.getRecommendList(map);

編譯和運行都沒有出錯,可是調試時dataList的實際類型是List<HashMap>

不報錯的緣由是,List<Recommend>和List<HashMap>都是List

若是想遍歷dataList,遍歷的類型不管使用Recommend類型和HashMap類型都會報錯

System.out.println(dataList instanceof List);// 提示表達式老是true
System.out.println(dataList instanceof ArrayList);//輸出true

此問題說明,1:ArrayList類型對象的引用能夠指向泛型不一樣的ArrayList對象

2:mybatis默認返回ArrayList類型的List集合

相關文章
相關標籤/搜索