文章目录
一、配置方式和接口方式的区别
在上一讲中,采用配置的方式使用mybatis框架。操作数据库时,利用SqlSession对象调用对应的方法去:sqlSession.method(“namespace.id” , arg);
本次学习使用mybatise的另一种使用方法,采用接口开发。根据对应的mapper对象直接调用接口中的方法即可实现数据库的操作。
二、mybatis接口开发
2.1 实例
先来看一个例子:
2.1.1 teacherMapper.xml mapper文件
<?xml version="1.0" encoding ="utf-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 命名空间: 采用接口开发时,命名空间名为接口的类全名-->
<mapper namespace="com.woniu.mapper.TeacherMapper">
<select id="all" resultType="Teacher">
select * from teacher
</select>
<select id="findById" resultType="Teacher">
select * from teacher where tid=#{tid}
</select>
<select id="findByIdAndName" resultType="Teacher">
select * from teacher where tid=#{0} and tname=#{1}
</select>
<select id="findByIdAndName2" resultType="Teacher">
select * from teacher where tid=#{tid} and tname=#{tname}
</select>
</mapper>
2.2.2 TeacherMapper.java 对应的接口类
public interface TeacherMapper {
public List<Teacher> all();
public Teacher findById(int tid);
public Teacher findByIdAndName(int tid,String tname);
public Teacher findByIdAndName2(Teacher teacher);
}
2.2.3 测试类
public class Test3 {
public static void main(String[] args) throws IOException {
//1、加载主配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2、创建工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//3、创建SqlSession
SqlSession session = factory.openSession();
//4、获取接口的对象
TeacherMapper mapper = session.getMapper(TeacherMapper.class);
System.out.println(mapper.all());
System.out.println(mapper.findById(2));
System.out.println(mapper.findByIdAndName(1, "lisi"));
System.out.println(mapper.findByIdAndName2(new Teacher(1,"lisi")));
//5、关闭
session.close();
}
}
2.2 接口开发注意
- 编写xml映射文件
- 注:namespace的值应为对应的接口的类全名(接口和xml一一对应)
- 编写接口
- 方法名和mapper.xml文件中的id值相同(方法和SQL标签一一对应)
- 方法的输入参数和mapper.xml中的parameterType类型一致。xml也可以不用指定参数类型
- 方法的返回值 和mapper.xml文件中标签的 resultType类型一致
- 接口和映射文件习惯放在同一个包中
- 主配置文件中加载接口类
- 接口与mapper文件放在同一包下
- 接口与mapper文件放在不同包下时
- 配置文件和接口类都需要加载
- 详见
- 接口与mapper文件放在同一包下
- 使用
- 通过SqlSession对象,调用getMapper(Class clazz)获取接口的mapper对象
- 用该mapper对象调用接口中的方法
3 接口映射过程
- 根据 接口名 找到 mapper.xml文件(根据的是namespace=接口全类名)
- 根据 接口的方法名 找到 mapper.xml文件中的SQL标签 (方法名=SQL标签Id值)
以上2点可以保证: 当我们调用接口中的方法时,
程序能自动定位到 某一个Mapper.xml文件中的sqL标签