SpringBoot整合mybatis通用Mapper+自定义通用Mapper方法解析

  

下面我将详细讲解“SpringBoot整合mybatis通用Mapper+自定义通用Mapper方法解析”的完整攻略。

一、什么是通用Mapper

通用Mapper是Mybatis官方提供的一个插件,它可以自动化生成Mybatis的基本CRUD方法,避免了开发人员重复编写大量类似的Sql代码的繁琐工作。这样能够大大提高开发效率,让我们把重点放在业务逻辑上。

二、SpringBoot整合mybatis通用Mapper

1. 引入依赖

首先,我们需要在pom.xml中引入mybatis-spring-boot-starter和mapper-spring-boot-starter两个依赖。

<dependencies>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
    </dependency>
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>2.1.5</version>
    </dependency>
</dependencies>

2. 配置数据源和mapper扫描

在application.properties中配置数据源和mapper扫描路径。

spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.mapper-locations=classpath:mappers/*.xml

3. 编写实体类和mapper

接下来,我们需要按照约定的规则编写实体类和mapper。

例如,我们先定义一个User实体类:

public class User {
    private Integer id;
    private String name;
    // 省略getter和setter方法
}

然后,我们定义一个UserMapper接口,继承自通用Mapper的接口和tk.mybatis.mapper.common.example.SelectByExampleMapper接口。

public interface UserMapper extends Mapper<User>, SelectByExampleMapper<User> {
    // 这里可以添加自定义方法
}

4. 编写Mapper.xml

最后,我们需要编写Mapper.xml文件,这里就不展示简单的CRUD方法了。我们来看一个自定义方法的示例。

<mapper namespace="com.example.mapper.UserMapper">
    <!-- 根据条件查询用户列表 -->
    <select id="selectByCondition" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List" />
        FROM user
        WHERE 1 = 1
        <if test="name != null and name != ''">
            AND name like concat('%', #{name}, '%')
        </if>
        <if test="id != null">
            AND id = #{id}
        </if>
    </select>
</mapper>

5. 测试自定义方法

编写好自定义Mapper方法后,我们就可以在Service类中调用该方法了。

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<User> selectByCondition(String name, Integer id) {
        Example example = new Example(User.class);
        example.createCriteria()
                .andLike("name", "%" + name + "%")
                .andEqualTo("id", id);
        return userMapper.selectByExample(example);
    }
}

以上就是SpringBoot整合mybatis通用Mapper的基本流程,没有涉及到一些高级用法,但足以应付大部分开发工作。

三、自定义通用Mapper方法解析

通过上面的例子,我们可以看到自定义通用Mapper方法的调用方式和实际编写一个Mapper方法的步骤是相似的。

自定义通用Mapper方法的步骤如下:

  1. 在Mapper接口中,添加你需要自定义的方法,提供参数和返回值的定义。

  2. 在Mapper.xml中,编写自定义方法的sql语句,参数名和Mapper接口中定义的一致。

  3. 在Service类中,按照自定义方法的定义编写Service方法,然后调用Mapper接口中定义的自定义方法,即可完成对应的业务逻辑。

下面,我们再举一个示例。假如我们要查询所有的用户,并根据年龄和创建时间的先后顺序排序。

  1. 在Mapper接口中,添加自定义方法。
public interface UserMapper extends Mapper<User> {
    List<User> selectAllOrderByAgeAndCreateTimeDesc();
}
  1. 在Mapper.xml中,编写sql语句。
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectAllOrderByAgeAndCreateTimeDesc" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List" />
        FROM user
        ORDER BY age ASC, create_time DESC
    </select>
</mapper>
  1. 在Service类中,编写业务逻辑。
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<User> selectAllOrderByAgeAndCreateTimeDesc() {
        return userMapper.selectAllOrderByAgeAndCreateTimeDesc();
    }
}

通过上面的示例,我们可以看到自定义通用Mapper方法的使用方法和常规的Mapper方法的使用方法基本一致。

最后,需要注意的是自定义通用Mapper方法也可以通过Mapper接口的继承来实现,只需要按照规范在对应的Mapper.xml文件中定义Sql语句即可。同时需要注意,自定义的Mapper方法的命名需要和Mapper接口中定义的方法名保持一致。

相关文章