当我们使用Spring Boot开发Web应用时,通常需要使用到Mybatis来操作数据库。本文将手把手教你如何在Spring Boot中整合Mybatis,包括配置Mybatis、编写Mapper接口、使用注解和XML方式进行SQL映射等。
1. 配置Mybatis
首先,我们需要在pom.xml文件中添加Mybatis和Mybatis-Spring的依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
然后,在application.properties文件中添加Mybatis的配置:
# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Mybatis配置
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.entity
在上面的配置中,我们指定了数据库的连接信息和Mybatis的配置信息。其中,mybatis.mapper-locations指定了Mapper接口的XML文件所在的路径,mybatis.type-aliases-package指定了实体类的包名。
2. 编写Mapper接口
接下来,我们需要编写Mapper接口,用于定义SQL语句和参数映射。Mapper接口可以使用注解方式或XML方式进行定义。
2.1 使用注解方式
以下是一个使用注解方式定义Mapper接口的示例:
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(@Param("id") Long id);
@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
int insert(User user);
@Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}")
int update(User user);
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteById(@Param("id") Long id);
}
在上面的示例中,使用@Mapper注解标记了一个Mapper接口,定义了四个方法,分别对应了查询、插入、更新和删除操作。使用@Select、@Insert、@Update、@Delete注解定义了SQL语句和参数映射。
2.2 使用XML方式
以下是一个使用XML方式定义Mapper接口的示例:
public interface UserMapper {
User findById(Long id);
int insert(User user);
int update(User user);
int deleteById(Long id);
}
在上面的示例中,定义了四个方法,分别对应了查询、插入、更新和删除操作。没有使用注解定义SQL语句和参数映射,而是使用XML文件进行定义。
在resources目录下创建mapper目录,并在其中创建UserMapper.xml文件,定义SQL语句和参数映射:
<mapper namespace="com.example.demo.mapper.UserMapper">
<select id="findById" parameterType="java.lang.Long" resultType="com.example.demo.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insert" parameterType="com.example.demo.entity.User">
INSERT INTO user(name, age) VALUES(#{name}, #{age})
</insert>
<update id="update" parameterType="com.example.demo.entity.User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteById" parameterType="java.lang.Long">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
在上面的XML文件中,使用
3. 使用Mapper接口
在编写完Mapper接口后,我们可以在Service中使用Mapper接口进行数据库操作。
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User findById(Long id) {
return userMapper.findById(id);
}
public int insert(User user) {
return userMapper.insert(user);
}
public int update(User user) {
return userMapper.update(user);
}
public int deleteById(Long id) {
return userMapper.deleteById(id);
}
}
在上面的示例中,使用@Autowired注解注入了UserMapper接口,然后在Service中使用Mapper接口进行数据库操作。
4. 示例
以下是一个使用注解方式定义Mapper接口的完整示例:
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User findById(@Param("id") Long id);
@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
int insert(User user);
@Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}")
int update(User user);
@Delete("DELETE FROM user WHERE id = #{id}")
int deleteById(@Param("id") Long id);
}
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User findById(Long id) {
return userMapper.findById(id);
}
public int insert(User user) {
return userMapper.insert(user);
}
public int update(User user) {
return userMapper.update(user);
}
public int deleteById(Long id) {
return userMapper.deleteById(id);
}
}
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public User findById(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping("/user")
public int insert(@RequestBody User user) {
return userService.insert(user);
}
@PutMapping("/user")
public int update(@RequestBody User user) {
return userService.update(user);
}
@DeleteMapping("/user/{id}")
public int deleteById(@PathVariable Long id) {
return userService.deleteById(id);
}
}
在上面的示例中,使用注解方式定义了Mapper接口,然后在Service中使用Mapper接口进行数据库操作。在Controller中,使用@Autowired注解注入了UserService,然后使用@GetMapping、@PostMapping、@PutMapping、@DeleteMapping注解定义了HTTP请求的处理方法。
以下是一个使用XML方式定义Mapper接口的完整示例:
public interface UserMapper {
User findById(Long id);
int insert(User user);
int update(User user);
int deleteById(Long id);
}
<mapper namespace="com.example.demo.mapper.UserMapper">
<select id="findById" parameterType="java.lang.Long" resultType="com.example.demo.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insert" parameterType="com.example.demo.entity.User">
INSERT INTO user(name, age) VALUES(#{name}, #{age})
</insert>
<update id="update" parameterType="com.example.demo.entity.User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteById" parameterType="java.lang.Long">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User findById(Long id) {
return userMapper.findById(id);
}
public int insert(User user) {
return userMapper.insert(user);
}
public int update(User user) {
return userMapper.update(user);
}
public int deleteById(Long id) {
return userMapper.deleteById(id);
}
}
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public User findById(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping("/user")
public int insert(@RequestBody User user) {
return userService.insert(user);
}
@PutMapping("/user")
public int update(@RequestBody User user) {
return userService.update(user);
}
@DeleteMapping("/user/{id}")
public int deleteById(@PathVariable Long id) {
return userService.deleteById(id);
}
}
在上面的示例中,使用XML方式定义了Mapper接口,然后在Service中使用Mapper接口进行数据库操作。在Controller中,使用@Autowired注解注入了UserService,然后使用@GetMapping、@PostMapping、@PutMapping、@DeleteMapping注解定义了HTTP请求的处理方法。
5. 总结
以上是手把手教你Spring Boot整合Mybatis的完整攻略。通过配置Mybatis、编写Mapper接口、使用注解和XML方式进行SQL映射等步骤,我们可以方便地在Spring Boot中使用Mybatis进行数据库操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手把手教你SpringBoot整合Mybatis - Python技术站