本文主要记录一下,在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]}