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集合

相关文章
相关标签/搜索