mybatis源码阅读之4:mybatis增删改查注意点

本文主要记录一下,在mybatis的增删改查操作中,需要注意的几点。

1.mysql数据库获取自增主键

<insert id="addStudent" 
        parameterType="com.licw.lean.mybatis_anayl.Student"     
        useGeneratedKeys="true" 
        keyProperty="id">

		INSERT INTO studentTab (name,age) VALUES (#{name},#{age})

</insert>

useGeneratedKeys="true"表示获取数据库的自增主键

keyProperty="id"表示将自增主键赋值在对象的id属性上

mysql支持自增主键,自增主键值的获取,mybatis也是通过statement.useGeneratedKeys()方法获取

2.oracle数据库获取自增主键

<insert id="addStudent" parameterType="com.licw.lean.mybatis_anayl.Student">
	<selectKey keyProperty="id" order="BEFORE">
	    SELECT STUDENT.SEQ.nextval from dual
	</selectKey>
	INSERT INTO studentTab (name,age) VALUES (#{name},#{age})
</insert>

oracle自增通过<selectKey>标签获取数据库自增主键

keyProperty="id"表示将自增主键赋值在对象的id属性上

order="BEFORE"表示获取主键的sql语句在insert之前执行。这样插入数据时就带上上面获取的id了

备注:其实oracle不支持自增,oracle使用序列来模拟自增,每次插入数据的主键都是从序列中获取的值

1.索引

2.查询优化

3.分页查询优化

4.关联表的懒加载

参数匹配

1.单个参数

单个参数,mybatis不会做特殊处理,比如你在接口select(Integer id)传一个id,mapper.xml中的sql,用#{id}能接收,用#{idabc}也能接收.

2.多个参数

比如在接口select(Long id,String groupName),mybatis会做特殊处理,多个参数会被封装成一个map,

key:param1,param2

value:传入的值

此时,如若ID=#{id} AND GROUP_NAME=#{groupName},sql会报错,报找不到id和groupName,

这种情况下,允许的参数值是[0,1,param1,param2],0和1表示参数的索引序号,param1表示第一个参数,param2表示第二个参数

那要是想用指定的属性名传递参数呢?我们可以这样做:

select(@Param("id") Long id,@Param("groupName") String groupName)

即在定义接口的时候,在参数前面加一个@Param注解,指定sql中接收的属性名

3.对象参数

#{属性名}获取的就是对象中的属性

4.map类型参数

#{key}获取的就是map中的key

5.如果是Collection(List,Set)类型或者数组,mybatis也会做特殊处理,把传入的list或者数组封装在map中,

key:Collection(collection),如果是List,还可以使用这个key(List),数组(array)

例如:List<Student> findByIds(List<Long> ids),获取第一个id的值:id=#{ids[0]}

猜你喜欢

转载自blog.csdn.net/licwzy/article/details/86689247