接下来我将详细讲解“Spring Boot + Kotlin整合MyBatis的方法教程”的完整攻略,过程中包含两条示例说明。
1. 环境准备
在开始整合之前,我们需要先准备好以下环境:
- JDK 1.8+
- Kotlin 1.3+
- Spring Boot 2.0+
- MyBatis 3.4+
2. 添加依赖
在开始整合之前,我们需要先在 build.gradle
中添加以下依赖:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:1.3.2'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
implementation "org.jetbrains.kotlin:kotlin-reflect"
}
其中:
spring-boot-starter-web
:Spring Boot 的 Web Starter,提供了构建 Web 应用的必要依赖。mybatis-spring-boot-starter
:MyBatis Spring Boot Starter,提供 Spring Boot 整合 MyBatis 所需的依赖。h2
:嵌入式数据库,用于测试。spring-boot-starter-test
:Spring Boot 的测试 Starter,提供了 Spring Boot 应用的测试必要依赖。mybatis-spring-boot-starter-test
:提供了 MyBatis Spring Boot 整合的测试支持。kotlin-stdlib-jdk8
:Kotlin 标准库的 JDK 8 版本。kotlin-reflect
:提供 Kotlin 语言反射支持的库。
3. 数据源配置
在 application.properties
或 application.yml
中配置数据源。这里以 application.yml
为例:
spring:
datasource:
url: jdbc:h2:mem:testdb
username: sa
password:
driver-class-name: org.h2.Driver
4. MyBatis 配置
在 application.yml
或 application.properties
中配置 MyBatis。这里以 application.yml
为例:
mybatis:
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.example.demo.model
其中:
mapper-locations
:Mapper 文件的路径。type-aliases-package
:扫描的 Java Bean 的包路径。
5. 创建实体类
创建一个简单的实体类,例如:
data class User(
var id: Int = 0,
var name: String? = null,
var password: String? = null
)
6. 创建 Mapper 接口
创建一个 Mapper 接口,在其中定义对数据库的操作。例如:
interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
fun getUserById(id: Int): User?
@Insert("INSERT INTO user(name, password) VALUES(#{name}, #{password})")
fun insertUser(user: User): Int
@Update("UPDATE user SET name = #{name}, password = #{password} WHERE id = #{id}")
fun updateUser(user: User): Int
@Delete("DELETE FROM user WHERE id = #{id}")
fun deleteUser(id: Int): Int
}
7. 创建 Mapper 对应的 XML 文件
创建一个与 Mapper 接口同名的 XML 文件,并实现其中的对应 SQL。例如:
<?xml version="1.0" encoding="UTF-8"?>
<!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="userMap" type="com.example.demo.model.User">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="password" property="password" />
</resultMap>
<select id="getUserById" resultMap="userMap">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser">
INSERT INTO user(name, password) VALUES(#{name}, #{password})
</insert>
<update id="updateUser">
UPDATE user SET name = #{name}, password = #{password} WHERE id = #{id}
</update>
<delete id="deleteUser">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
其中:
<resultMap>
:定义实体类与数据库字段的映射关系。<select>
:定义查询操作的 SQL。<insert>
:定义插入操作的 SQL。<update>
:定义更新操作的 SQL。<delete>
:定义删除操作的 SQL。
8. Service 层代码实现
创建一个 Service 的实现类,在其中调用 MyBatis 接口,并处理异常。例如:
@Service
class UserServiceImpl(
@Autowired private val userMapper: UserMapper
) : UserService {
override fun getUserById(id: Int): User? {
try {
return userMapper.getUserById(id)
} catch (e: Exception) {
throw ServiceException("获取用户信息失败", e)
}
}
override fun addUser(user: User): Int {
try {
return userMapper.insertUser(user)
} catch (e: Exception) {
throw ServiceException("添加用户信息失败", e)
}
}
override fun updateUser(user: User): Int {
try {
return userMapper.updateUser(user)
} catch (e: Exception) {
throw ServiceException("更新用户信息失败", e)
}
}
override fun deleteUser(id: Int): Int {
try {
return userMapper.deleteUser(id)
} catch (e: Exception) {
throw ServiceException("删除用户信息失败", e)
}
}
}
其中 ServiceException
是自定义异常。
9. Controller 层代码实现
创建一个 Controller 类,在其中注入 UserService 实例,并实现对应的接口方法。例如:
@RestController
@RequestMapping("/user")
class UserController(
@Autowired private val userService: UserService
) {
@GetMapping("/{id}")
fun getUserById(@PathVariable id: Int): User? {
return userService.getUserById(id)
}
@PostMapping
fun addUser(@RequestBody user: User): Int {
return userService.addUser(user)
}
@PutMapping
fun updateUser(@RequestBody user: User): Int {
return userService.updateUser(user)
}
@DeleteMapping("/{id}")
fun deleteUser(@PathVariable id: Int): Int {
return userService.deleteUser(id)
}
}
10. 示例一:查询用户
接下来,我们来演示通过 HTTP GET 请求,查询用户信息。首先,我们需要在 Controller 层添加对应的接口方法,代码如下:
@RequestMapping("/user")
@RestController
class UserController(private val userMapper: UserMapper) {
@GetMapping("/{id}")
fun getUserById(@PathVariable("id") id: Int): User? {
return try {
userMapper.getUserById(id)
} catch (e: Exception) {
throw ServiceException("获取用户信息失败", e)
}
}
}
接着,我们可以使用 Postman 等工具,发送 GET 请求:
http://localhost:8080/user/1
这里的 1 表示查询用户的 id,程序将返回该用户的 JSON 格式数据:
{
"id": 1,
"name": "张三",
"password": "123456"
}
11. 示例二:添加用户
接下来,我们来演示通过 HTTP POST 请求,添加新用户。首先,我们需要在 Controller 层添加对应的接口方法,代码如下:
@RequestMapping("/user")
@RestController
class UserController(private val userMapper: UserMapper) {
@PostMapping("")
fun addUser(@RequestBody user: User): Int {
return try {
userMapper.insertUser(user)
} catch (e: Exception) {
throw ServiceException("添加新用户失败", e)
}
}
}
接着,我们可以使用 Postman 等工具,发送 POST 请求:
http://localhost:8080/user
请求体需要传入 JSON 格式数据:
{
"name": "李四",
"password": "654321"
}
程序将返回新增用户的 ID 值。
12. 整合完成
至此,我们已经完成了 Spring Boot 和 Kotlin 整合 MyBatis 的攻略,你可以根据需要进行拓展和修改,以适用于自己的项目场景。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot + Kotlin整合MyBatis的方法教程 - Python技术站