MyBatis是一个SQL映射框架,支持自定义SQL,存储过程和高级映射。
SpringBoot不为MyBatis集成提供官方支持,但MyBatis社区为MyBatis构建了SpringBoot入门程序。
您可以在http://blog.mybatis.org/2015/11/mybatis-spring-boot-released.html上了解有关SpringBoot MyBatis Starter发行公告的信息,还可以在GitHub https://github.com上探索源代码。 / mybatis / mybatis-spring-boot 。
创建一个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 mapperPUBLIC "-//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 name
mybatis.mapperLocations = mappers file locations
mybatis.typeAliasesPackage = domain object's package
mybatis.typeHandlersPackage = handler's package
mybatis.check-config-location = check the mybatis configuration exists
mybatis.executorType = mode of execution. Default is SIMPLE
在application.properties中配置typeAliasesPackage和mapperLocations 。
mybatis.typeAliasesPackage=com.sivalabs.demo.domain
mybatis.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
{@Autowiredprivate UserMapper userMapper;@Testpublic void findAllUsers() {List<User> users = userMapper.findAllUsers();assertNotNull(users);assertTrue(!users.isEmpty());}@Testpublic void findUserById() {User user = userMapper.findUserById(1);assertNotNull(user);}@Testpublic 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://blog.mybatis.org/p/products.html上了解有关MyBatis和Spring集成的更多信息,并
http://www.mybatis.org/spring/ 。
翻译自: https://www.javacodegeeks.com/2016/03/springboot-working-mybatis.html