使用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 mapper
PUBLIC "-//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、测试接口开发
@Test
public 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
安装: