Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
以下是Spring Boot整合MyBatis的详细教程,包含完整的代码示例。
首先,我们需要创建一个Spring Boot项目。打开IDE(推荐使用IntelliJ IDEA),选择New Project,然后选择Spring Initializr,根据需要填写必要的信息(例如Group、Artifact、Dependencies等),最后确认创建项目。
在pom.xml文件中添加以下依赖关系,以集成MyBatis框架:
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.1.0version>
dependency>
<dependency>
<groupId>com.h2databasegroupId>
<artifactId>h2artifactId>
<version>1.4.195version>
<scope>runtimescope>
dependency>
dependencies>
其中,spring-boot-starter-web 表示 Spring Boot 的 Web 开发起始依赖包,mybatis-spring-boot-starter 是 MyBatis 官方提供的集成 Spring Boot 的起步依赖包,h2 是一个内存数据库,可以用作我们测试环境的数据库。
在 src/main/java 下创建一个名为 com.example.demo.domain 的包,这个包存放的是实体类。下面是一个简单的User实体类:
public class User {
private Long id;
private String username;
private String password;
// 省略setter和getter方法
}
接下来,我们需要定义一个Mapper接口来操作 User 实体类。在 src/main/java 下创建一个名为 com.example.demo.mapper 的包,然后创建一个名为 UserMapper 的接口:
public interface UserMapper {
User findByUsername(String username);
void save(User user);
}
在 src/main/resources/mapper 下创建一个名为 UserMapper.xml 的文件,用于定义SQL语句。下面是一个简单的UserMapper.xml文件:
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.example.demo.domain.User">
<id column="id" property="id" jdbcType="BIGINT" />
<result column="username" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
resultMap>
<select id="findByUsername" resultMap="BaseResultMap">
SELECT * FROM users WHERE username = #{username}
select>
<insert id="save" useGeneratedKeys="true" keyProperty="id">
INSERT INTO users (username, password)
VALUES (#{username}, #{password})
insert>
mapper>
创建服务层来实现业务逻辑。在src/main/java 下创建一个名为 com.example.demo.service 的包,然后创建一个名为 UserService 的接口:
public interface UserService {
User findByUsername(String username);
void save(User user);
}
接下来,创建 UserServiceImpl 类实现 UserService 接口:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User findByUsername(String username) {
return userMapper.findByUsername(username);
}
@Override
public void save(User user) {
userMapper.save(user);
}
}
在src/main/java 下创建一个名为 com.example.demo.controller 的包,然后创建一个名为 UserController 的类:
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/findUser")
public User findUser(HttpServletRequest request) {
String username = request.getParameter("username");
return userService.findByUsername(username);
}
@RequestMapping(value = "/saveUser")
public String saveUser(HttpServletRequest request) {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
userService.save(user);
return "SUCCESS";
}
}
在 src/main/resources 下创建一个名为 application.properties 的文件。添加以下属性:
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=classpath:mapper/*.xml
这个文件用于配置一些参数,并将 MyBatis 的映射配置文件放在mapper文件夹中。
至此,我们已经完成了 Spring Boot 整合 MyBatis 框架的所有步骤。
最后,附上完整代码:
User.java:
public class User {
private Long id;
private String username;
private String password;
// 省略setter和getter方法
}
UserMapper.java:
public interface UserMapper {
User findByUsername(String username);
void save(User user);
}
UserMapper.xml:
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.example.demo.domain.User">
<id column="id" property="id" jdbcType="BIGINT" />
<result column="username" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
resultMap>
<select id="findByUsername" resultMap="BaseResultMap">
SELECT * FROM users WHERE username = #{username}
select>
<insert id="save" useGeneratedKeys="true" keyProperty="id">
INSERT INTO users (username, password)
VALUES (#{username}, #{password})
insert>
mapper>
UserServiceImpl.java:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User findByUsername(String username) {
return userMapper.findByUsername(username);
}
@Override
public void save(User user) {
userMapper.save(user);
}
}
UserController.java:
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/findUser")
public User findUser(HttpServletRequest request) {
String username = request.getParameter("username");
return userService.findByUsername(username);
}
@RequestMapping(value = "/saveUser")
public String saveUser(HttpServletRequest request) {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
userService.save(user);
return "SUCCESS";
}
}
application.properties:
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=root
spring.datasource.password=123456
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.mapper-locations=classpath:mapper/*.xml
希望这个教程可以帮助到你!