使用XML文件进行开发,在调用SqlSession进行操作时,需要指定MyBatis映射文件中的方法,这种调用方式过于烦琐。为解决此问题,MyBatis提供了接口开发的方式。
接口开发的目的:
-
解决原生方式中的硬编码
-
简化后期执行SQL
使用和指定语句的参数和返回值相匹配的接口(比如 UserMapper.class),现在你的代码不仅更清晰,更加类型安全,还不用担心可能出错的字符串字面值以及强制类型转换。
需修改的地方:
1.在mapper文件夹下创建XxxMapper接口,并定义相应的抽象方法。
2.在mapper文件夹下创建映射文件XxxMapper.xml,并指定其namespace为对应Mapper接口的绝对路径。
3.在MyBatis主配置文件中,将mapper包下所有的Mapper接口引入
<mappers><!--<mapper resource="com/ambow/mapper/UserMapper.xml"/>--><package name="com.foxbill.mapper">
<mappers>
4.在pom.xml中配置resource,指定打包资源,使mapper包中的映射文件可以被打包到classes中【另一种方式:也可以不做如下配置,而是把映射文件,放在resources对应的文件夹中】
<build><!--加入 resource 插件--><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources></build>
一、实现步骤
1、创建Mapper接口
package com.ambow.mapper;import com.ambow.pojo.User;import java.util.List;public interface UserMapper {public List<User> selectUser();public List<User> searchUser(String keywords);public int insertUser(User user);public int updateUser(User user);public int deleteUser(int id);
}
2、修改mapper.xml文件中的namespace
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--MyBatis接口开发,需要修改namespace-->
<mapper namespace="com.ambow.mapper.UserMapper"><select id="selectUser" resultType="com.ambow.pojo.User">select * from tb_user</select><select id="searchUser" resultType="com.ambow.pojo.User">select * from tb_user where username like '%${_parameter}%'</select><!--新增用户--><insert id="insertUser" parameterType="com.ambow.pojo.User">insert into tb_user values(null,#{username},#{password},#{gender},#{addr})</insert><update id="updateUser" parameterType="com.ambow.pojo.User">update tb_user set username = #{username},password = #{password}, gender = #{gender},addr = #{addr}where id = #{id}</update><delete id="deleteUser">delete from tb_user where id = #{id}</delete></mapper>
3、修改主配置文件中映射文件的路径
<mappers><!--<mapper resource="com/ambow/mapper/UserMapper.xml"/>--><package name="com.ambow.mapper"/>
</mappers>
4、测试接口开发
@Testpublic void test() throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);//获取SqlSessionFactory - 工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// System.out.println(sqlSessionFactory);//获取SqlSession - 连接对象SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> list = userMapper.selectUser();for (User user : list) {System.out.println(user);}}
二、MyBatis动态代理原理
三、MyBatisX 插件
MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。
主要功能:
-
XML 和 接口方法 相互跳转
-
根据接口方法生成 statement
安装: