Hey, Nice to meet You. 

过人之节.人情有所不能忍者,匹夫见辱,拔剑而起,挺身而斗,此不足为勇也,天下有大勇者,猝然临之而不惊,无故加之而不怒.此其所挟持者甚大,而其志甚远也.          ☆☆☆所谓豪杰之士,必有

SpringBoot整合Mybatis(基于XML方式)

以往都是整合Spring+SpringMVC+Mybatis这个三个框架,今天用SpringBoot整合了Mybatis,发现这个比之前的SSM的整合方便的太多,省去大量的配置文件。因为Spring Boot中对此做了进一步的简化,使MyBatis基本上可以做到开箱即用,这也为什么SpringBoot这么火的原因,本文就来看看在Spring Boot中MyBatis要如何使用,话不多说,直接进入正题。


1、首先创建一个SpringBoot项目。

image

image

image


2、创建成功之后查看一下pom里面的配置信息。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.thr</groupId>
    <artifactId>springboot-mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-mybatis</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <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.1.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3、修改SpringBoot的配置文件

注意:我们不使用默认生成的application.properties文件,而使用更加简洁的application.yml文件。将resource文件夹下原有的application.properties文件删除,创建application.yml配置文件(注:SpringBoot底层会把application.yml文件解析为application.properties),创建的application.yml配置如下所示。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
#配置端口
server:
  port: 8080
#数据库连接信息
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url:  jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: 123456
#mybatis的相关凭配置
mybatis:
  #mapper的xml位置和别名
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.thr.entity
  #开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true

4、创建数据库。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
 
SET FOREIGN_KEY_CHECKS = 1;

image


5、然后在src/java/main下分别创建entity实体类、Dao接口、Service接口、ServiceImpl实现类和Controller控制类。在src/java/resources下创建mapper映射文件(mapper/UserMapper.xml)。

--User实体类:

01
02
03
04
05
06
07
08
public class User {
    private Long id;//编号
    private String username;//用户名
    private String password;//密码
    private Integer age;//年龄
    private String address;//地址
    //getter、setter省略
}

--UserMapper接口:

01
02
03
04
05
06
07
08
09
10
11
12
13
@Repository
public interface UserMapper {
    //查询所有用户信息
    List<User> findAll();
    //根据id查询用户信息
    User findUserById(Integer id);
    //添加用户信息
    void addUser(User user);
    //修改用户信息
    void updateUserById(User user);
    //删除用户信息
    void deleteUserById(Integer id);
}

--UserService接口:和上面UserMapper接口中的方法是一样的,所有就不贴了。

--UserServiceImpl实现类:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Service("userService")
public class UserServiceImpl  implements UserService {
 
    @Autowired
    private UserMapper userMapper;
 
    @Override
    public List<User> findAll() {
        return userMapper.findAll();
    }
    @Override
    public User findUserById(Integer id) {
        return userMapper.findUserById(id);
    }
    @Override
    public void addUser(User user) {
        userMapper.addUser(user);
    }
    @Override
    public void updateUserById(User user) {
        userMapper.updateUserById(user);
    }
    @Override
    public void deleteUserById(Integer id) {
        userMapper.deleteUserById(id);
    }
}

--UserController控制类:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
@RestController
@RequestMapping(value = "/user")
public class UserController {
 
    @Autowired
    private UserService userService;
 
    /**
     * 查询所有用户信息
     * @return
     */
    @GetMapping(value = "/findAll")
    public List<User> findAll(){
        List<User> userList = userService.findAll();
        return userList;
    }
    /**
     * 根据id查询用户信息
     * @param id
     * @return
     */
    @GetMapping(value = "/findUserById/{id}")
    public User findUserById(@PathVariable(value = "id") Integer id){
        return userService.findUserById(id);
    }
    /**
     * 添加用户信息
     * @param user
     */
    @PostMapping(value = "/addUser")
    public void addUser(User user){
        user.setUsername("John");
        user.setPassword("123456");
        user.setAge(22);
        user.setAddress("中国重庆");
        userService.addUser(user);
    }
    /**
     * 修改用户信息
     * @param user
     */
    @PutMapping(value = "/updateUserById")
    public void updateUserById(User user){
        user.setId(3L);
        user.setUsername("Marry");
        user.setPassword("123456");
        user.setAge(20);
        user.setAddress("中国湖南");
        userService.updateUserById(user);
    }
    /**
     * 删除用户信息
     * @param id
     */
    @DeleteMapping(value = "/deleteUserById/{id}")
    public void deleteUserById(@PathVariable(value = "id") Integer id){
        System.out.println("Delete请求...");
        userService.deleteUserById(id);
    }
}

--UserMapper.xml映射配置文件:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<?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.thr.dao.UserMapper">
    <select id="findAll" resultType="com.thr.entity.User">
        select * from t_user;
    </select>
    <select id="findUserById" resultType="com.thr.entity.User">
        select * from t_user where id = #{id};
    </select>
    <insert id="addUser" parameterType="com.thr.entity.User">
        insert into t_user (username,password,age,address) values (#{username},#{password},#{age},#{address});
    </insert>
    <update id="updateUserById" parameterType="com.thr.entity.User">
        update t_user set username=#{username},password=#{password},age=#{age},address=#{address} where id=#{id}
    </update>
    <delete id="deleteUserById" parameterType="int">
        delete from t_user where id=#{id}
    </delete>
</mapper>

6、项目整体目录。

image

最后打开类SpringbootMybatisApplication类,这个是SpringBoot的启动类。我们需要在里面添加一个注解@MapperScan

注意:@MapperScan("com.thr.dao")这个注解非常的关键,这个对应了项目中mapper(dao)所对应的包路径,很多同学就是这里忘了加导致异常的。如果不在启动类这里加,也可以在Mapper类上面添加注解@Mapper,建议使用上面那种,不然每个Mapper加个注解也挺麻烦的。

01
02
03
04
05
06
07
08
@SpringBootApplication(scanBasePackages={"com.thr.*"})
@MapperScan("com.thr.dao")
public class SpringbootMybatisApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisApplication.class, args);
    }
}

7、运行启动类,我们使用POSTMAN进行测试。

(1)、查询所有用户信息:(GET请求)http://localhost:8080/user/findAll

image


(2)、根据id查询用户信息:(GET请求)http://localhost:8080/user/findUserById/1

image


(3)、添加用户信息:(POST请求)http://localhost:8080/user/addUser

image

image


(4)、根据id修改用户信息:(PUT请求)http://localhost:8080/user/updateUserById

image


(5)、根据id删除用户:(DELETE请求)http://localhost:8080/user/deleteUserById/4

image

image

posted @   唐浩荣  阅读(1426)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示