以下代码建立在上篇博客Mybatis快速搭建的基础上,没有搭建或者忘记如何搭建的可以去跟着搭建一下子Mybatis快速搭建
新建一个UserMapper接口,再在resources文件夹下新建一个com.svt.mapper,但是不能直接写com.svt.mapper,资源文件夹会认为com.svt.mapper就是你这个文件夹的名字,要在新建Directory的时候写com/svt/mapper
,这样就能分成三级了
这里直接执行会出错,可以使用一个maven helper插件,使用里面的run maven进行编译
插件可以在idea内下载
File->Settings->Plugins->进行搜索maven helper
下载之后重启idea即可使用,我们编译一下子
出来的结果有编译成功的文件夹名,这时候我们就可以去对应目录下看是否已经成功放在同一目录下
像这样就已经成功完成第一步啦
还有个小细节,此时资源路径已经更改,所有在mybatis-config.xml文件里我们需要修改一下加载sql映射文件的路径,右击UserMapper.xml文件选择Copy Relative Path
,直接粘贴到路径内
<!--加载sql映射文件-->
<mapper resource="com/svt/mapper/UserMapper.xml"/>
前一个博客内写的命名空间是test,比较随意,这里就需要将test改为自己定义的mapper接口路径
<mapper namespace="com.svt.mapper.UserMapper">
在UserMapper接口中写一个和id名一样的方法
User selectAll();
但此时有个小细节,之前写的查询语句查询的是整张表的数据,查询的是一个集合,这时候我们就需要用一个集合来接收数据,所有方法的类型是List集合,里面放的是一个一个user对象
public interface UserMapper {
List<User> selectAll();
}
通过 SqlSession的 getMapper方法获取 Mapper接口的代理对象
调用对应方法完成sql的执行
/**
* Mybatis 代理开发
*/
public class MybatisDemo2 {
public static void main(String[] args) throws IOException {
//1.加载mybatis核心配置文件,获取 SqlSessionFactory 对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获取 SqlSession 对象,用它执行 SQL 语句
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.执行sql
//3.1获取UserMapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.selectAll();
System.out.println(users);
//4.释放资源
sqlSession.close();
}
}
如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载
<!--Mapper代理方式-->
<package name="com.svt.mapper"/>
以后像这样的xml文件还会有很多,我们就可以使用扫描的方式进行加载,扫描一下对应的包就可以直接夹在里面所有的xml文件,不用再一个一个加载了
至此Mapper代理开发就阐述完毕,一起实现一下子吧!