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、使用效果