mybatis动态代理方式的约定:不需要写statement,通过接口和接口中的方法定位出sql语句
3.1 创建一个接口
package one;
/* 3 Mybatis约定及基于动态代理方式的增删改查
* 如果使用的事务处理方式为jdbc,则手动commit提交 session.commit()
* Mapper动态代理方式的CRUD(Mybatis接口开发)
* 原则:约定优于配置 省略了statement
* */
//操作mybatis的接口,接口的名字需要与mapper.xml文件的名字一样,这样可以帮助找到mapper文件
/*匹配的过程:(约定的过程)
* 1.根据接口名找到mapper.xml文件(mapper.xml中的namespace=接口全类名)
* 2.根据方法名找到mapper文件的sql标签(方法名=sql标签id值)
* 习惯:SQL映射文件(mapper.xml)和接口放在一个包里
* */
public interface StudentMapper {
//方法名和mapper.xml文件里标签的id值一样,方法里面的输入参数和mapper里面的parameterType一致
//方法的返回值和mapper里面的resultType一致
//比如要查询一个学生的信息,用StudentMapper.xml文件里的SelectOneStudent这个select的id
Student selectOneStudent(int id);
}
此接口中的方法还是上一节普通statement方式CRUD中的方法,这一节利用mybatis接口开发来实现(又叫动态代理方式的CRUD)
此时对应的mapper文件的namespace应该写成接口的全类名
3.2 java方法
public static void selectOneStudent()throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
//通过session的getMapper方法找到对应接口
//getMapper里面放的是类,返回值是泛型,因为studentMapper是接口,所以后面要加上".class"
//返回值与输入的类相同类型,所以返回值也是studentMapper类型的
StudentMapper studentMapper=session.getMapper(StudentMapper.class);
Student student=studentMapper.selectOneStudent(3);//调用接口中的方法
System.out.println(student);
session.close();
}
可以看出代码和上一个方式中的几乎没变,差别就在把statement删掉了,取而代之的是用getMapper方法来找到对应的接口,然后再调用接口中的方法找到mapper文件中的sql语句
如果接口中的方法可以成功与mapper文件中的标签建立映射,则可以看到绿色的箭头指引
另外,觉得他的bug的解决办法很有效,可以参考一下 https://blog.youkuaiyun.com/u010648555/article/details/70880425