如何在MyBatis中使用Spring Boot?
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,如下所示:
packagecom.sivalabs.demo.domain;
publicinterfaceUserMapper
{
voidinsertUser(Useruser);
UserfindUserById(Integerid);
List<User>findAllUsers();
}
我们需要创建Mapper XML文件来为对应的Mapper接口方法定义对映射的SQL语句的查询。
在src/main/resources/com/sivalabs/demo/mappers/目录中创建UserMapper.xml文件,如下所示:
<!DOCTYPEmapper
PUBLIC"-//mybatis.org//DTDMapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.sivalabs.demo.mappers.UserMapper">
<resultMapid="UserResultMap"type="User">
<idcolumn="id"property="id"/>
<resultcolumn="name"property="name"/>
<resultcolumn="email"property="email"/>
</resultMap>
<selectid="findAllUsers"resultMap="UserResultMap">
selectid,name,emailfromusers
</select>
<selectid="findUserById"resultMap="UserResultMap">
selectid,name,emailfromusersWHEREid=#{id}
</select>
<insertid="insertUser"parameterType="User"useGeneratedKeys="true"keyProperty="id">
insertintousers(name,email)values(#{name},#{email})
</insert>
</mapper>
这里要注意的几件事是:
Mapper XML中的命名空间应与Mapper接口的完全限定名称(FQN)相同。
语句ID值应与Mapper接口方法名称相同。
如果查询结果列名称与bean属性名称不同,则可以使用<resultMap>配置在列名称及其对应的bean属性名称之间提供映射。.
MyBatis还提供基于注释的查询配置,而无需Mapper XML。
我们可以创建UserMapper.java接口,并使用注释配置映射的SQL,如下所示:
publicinterfaceUserMapper
{
@Insert("insertintousers(name,email)values(#{name},#{email})")
@SelectKey(statement="callidentity()",keyProperty="id",
before=false,resultType=Integer.class)
voidinsertUser(Useruser);
@Select("selectid,name,emailfromusersWHEREid=#{id}")
UserfindUserById(Integerid);
@Select("selectid,name,emailfromusers")
List<User>findAllUsers();
}
SpringBoot MyBatis入门程序提供以下MyBatis配置参数,我们可以使用这些参数来自定义MyBatis设置。
mybatis.config=mybatisconfigfilename
mybatis.mapperLocations=mappersfilelocations
mybatis.typeAliasesPackage=domainobject'spackage
mybatis.typeHandlersPackage=handler'spackage
mybatis.check-config-location=checkthemybatisconfigurationexists
mybatis.executorType=modeofexecution.DefaultisSIMPLE
在application.properties中配置typeAliasesPackage和mapperLocations。
mybatis.typeAliasesPackage=com.sivalabs.demo.domain
mybatis.mapperLocations=classpath*:**/mappers/*.xml
创建入口点类SpringbootMyBatisDemoApplication.java.
@SpringBootApplication
@MapperScan("com.sivalabs.demo.mappers")
publicclassSpringbootMyBatisDemoApplication
{
publicstaticvoidmain(String[]args)
{
SpringApplication.run(SpringbootMyBatisDemoApplication.class,args);
}
}
观察到我们已经使用@MapperScan(“ com.sivalabs.demo.mappers”)批注指定在何处查找Mapper接口。
现在创建一个JUnit测试类并测试我们的UserMapper方法。.
@RunWith(SpringJUnit4Cla***unner.class)
@SpringApplicationConfiguration(SpringbootMyBatisDemoApplication.class)
publicclassSpringbootMyBatisDemoApplicationTests
{
@Autowired
privateUserMapperuserMapper;
@Test
publicvoidfindAllUsers(){
List<User>users=userMapper.findAllUsers();
assertNotNull(users);
assertTrue(!users.isEmpty());
}
@Test
publicvoidfindUserById(){
Useruser=userMapper.findUserById(1);
assertNotNull(user);
}
@Test
publicvoidcreateUser(){
Useruser=newUser(0,"Siva","siva@gmail.com");
userMapper.insertUser(user);
UsernewUser=userMapper.findUserById(user.getId());
assertEquals("Siva",newUser.getName());
assertEquals("siva@gmail.com",newUser.getEmail());
}
}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。