zoukankan      html  css  js  c++  java
  • SpringBoot与Mybatis整合实例详解

    介绍

    从Spring Boot项目名称中的Boot可以看出来,SpringBoot的作用在于创建和启动新的基于Spring框架的项目,它的目的是帮助开发人员很容易的创建出独立运行的产品和产品级别的基于Spring框架的应用。SpringBoot会选择最适合的Spring子项目和第三方开源库进行整合。大部分Spring Boot应用只需要非常少的配置就可以快速运行起来。

    SpringBoot包含的特性

    • 创建可以独立运行的Spring应用
    • 直接嵌入Tomcat或Jetty服务器,不需要部署WAR文件
    • 提供推荐的基础POM文件来简化Apache Maven配置
    • 尽可能的根据项目依赖来自动配置Spring框架
    • 提供可以直接在成产环境中使用的功能,如性能指标,应用信息和应用健康检查
    • 没有代码生成,也没有XML配置文件

    SpringBoot与Mybatis的完美融合

    首先得先创建一个SpringBoot项目,然后基于这个项目在融合进Mybatis

    下面给出pom.xml的完整配置:

    <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>20171111</groupId>
      <artifactId>springboot</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>springboot</name>
      <url>http://maven.apache.org</url>
    
      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>1.3.2.RELEASE</version>
          <relativePath></relativePath>
      </parent>
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.1.1</version>
    </dependency>
    
        <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
       </dependency>
            
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>4.2.0.Final</version>
         </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>1.9.22</version>
    </dependency>     
        
      </dependencies>
      <build>
          <plugins>
              <plugin>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-maven-plugin</artifactId>
              </plugin>
          </plugins>
      </build>
    </project>

    之后创建一个启动类,其实在配置SpringBoot项目的时候就已经创建过一个启动类了,这里只是贴下代码:

    package springboot;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
    import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
    
    @SpringBootApplication
    public class HelloworldDemoApplication implements EmbeddedServletContainerCustomizer{
        public static void main(String[] args){
            SpringApplication.run(HelloworldDemoApplication.class, args);
        }
    
        public void customize(ConfigurableEmbeddedServletContainer container) {
            // TODO �Զ����ɵķ������
            container.setPort(8088);
        }
    }

    然后,创建配置文件在resource根目录下创建application.properties文件:

    spring.thymeleaf.mode=LEGACYHTML5
    spring.datasource.url=jdbc:mysql://10.0.20.252:3306/mybatis
    spring.datasource.username=root
    spring.datasource.password=Free-Wi11
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    server.port=8088

    这里的server.port=8088是定义了该项目的端口,如果不指定,则使用默认端口8080

    然后定义一个java的实体类,User.java

    package com.fpc.Entity;
    
    public class User {
        private int id;
        private String name;
        private int age;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
    }

    这里实体类的字段要和数据库的字段对应起来,如果实体类的字段和数据库的字段不相同,则需要使用别名:

    这里我们看下数据库中的字段和数据:

    mysql> select * from users;
    +----+-----------+------+
    | id | name      | age  |
    +----+-----------+------+
    |  1 | Lily      |   24 |
    |  2 | b         |   27 |
    |  5 | userrrrrr |   25 |
    +----+-----------+------+
    3 rows in set (0.00 sec)

    之后,定义一个dao的接口:

    package springboot.Mapper;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Select;
    
    import com.fpc.Entity.User;
    
    @Mapper
    public interface UserDao {
        @Select("select * from users where age=#{age}")
        public List<User> get(int age);
    }

    @Mapper就是我们要与mybatis融合关键的一步,只要一个注解就搞定了。

    然后再写一个测试类,也就是Controller:

    package springboot.Controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import com.fpc.Entity.User;
    
    import springboot.Mapper.UserDao;
    
    
    
    @Controller
    @RequestMapping("/b")
    public class UserController {
        @Autowired
        private UserDao userDao;
        
        @RequestMapping("/showDao/{age}")
        @ResponseBody
        public List<User> show(@PathVariable("age") int age) {
    //        return userServices.show();
    //        return "hellllllllllllllllllllllll";
            System.out.println(age);
            return userDao.get(age);
        }
        
    //    @RequestMapping("/showDao")
    //    public Object showDao(int age) {
    //        return userServicesImpl.showDao(age);
    //    }
    }

    @RestController是对应的restful风格的控制器,但是我这里直接用的@Controller

    运行该项目,Run as - Maven Build

    打开浏览器,输入:localhost:8088/b/showDao/27,运行的结果如下:

    按名字查找年龄为27的user,如果直接在数据库中查找也会得到一样的结果:

    mysql> select * from users where age=27;
    +----+------+------+
    | id | name | age  |
    +----+------+------+
    |  2 | b    |   27 |
    +----+------+------+
    1 row in set (0.00 sec)

    总结

    1. Controller,Entity,Mapper都要在跟启动类HelloworldDemoApplication在同一个目录下,而且启动类要在外层,项目目录结构会在下面给出。
    2. 声明一个UserDao的接口,在Mapper文件夹下,其中用注解的形式写了SQL语句,而且要在接口的外面协商@Mapper(这是关键)
    3. 在Controller中,直接通过@Autowired将UserDao直接注入到Controller中,然后就可以在Controller中进行操作了。

    项目工程目录

  • 相关阅读:
    小账本软件设计之数据库设计模式构建
    基于JMeter的Quick Easy FTP Server性能测试
    构建之法 -源代码管理
    小账本APP——软件项目风险管理及解决办法案例
    基于python的Splash基本使用和负载均衡配置
    MQ初窥门径【面试必看的Kafka和RocketMQ存储区别】
    Apollo源码搭建调试看一文就够
    log4j2异步日志解读(二)AsyncLogger
    Disruptor源码解读
    高性能队列disruptor为什么这么快?
  • 原文地址:https://www.cnblogs.com/fangpengchengbupter/p/7850630.html
Copyright © 2011-2022 走看看