Spring + SpringBoot + SpringMVC + Mybatis

  • Post author:
  • Post category:其他


Demo一

旗舰版Idea自带有spring Initializr,以下是Idea社区版,社区版本是啥子都没有默认安装的

点击Configure -> Plugins插件

2、然后点击Create New Project,创建我们的项目,如下所示:

3、然后这些组织号,项目名称,版本号,项目构建方式,语言,打包方式,语言版本,项目名称,项目描述,包名称,

4、选择项目所需要的依赖,这里由于要连接Mysql数据库,所以要将这些依赖都加进去的。

5、修改你的项目名称和存储的位置,保存即可。

6、设置字体大小,字小看着真是不舒服的。

7、Idea社区版,设置一下maven。可以安装一下Maven Runner插件。

8、Idea社区版,集成tomcat,果然免费的,都是要自己手动搞的,有点浪费时间了。

安装好插件以后,重启Idea。在右上角Edit Configurations 配置环境变量,如下所示。

然后点击configuration进行配置tomcat。看到上面那一行英文了吗,Template,The values saved here will be used for new configurations of the same type,然后点击Create configuration哦。

Tomcat添加成功以后,点击Apply,点击Ok即可了。

最后再配置一下Tomcat即可。

1)、Name : 项目名称。

2)、Tomcat Server: tomcat的路径。

3)、Deployment Directory: webapps的路径。在main文件下创建一个新的目录文件webapps。注意此处需要填写的路径是源码里webapps的路径。

4)、custom context: 自定义上下文,这里不自定义了。

5)、Context Path : 上下文路径,这个会自动识别,一般不用修改。发布的上下文,即访问url的前面的根路径(会自动识别,一般不需要修改)。

6)、Server Port : 服务器监听端口 8080 (一般自行修改)。

7)、VM options : Java虚拟机参数设置(可不填)。

配置完成之后,点击右上角的三角运行按钮就能正常启动tomcat了。

9、Maven依赖包,如下所示:

<?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.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.bie</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</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-data-jdbc</artifactId>
        </dependency>
        <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.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

10、创建了两个properties文件application.properties、application-dev.properties

把每个环境的参数配置到properties文件中,在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式如

application-dev.properties:开发环境。

application-test.properties:测试环境。

application-prod.properties:生产环境。

至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置

application.properties配置文件:

spring.profiles.active=dev

application-dev.properties配置文件

server.port=8080
server.address=127.0.0.1
# mysql的驱动连接
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/gov_policy?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# mybatis
mybatis.mapper-locations=classpath:mapping/*Mapper.xml
mybatis.type-aliases-package=com.bie.demo.po
# 后台打印sql语句
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

10、创建包,开始码代码。resources下创建mapping文件夹,用于配置sql语句,也可以用注解的方式直接写在mapper文件里。看个人喜好了这里。

实体类CustomerInfo ,如下所示:

package com.bie.demo.po;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 *
 */
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class CustomerInfo {

    private int id;
    private String account;
    private String cname;
    private String sex;
    private String password;
    private String identity;
    private String telephone;
    private String address;
    private String birthday;
    private String identification;

}

数据交互层CustomerInfoMapper接口

package com.bie.demo.mapper;

import com.bie.demo.po.CustomerInfo;
import org.springframework.stereotype.Repository;

@Repository
public interface CustomerInfoMapper {

    /**
     * 根据政策ID查询
     *
     * @param id
     * @return
     */
    public CustomerInfo selectCustomerInfoById(int id);
}

业务逻辑层接口,和实现类

package com.bie.demo.service;

import com.bie.demo.po.CustomerInfo;

/**
 *
 */
public interface CustomerInfoService {

    /**
     * 根据政策ID查询
     *
     * @param id
     * @return
     */
    public CustomerInfo selectCustomerInfoById(int id);
}
package com.bie.demo.service.impl;

import com.bie.demo.mapper.CustomerInfoMapper;
import com.bie.demo.po.CustomerInfo;
import com.bie.demo.service.CustomerInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 *
 */
@Service
public class CustomerInfoServiceImpl implements CustomerInfoService {

    @Autowired
    private CustomerInfoMapper customerInfoMapper;

    @Override
    public CustomerInfo selectCustomerInfoById(int id) {
        if (id > 0) {
            CustomerInfo customerInfo = customerInfoMapper.selectCustomerInfoById(id);
            if (customerInfo != null) {
                return customerInfo;
            }
        }
        return null;
    }
}

控制层CustomerInfoController

package com.bie.demo.controller;

import com.bie.demo.po.CustomerInfo;
import com.bie.demo.service.CustomerInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 *
 */
@Controller
@RequestMapping(value = "/customerInfo")
public class CustomerInfoController {

    @Autowired
    private CustomerInfoService customerInfoService;

    @RequestMapping(value = "/selectCustomerInfoById")
    @ResponseBody
    public CustomerInfo selectCustomerInfoById(@RequestParam(value = "id") int id) {
        CustomerInfo customerInfo = customerInfoService.selectCustomerInfoById(id);
        if (customerInfo != null) {
            return customerInfo;
        }
        return null;
    }


}

CustomerInfoMapper.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.bie.demo.mapper.CustomerInfoMapper">

    <resultMap id="BaseResultMap" type="com.bie.demo.po.CustomerInfo">
        <result column="id" jdbcType="INTEGER" property="id"/>

        <result column="account" jdbcType="VARCHAR" property="account"/>
        <result column="cname" jdbcType="VARCHAR" property="cname"/>
        <result column="sex" jdbcType="VARCHAR" property="sex"/>
        <result column="password" jdbcType="VARCHAR" property="password"/>
        <result column="telephone" jdbcType="VARCHAR" property="telephone"/>
        <result column="address" jdbcType="VARCHAR" property="address"/>
        <result column="birthday" jdbcType="VARCHAR" property="birthday"/>
        <result column="identification" jdbcType="VARCHAR" property="identification"/>
    </resultMap>

    <select id="selectCustomerInfoById" resultMap="BaseResultMap">
        select
        *
        from
            customer_info
        where
            id = #{id}
    </select>

</mapper>

SpringBoot项目启动类,如下所示:

切记,一定要配置,需要扫描的mapper文件路径,@MapperScan(“com.bie.demo.mapper”)。

package com.bie.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.bie.demo.mapper")
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

11、项目结构图,如下所示:

12、启动项目,测试如下所示:

13、数据表结构,如下所示:

14、如何使用Mybatis的sql语句注解版呢,如下所示:

application-dev.properties配置文件,修改为如下所示:

server.port=8080
server.address=127.0.0.1
# mysql的驱动连接
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/biehl?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# mybatis
# mybatis.mapper-locations=classpath:mapping/*Mapper.xml
mybatis.type-aliases-package=com.bie.demo.po
# 后台打印sql语句
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

数据交互层,CustomerInfoMapper

package com.bie.demo.mapper;

import com.bie.demo.po.CustomerInfo;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

@Repository
public interface CustomerInfoMapper {

    /**
     * 根据政策ID查询
     *
     * @param id
     * @return
     */
    @Select("SELECT * FROM customer_info WHERE id = #{id}")
    public CustomerInfo selectCustomerInfoById(int id);
}

此时,将resources目录下面的mapping目录删除即可。通过测试,表示是可行的。

Demo二

1、新建项目


IDEA是社区版的,因此先建立一个maven项目,然后手工加入springboot的pom依赖。


设置组织名和项目名。


建好项目后,先设置默认文件编码为utf-8和maven仓库位置。


把需要的文件夹建好。

2、pom文件和热部署


2.1 依赖

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>FH_TL1</groupId>
    <artifactId>SvmDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</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-thymeleaf</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

spring-boot-starter-thymeleaf是使用thymeleaf模板需要的依赖。

2.2 热部署

使用热部署的话需要spring-boot-devtools依赖,IDEA默认是关闭热部署的,因此在配置了依赖后可以手动或自动2种方式使用:

1、手动方式:Crtl + F9快捷键,在修改了html等脚本后,使用这个快捷键编译。感觉还是手动好用吧,不用想着页面没变化是不是因为没有刷新成功。

2、自动方式:按Crtl + Shift + Alt + /快捷键,再进入Registry,勾选compiler.automake.allow.when.app.running,然后Build->Compiler勾选Build Project automatically。最后重启下IDEA就可以了。

3、配置文件


application.yml:

spring:
  profiles:
    active: dev


application-dev.yml:

server:
  port: 8080

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/svm?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
    suffix: .html
    encoding: UTF-8
    content-type: text/html
    mode: HTML5

mybatis:
  #mapper-locations: classpath:mapping/*Mapper.xml
  type-aliases-package: com.yue.entity



a、


application.yml设置使用哪套环境,每个环境设置自己的参数配置。



b、


在Spring Boot中多环境配置文件名需要满足application-{profile}.yml的格式



c、


mybatis使用注解式的话需要注释掉mapper-locations,type-aliases-package是实体类的包


4、建立数据库表


把数据库中的表建好。

CREATE TABLE user(
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL UNIQUE,
    age INTEGER
)


插入数据。

5、后台实现


5.1 实体类


User.java:

package com.yue.entity;

public class User {
    private int id;
    private String name;
    private String 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 String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

5.2 启动Main函数


AppMain.java:

package com.yue;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.yue.mapper")
public class AppMain {
    public static void main(String[] args) {
        SpringApplication.run(AppMain.class);
    }
}

@SpringBootApplication = @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan。


5.3 controller类


Forward.java:

package com.yue.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/")
public class Forward {

    @RequestMapping("/index")
    public String index() {
        return "/index";
    }
}

页面上请求http://localhost:8080/index后跳到这个方法,然后跳转到对应的index.html页面。


Query.java:

package com.yue.controller;

import com.yue.entity.User;
import com.yue.service.impl.QueryService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/")
public class Query {

    @Autowired
    private QueryService queryService;

    @RequestMapping("/getUser")
    public User getUser(@Param("id") String id) {
        User user = queryService.getName(1);
        return user;
    }

}



a、


前端传入id值后,后端返回user数据。



b、


@RequestMapping是请求的路径。



c、


@Param是前端传入的参数



d、


@Autowired是自动注入,可以注入被@Service、@Controller、@Repository、@Component注解的类:



e、


@Service:用于标注业务层组件。



f、


@Controller:用于标注控制层组件。



g、


@Repository:用于标注数据访问组件,即DAO组件。



h、


@Component:泛指组件,当组件不好归类的时候,可以使用这个注解进行标注。

5.4 Service类


BaseService.java:

 package com.yue.service;
 public class BaseService {}

基础类,用于放置公共方法,哪怕没有一个方法也要放上去,之后方便加入。


QueryService.java:

package com.yue.service.impl;

import com.yue.entity.User;
import com.yue.mapper.QueryMapper;
import com.yue.service.BaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class QueryService extends BaseService {
    @Autowired
    private QueryMapper queryMapper;

    public User getName(int id){
        return queryMapper.queryUser(id);
    }
}

5.5 Mapper类


QueryMapper.java:

package com.yue.mapper;

import com.yue.entity.User;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

@Repository
public interface QueryMapper {

    @Select("SELECT * FROM user WHERE id = #{id}")
    User queryUser(int id);
}

6、前端实现


6.1 html页面

<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8"/>
    <title>测试网站</title>
    <link th:href="@{/css/index.css}" rel="stylesheet" type="text/css"/>
    <script type="text/javascript" th:src="@{/js/jquery.js}"></script>
    <script type="text/javascript" th:src="@{/js/index.js}"></script>
</head>
<body>
<p>
    <label class="name">用户id:</label>
    <input placeholder="输入id" type="text" class="text-box" id="id"/>
    <button id="aa">按钮</button>
</p>
</body>
</html>

需要加入xmlns:th=”http://www.thymeleaf.org”命名空间,说明使用thymeleaf模板。

6.2 css实现


index.css:

p,label{
     color: green;
 }

6.3 js实现

$(document).ready(function(){
    $("button#aa").click(function(){
        //var jsonObj = {id: $("#id").val(),name:"abcd",age:"123"};
        $.ajax({
            async : false,
            url: "/getUser",
            data:{
                id:$("#id").val()
            },
            //data:JSON.stringify(jsonObj),  传入json数据
            type: "POST",
            dataType:"json",//返回数据类型
            //headers:{"Content-Type":"application/json"},  传入json数据时需设置请求头
            success:function(data){
                alert(data.name);
            },
            error:function(err){
                alert('连接失败');
            }
        });
    });
});

7、使用效果



版权声明:本文为qq_36750352原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。