SpringBoot 是一个非常流行的Java Web框架,与 Mybatis 结合使用可以快速地实现数据操作和服务构建。下面将为你提供 SpringBoot 集成 Mybatis 的详细教程。
准备工作
在开始之前,请确保已经完成以下准备工作:
- 搭建好了 Java 开发环境,并确保已经安装了 Maven。
- 创建一个 SpringBoot 项目。
添加依赖
在项目的pom.xml中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
具体内容包括:
- spring-boot-starter-web:SpringBoot Web 启动器,提供了Web开发所需要的基础框架和功能。
- mybatis-spring-boot-starter:SpringBoot 集成 Mybatis 的依赖。
- mysql-connector-java:用来连接数据库。
添加配置
在项目的 application.properties
中添加以下配置:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=root
mybatis.type-aliases-package=com.example.demo.entity
mybatis.mapper-locations=classpath:mapper/*.xml
上面的配置中,配置了连接数据库的相关信息,以及 Mybatis 的配置信息。
创建实体类
在 com.example.demo.entity 包下创建实体类 User:
public class User {
private Long id;
private String name;
private Integer age;
// 省略 getters 和 setters
}
创建 Mapper 接口
在 com.example.demo.mapper 包下创建 UserMapper 接口:
@Mapper
public interface UserMapper {
void insert(User user);
void delete(Long id);
void update(User user);
User getById(Long id);
List<User> getAll();
}
创建 Mapper XML
在 resources 目录下创建 mapper 目录,再创建 UserMapper.xml 文件:
<mapper namespace="com.example.demo.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.example.demo.entity.User">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<result column="age" jdbcType="INTEGER" property="age"/>
</resultMap>
<sql id="Base_Column_List">
id, name, age
</sql>
<select id="getById" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from user
where id = #{id,jdbcType=BIGINT}
</select>
<select id="getAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from user
</select>
<insert id="insert" parameterType="com.example.demo.entity.User">
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name,
</if>
<if test="age != null">
age,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=BIGINT},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="age != null">
#{age,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="update" parameterType="com.example.demo.entity.User">
update user
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="age != null">
age = #{age,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
<delete id="delete" parameterType="java.lang.Long">
delete from user
where id = #{id,jdbcType=BIGINT}
</delete>
</mapper>
上面的 XML 中定义了增删改查的 SQL语句。
创建 Service 层
在 com.example.demo.service 包下创建 UserService 接口和 UserServiceImpl 类:
public interface UserService {
void insert(User user);
void delete(Long id);
void update(User user);
User getById(Long id);
List<User> getAll();
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void insert(User user) {
userMapper.insert(user);
}
@Override
public void delete(Long id) {
userMapper.delete(id);
}
@Override
public void update(User user) {
userMapper.update(user);
}
@Override
public User getById(Long id) {
return userMapper.getById(id);
}
@Override
public List<User> getAll() {
return userMapper.getAll();
}
}
创建 Controller
在 com.example.demo.controller 包下创建 UserController 类:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/getById/{id}")
public User getById(@PathVariable("id") Long id) {
return userService.getById(id);
}
@GetMapping("/getAll")
public List<User> getAll() {
return userService.getAll();
}
@PostMapping("/insert")
public void insert(@RequestBody User user) {
userService.insert(user);
}
@PostMapping("/update")
public void update(@RequestBody User user) {
userService.update(user);
}
@DeleteMapping("/delete/{id}")
public void delete(@PathVariable("id") Long id) {
userService.delete(id);
}
}
上述代码中,添加了一些映射,用于处理页面请求。
运行项目
在运行项目之前,我们需要创建一个名为 user 的表,来存储用户数据。
CREATE TABLE user (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(20),
age INT,
PRIMARY KEY(id)
);
启动项目后,在浏览器中输入以下地址可以测试项目是否成功:
- 查询所有用户:http://localhost:8080/user/getAll
- 根据 ID 查询用户:http://localhost:8080/user/getById/1
示例
这里提供两个示例,用以更好地理解 SpringBoot 集成 Mybatis 的过程和使用。
示例1
该示例是对 User 表进行增加、删除、修改和查询的操作。
@SpringBootTest
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void testInsert() {
User user = new User();
user.setName("Tom");
user.setAge(20);
userMapper.insert(user);
Assert.assertNotNull(user.getId());
}
@Test
public void testDelete() {
User user = new User();
user.setName("Jerry");
user.setAge(30);
userMapper.insert(user);
Long id = user.getId();
userMapper.delete(id);
Assert.assertNull(userMapper.getById(id));
}
@Test
public void testUpdate() {
User user = new User();
user.setName("Alex");
user.setAge(25);
userMapper.insert(user);
Long id = user.getId();
User update = new User();
update.setId(id);
update.setName("Jack");
update.setAge(28);
userMapper.update(update);
User updated = userMapper.getById(id);
Assert.assertEquals("Jack", updated.getName());
Assert.assertEquals(28, updated.getAge().intValue());
}
@Test
public void testGetById() {
User user = new User();
user.setName("Amy");
user.setAge(22);
userMapper.insert(user);
Long id = user.getId();
User queried = userMapper.getById(id);
Assert.assertEquals("Amy", queried.getName());
Assert.assertEquals(22, queried.getAge().intValue());
}
@Test
public void testGetAll() {
User user1 = new User();
user1.setName("Lucy");
user1.setAge(18);
userMapper.insert(user1);
User user2 = new User();
user2.setName("Mike");
user2.setAge(19);
userMapper.insert(user2);
List<User> allUsers = userMapper.getAll();
Assert.assertEquals(2, allUsers.size());
}
}
示例2
该示例是利用 SpringBoot 集成 Mybatis 对支付宝交易记录进行查询的操作。
@Service
public class TradeServiceImpl implements TradeService {
@Autowired
private TradeMapper tradeMapper;
@Override
public List<Trade> getByTradeNo(String tradeNo) {
return tradeMapper.getByTradeNo(tradeNo);
}
@Override
public List<Trade> getByOrderNo(String orderNo) {
return tradeMapper.getByOrderNo(orderNo);
}
@Override
public List<Trade> getByMerchantNo(String merchantNo) {
return tradeMapper.getByMerchantNo(merchantNo);
}
@Override
public List<Trade> getByCreateTime(Date startTime, Date endTime) {
return tradeMapper.getByCreateTime(startTime, endTime);
}
@Override
public List<Trade> getByUpdateTime(Date startTime, Date endTime) {
return tradeMapper.getByUpdateTime(startTime, endTime);
}
}
上述代码中,根据订单号、商户号、交易号、创建时间、最近修改时间查询交易记录。
总结
本文介绍了 SpringBoot 集成 Mybatis 的详细教程,从添加依赖、配置信息到创建实体类、Mapper 接口、Mapper XML、Service 层和 Controller 层的代码编写,再到实际应用的示例,一步步为你讲解。希望本文内容能够对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot集成Mybatis的详细教程 - Python技术站