精选整合Spring Boot系列:使用MyBatis

200 阅读3分钟

在优锐课学习笔记中分享到MyBatis是用于高级映射和存储过程的SQL框架。

MyBatis是一个SQL映射框架,支持自定义SQL,存储过程和高级映射。

SpringBoot不为MyBatis集成提供官方支持,但是MyBatis社区为MyBatis构建了SpringBoot入门程序。

创建一个
SpringBoot Maven项目并添加以下MyBatis Starter依赖项。

<dependency>    <groupId>org.mybatis.spring.boot</groupId>    <artifactId>mybatis-spring-boot-starter</artifactId>    <version>1.0.0</version></dependency>


我们将重用在上一篇文章

SpringBoot中创建的User.java,schema.sql和data.sql文件:使用JdbcTemplate

创建

MyBatis SQL Mapper接口UserMapper.java,只需执行以下数据库操作即可:

package com.sivalabs.demo.domain;public interface UserMapper{    void insertUser(User user);    User findUserById(Integer id);    List<User> findAllUsers();}

我们需要创建

Mapper XML文件,以定义对应Mapper接口方法的映射SQL语句的查询。

src / main / resources / com / sivalabs / demo / mappers /目录中创建UserMapper.xml文件,如下所示:

<!DOCTYPE mapper    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.sivalabs.demo.mappers.UserMapper">    <resultMap id="UserResultMap" type="User">        <id column="id" property="id" />        <result column="name" property="name" />        <result column="email" property="email" />    </resultMap>    <select id="findAllUsers" resultMap="UserResultMap">        select id, name, email from users    </select>    <select id="findUserById" resultMap="UserResultMap">        select id, name, email from users WHERE id=#{id}    </select>    <insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">        insert into users(name,email) values(#{name},#{email})    </insert></mapper>

这里要注意的几件事是:

· Mapper XML中的命名空间应与Mapper接口的完全限定名称(FQN)相同

·

声明

ID值应与Mapper接口方法名称相同。

·

如果查询结果列名称与

bean属性名称不同,则可以使用<resultMap>配置在列名称及其对应的bean属性名称之间提供映射。

MyBatis还提供基于注释的查询配置,而无需Mapper XML。

我们可以创建

UserMapper.java接口并使用注释配置映射的SQL,如下所示:

public interface UserMapper{    @Insert("insert into users(name,email) values(#{name},#{email})")    @SelectKey(statement="call identity()", keyProperty="id",    before=false, resultType=Integer.class)    void insertUser(User user);    @Select("select id, name, email from users WHERE id=#{id}")    User findUserById(Integer id);    @Select("select id, name, email from users")    List<User> findAllUsers();}

SpringBoot MyBatis入门程序提供以下MyBatis配置参数,我们可以使用这些参数自定义MyBatis设置。

mybatis.config = mybatis config file namemybatis.mapperLocations = mappers file locationsmybatis.typeAliasesPackage = domain object's packagemybatis.typeHandlersPackage = handler's packagemybatis.check-config-location = check the mybatis configuration existsmybatis.executorType = mode of execution. Default is SIMPLE

在application.properties中配置typeAliasesPackage和映射器位置。

mybatis.typeAliasesPackage=com.sivalabs.demo.domainmybatis.mapperLocations=classpath*:**/mappers/*.xml

创建入口点类

SpringbootMyBatisDemoApplication.java。

@SpringBootApplication@MapperScan("com.sivalabs.demo.mappers")public class SpringbootMyBatisDemoApplication{    public static void main(String[] args)    {        SpringApplication.run(SpringbootMyBatisDemoApplication.class, args);    }}

观察到我们已经使用

@MapperScan(“ com.sivalabs.demo.mappers”)注释指定在何处查找Mapper接口。

现在创建一个

JUnit测试类并测试我们的UserMapper方法。

@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(SpringbootMyBatisDemoApplication.class)public class SpringbootMyBatisDemoApplicationTests{    @Autowired    private UserMapper userMapper;    @Test    public void findAllUsers() {        List<User> users = userMapper.findAllUsers();        assertNotNull(users);        assertTrue(!users.isEmpty());    }    @Test    public void findUserById() {        User user = userMapper.findUserById(1);        assertNotNull(user);    }    @Test    public void createUser() {        User user = new User(0, "Siva", "siva@gmail.com");        userMapper.insertUser(user);        User newUser = userMapper.findUserById(user.getId());        assertEquals("Siva", newUser.getName());        assertEquals("siva@gmail.com", newUser.getEmail());    }}

你可以在http://www.mybatis.org/spring/上了解有关MyBatis和Spring集成的更多信息

如果这个文章写得还不错,觉得有点东西的话 求点赞 求关注❤️ 求分享,感谢大家的支持和认可。

还有就是这我总结出了一些架构视频资料和互联网公司java程序员面试涉及到的绝大部分面试题和答案做成了文档和架构视频资料还有完整高清的java进阶架构学习路线图free分享给大家(包括Dubbo、Redis、Netty、zookeeper、Springcloud、分布式、高并发等架构技术资料),有问题的可以关注找我来交流