問:插入一條記錄後如何返回主鍵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集合