zoukankan      html  css  js  c++  java
  • SpringBoot整合Mybatis(基于XML方式)

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


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

    image

    image

    image


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

    <?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配置如下所示。

    #配置端口
    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、创建数据库。

    -- ----------------------------
    -- 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实体类:

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

    --UserMapper接口:

    @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实现类:

    @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控制类:

    @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映射配置文件:

    <?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加个注解也挺麻烦的。

    @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

    作者: 唐浩荣
    本文版权归作者和博客园共有,欢迎转载,但是转载需在博客的合适位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    php----爬虫(爬取豆瓣演员信息,搜索页)遇到的问题
    python-写爬虫时遇到的问题 TimeoutError: [WinError 10060]
    聚沙成塔
    买手机,继续纠结中
    问题不绕弯,死磕
    死磕,死磕死磕
    学而不践则罔
    越是忙的时候,兴趣越多
    周末小总结
    幸福和需求
  • 原文地址:https://www.cnblogs.com/tanghaorong/p/14379762.html
Copyright © 2011-2022 走看看