1.创建一个mapper.xml,定义 执行的语句名字 和 包装成什么类
2.在总的配置文件里申明这个mapper
3.在java里通过sqlSession执行mapper里定义好的内容
我们还可以使用另一种方法实现第三步。现在我们我们实际上是通过读取xml配置文件中的映射关系来确定selectUser执行的是哪条sql语句,返回什么值。
我们还可以再创建一个接口,在接口中写抽象方法,将接口中的抽象方法和xml文件里的映射关系一一对应。这样我们通过调用接口里的抽象方法,就可以找到xml中的映射关系,进而确定 selectUser执行的是哪条sql语句。
mapper.xml中存放了很多映射关系:
sql语句名称-》真正的sql语句,ie:selectUser-》select * from accounting_ledger.user
现在我们编写一个接口,对这些映射关系命名:
a(映射关系名)= 【sql语句名称-》真正的sql语句】
有了接口之后,我们再调用某个sql语句,就只需要知道映射关系名即可。
接口:
package Mybatis.Mapper;
import Mybatis.User;
import java.util.List;
public interface UserMapper {
List selectStudent();
}
xml:
(1)一个项目里可能有多个mapper,而每一个mapper对应一个接口,所以我们需要将mapper和接口对应。
mapper的namespace属性应该等于接口的全限定名
(
全限定名:
package com.example.myproject.interfaces;
public interface TestMapper {
// 接口方法定义
}
那么,TestMapper
接口的全限定名就是 com.example.myproject.interfaces.TestMapper
。这个全限定名唯一标识了这个接口在Java代码中(不是计算机的路径)的位置。
(2)一个mapper里有多个sql语句,所以接口里也要有多个抽象方法,我们需要将接口里的抽象方法和mapper中的sql语句对应
xml中,每条sql的id应该和接口中的抽象方法名相同
(select id="selectUser"-》List
(3)抽象方法的返回值应该和sql语句的返回值相同
这里抽象方法返回List
我们建议将mapper.xml和接口写在同一目录下:
因为此时我们的mapper被移动到了src文件夹内(接口肯定写在src里,mapper和接口在一起-》mapper在src里),所以此时我们要将全局配置文件中的mapper部分由:
改为
当配置文件在src文件夹下的时候,用resource,用/表示层级关系。在src文件夹外的时候,用url,用.表示层级关系。resource指类目录,url指电脑的文件目录
package Mybatis.Mapper;
import Mybatis.MyBatisUtil;
import Mybatis.User;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class Main3 {
public static void main(String args[]){
//用MyBatisUtil来包装之前Main1的工厂类,更简单地得到连接
try(SqlSession sqlSession = MyBatisUtil.getSession(true)){
//获取接口的实现类
UserMapper testMapper = sqlSession.getMapper(UserMapper.class);
//通过接口来实现sql语句
List user = testMapper.selectUser();
//这行代码使用了 Java 8 引入的新特性之一,称为方法引用(Method Reference)。
// 具体来说,System.out::println 是一个静态方法引用,用于将 println 方法关联到 System.out 对象上。
//在这里,System.out::println 等效于 lambda 表达式 (s) -> System.out.println(s)。
// 它表示将遍历 student 集合的每个元素,并将每个元素传递给 System.out.println 方法,实现在控制台上打印每个元素的效果。
user.forEach(System.out::println);
}
}
}
1.当上述代码调用testMapper.selectUser();时,java发现这是一个接口的抽象方法,没有发现真正的实现方法,先暂停
2.与此同时,java读取到了mybatis的大配置文件,发现了
3.mybatis开始工作,找到了这个mapper,和刚刚的那个接口,发现了mapper.xml和接口的各种对应关系
4.mybatis通过这个mapper里的sql语句开始为接口里的抽象方法同态生成实现的方法。