在接口定义方法:
添加:并且获取主键的值
id:接口中的方法名,parameterType参数类型:插入的参数类型,可以省略。
mysql支持自增主键,自增主键值的获取,mybatis也是利用statement . getGenreatedKeys();
useGeneratedKeys="true";使用自增主键获取主键值策略
keyProperty;指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性
修改:
删除:
测试增删改:
1、mybatis允许增删改直接定义以下类型返回值
Integer. Long、Boolean、void
2、我们需要手动提交数据
sqlSessionFactory. openSession();===>手动提交
sqlSessionFactory. openSession(true);===》自动提交
查询:
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
使用不同的数据库:
Oracle不支持自增: Oracle使用序列来模拟自增:
每次插入的数据的主键是从序列中拿到的值:如何获取到这个值:
或者
BEFORE运行顺序:
先运行selectKey查询id的sql;查出id值封装给j avaBean的id属性
在运行插入的sq1;就可以取出i d属性对应的值
AFTER运行顺序:
先运行插入的sql (从序列中取出新值作为id) ;
再运行selectKey查询id的sql:
单个参数: mybatis不会做特殊处理,
#{参数名}:取出参数值。
多个参数: mybatis会做特殊处理。多个参数会被封装成一个map。
key: param1. . . paramN ,或者参数的索引也可以
value:传入的参数值
#{}就是从map中获取指定的key的值;
异常:
org.apache.ibatis.pinding.BindingException:Parameter 'id' not found .Available parameters are [1,0, param1, param2]
错误原因:
(方法: public Employee get EmpByIdAndLastName (Integer id,String lastName)
取值: #{id} ,#{lastName})
命名参数:明确指定封装参数时map的key; @Param("id")
多个参数会被封装成一个map,
key:使用@Param注解指定的值
value:参数值
#{指定的key}取出对应的参数值
POJO:
如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo;
#{属性名}:取出传入的pojo的属性值
Map:
如果多个参数不是业务模型中的数据,没有对应的pojo,为了方便,我们也可以传入map
#{key}:取出map中对应的值
TO:
如果多个参数不是业务模型中的数据,但是经常要使用,推荐来编写一个TO (Transfer object)数据传输对象
Page{
int index;
int size;
}
思考:
#{}和${}的区别: