当通用Mapper无法满足我们的需求时,我们可以自定义基于Mapper接口的xml文件,并在xml文件中配置SQL语句
在UserMapper接口中定义如下方法
List<User> selectAllByName(String name);
在resources目录中创建mapper目录,创建UserMapper.xml
<?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.atguigu.mybatisplus.mapper.UserMapper"> <sql id="Base_Column_List"> id, name, age, email </sql> <select id="selectAllByName" resultType="com.atguigu.mybatisplus.entity.User"> select <include refid="Base_Column_List"/> from user where name = #{name} </select> </mapper>
注意:MP中mapper目录是持久层映射文件的默认目录,如果是其他目录,需要配置mapper-locations,例如:
mybatis-plus.mapper-locations=classpath:xml/*.xml
在MapperTests中创建如下测试用例
@Test public void testSelectAllByName(){ List<User> users = userMapper.selectAllByName("Helen"); users.forEach(System.out::println); }
UserService中添加接口方法
List<User> listAllByName(String name);
@Override public List<User> listAllByName(String name) { // baseMapper对象指向当前业务的mapper对象 return baseMapper.selectAllByName("Helen"); }
ServiceTests中添加测试方法
@Test public void testListAllByName(){ List<User> users = userService.listAllByName("Helen"); users.forEach(System.out::println); }