首先
Inteliji IDEA是一个较好的开发java项目的IDE,安装使用都很方便,博主之前都是用eclipse的,在公司实习的时候发现启动一个大型的web项目时,eclipse既耗时也容易报错,很是麻烦,所以在熟悉了IDEA的操作后,打算在博客中记录下之前学习的知识,方便后面查看。
开始进入主题:
1、用IDEA开始搭建一个Springboot项目
2、点击next,填写项目包的一些信息
3、选中打钩的地方
4、一个简单的sprinboot项目搭建好了,项目架构如下图所示,删除掉三个文件夹
5、由上图可知,java是存放业务代码,现在com.xz.blog包下除了启动类,其余都是空的,需要我们来添加controller、mapper、model、service等包;resources是存放项目资源,templates放置模板(页面)。推荐使用thymeleaf,也可以集成Jsp,static放置静态资源。js,images等。
6、pom.xml文件,采用maven方式管理项目jar包
4.0.0
com.xz
blog
0.0.1-SNAPSHOT
jar
blog
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE
UTF-8
UTF-8
1.8
5.0.8.RELEASE
junit
junit
4.11
test
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-thymeleaf
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
javax.servlet
jstl
org.apache.tomcat.embed
tomcat-embed-jasper
provided
javax.servlet
javax.servlet-api
provided
org.springframework.boot
spring-boot-starter-data-jpa
mysql
mysql-connector-java
5.1.38
com.alibaba
druid
1.1.10
org.apache.commons
commons-dbcp2
2.2.0
org.mybatis
mybatis-spring
1.3.1
org.apache.ibatis
ibatis-core
3.0
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
org.springframework
spring-jdbc
5.0.8.RELEASE
org.springframework
spring-aop
${spring.version}
org.springframework
spring-aspects
${spring.version}
org.aspectj
aspectjrt
1.6.11
org.aspectj
aspectjweaver
1.6.11
cglib
cglib
2.1_3
org.springframework.boot
spring-boot-starter-data-redis
2.0.4.RELEASE
org.springframework.boot
spring-boot-maven-plugin
7、controller、mapper、model、service下业务代码撰写
Person.java实体类
package com.xz.blog.model;
public class Person {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return
"id=" + id +
", name='" + name + '\'' +
", age=" + age
;
}
}
UserService.java,由于是演示demo,所以就没有写接口类以及impl实现类。
package com.xz.blog.service;
import com.xz.blog.mapper.UserMapper;
import com.xz.blog.mapper.UserMapper;
import com.xz.blog.model.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@Service
public class UserService {
@Autowired
public UserMapper userMapper;
// 获取单个用户信息
public Person selectUser(int id) {
return userMapper.selectUser(id);
}
//获取所有的用户信息
public ArrayList selectAllUser() {
return userMapper.selectAllUser();
}
}
UserMapper.java类,对数据库操作的封装
package com.xz.blog.mapper;
import com.xz.blog.model.Person;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
@Repository
public interface UserMapper {
@Select("SELECT * FROM person WHERE id = #{id}")
Person selectUser(int id);//返回一个person对象
@Select("select * from person order by id")
ArrayList selectAllUser();//返回一个person对象
}
UserController.java实体类
package com.xz.blog.controller;
import com.xz.blog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
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.RestController;
//@RestController
@Controller
//@ResponseBody
//testController返回的不是页面,Controller返回的是页面 testController=Controller + ResponseBody
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/showUser/{id}")
public String selectUser (@PathVariable int id,Model model){
model.addAttribute("name", userService.selectUser(id).toString());
return "greets";
}
@RequestMapping("/showUser/all")
public String selectAllUser(){
return userService.selectAllUser().toString();
}
@RequestMapping("/name")
public String name() {
System.out.println("============================================");
return "hello";
}
/**
@RequestMapping("/greet")
public String greeting(@RequestParam(value = "name", required = false, defaultValue = "World") String name,
Model model) {
model.addAttribute("name", name);
return "greets";
}
**/
}
BlogApplication.java启动类
package com.xz.blog;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@MapperScan("com.xz.blog.mapper") //包扫描
@EnableWebMvc
@SpringBootApplication
public class BlogApplication {
public static void main(String[] args) {
SpringApplication.run(BlogApplication.class, args);
}
}
8、项目的配置文件application.properties,springboot牺牲项目的自由度来减少配置的复杂度,换句话说就是大部分的配置采用约定俗称,无需我们进行更改,配置文件只有application.properties一个,当然spingboot也支持自定义的配置文件,但是当同时又多个配置文件时,application.properties文件中的配置优先级更高。
server.port=9999
#设置spring-boot 编码格式
spring.banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
#视图层控制 用mvc方式访问templates下的HTML -----start-------
#让springboot支持jsp
#spring.mvc.view.prefix=classpath:/templates/
#spring.mvc.view.suffix=.jsp
#spring.mvc.static-path-pattern=/static/**
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
##开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf这样配置就可以直接访问static下的HTML(和mvc访问方式二选一)
spring.thymeleaf.prefix = classpath:/templates/
spring.thymeleaf.suffix = .html
#-------------end-----------------------------------
#mysql配置
spring.datasource.url=jdbc:mysql://localhost:3306/ssmstu?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=bjtungirc
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.typeAliasesPackage=com.tqh.demo.model
#数据库连接池配置druid(springboot暂不支持该数据库连接池)
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#spring.datasource.filters=stat
#spring.datasource.maxActive= 20
#spring.datasource.initialSize= 1
#spring.datasource.maxWait= 60000
#spring.datasource.minIdle =1
#spring.datasource.timeBetweenEvictionRunsMillis= 60000
#spring.datasource.minEvictableIdleTimeMillis=300000
#spring.datasource.validationQuery= select 'x'
#spring.datasource.testWhileIdle= true
#spring.datasource.testOnBorrow=false
#spring.datasource.testOnReturn= false
#spring.datasource.poolPreparedStatements=true
#spring.datasource.maxOpenPreparedStatements= 20
# REDIS
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址 (默认为127.0.0.1)
spring.redis.host=132.232.28.164
# Redis服务器连接端口 (默认为6379)
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
#spring.redis.password=
## 连接池最大连接数(使用负值表示没有限制)
#spring.redis.pool.max-active=8
## 连接池最大阻塞等待时间(使用负值表示没有限制)
#spring.redis.pool.max-wait=-1
## 连接池中的最大空闲连接
#spring.redis.pool.max-idle=8
## 连接池中的最小空闲连接
#spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=2000ms
#log
logging.file=log.log
logging.level.com=info
logging.level.org=info
logging.level.com.my=debug
debug=true
logging.level.com.my.web = debug
#如果采用自定义的mybatis.xml文件,就需要配置下面的文件的内容,主要是定位xml文件的位置,xml文件中有具体的sql操作
#不加的话,就直接是在mapper类中@Select(sql),直接写sql操作。
# mybatis配置 mybatis.config-location=classpath:mybatis-config.xml // 配置文件位置 mybatis.typeAliasesPackage// 实体类包
#mybatis.typeAliasesPackage=com.tqh.demo/model
#mybatis.mapper-locations=classpath:mappers/*.xml
# AOP 切面
# 添加@EnableAspectJAutoProxy。
spring.aop.auto= true
# 是否要创建基于子类(CGLIB)的代理(true),而不是基于标准的基于Java接口的代理(false)。
spring.aop.proxy-target-class= false
# 应用程序上下文初始化器
# 应用指标。
#spring.application.index=
# 应用程序名称。
spring.application.name=
# 国际化(消息源自动配置)
#
spring.messages.basename= messages
# 以逗号分隔的基础名称列表,每个都在ResourceBundle约定之后。
# 加载的资源束文件缓存到期,以秒为单位。 设置为-1时,软件包将永久缓存。
#spring.messages.cache-seconds= -1
# 设置是否返回到系统区域设置,如果没有找到特定语言环境的文件。
spring.messages.fallback-to-system-locale= true
#smtp邮件
# Email (MailProperties) 邮件属性
# 默认MimeMessage编码。
spring.mail.default-encoding= UTF-8
# SMTP服务器主机。 例如`smtp.example.com`
spring.mail.host=
# 会话JNDI名称。 设置时,优先于其他邮件设置。
spring.mail.jndi-name=
# 登录SMTP服务器的密码。
spring.mail.password=
# SMTP服务器端口。
spring.mail.port=
# 其他JavaMail会话属性。
spring.mail.properties.*=
# SMTP服务器使用的协议。
spring.mail.protocol= smtp
# 测试邮件服务器在启动时可用。
spring.mail.test-connection= false
# 登录SMTP服务器的用户。
spring.mail.username=
9、页面配置
templates存放的是页面 都是默认的路径,其中返回的页面类型缺省都是.html后缀 。所以此处写页面不需要在application.properties中进行配置或者覆盖设置
需要注意以下几点:
1、sprinbboot默认采用的是thymeleaf来解析页面视图,不支持jsp(可自行配置),因此在application.properties中,需要配置如下:
#视图层控制 用mvc方式访问templates下的HTML -----start-------
#让springboot支持jsp
#spring.mvc.view.prefix=classpath:/templates/
#spring.mvc.view.suffix=.jsp
#spring.mvc.static-path-pattern=/static/**
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
##开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf这样配置就可以直接访问static下的HTML(和mvc访问方式二选一)
spring.thymeleaf.prefix = classpath:/templates/
spring.thymeleaf.suffix = .html
#-------------end-----------------------------------
2、UserController.java中需要添加@Controller,而不是@RestController,testController返回的不是页面,Controller返回的是页面 testController=Controller + ResponseBody。
3、启动类中BlogApplication,需要添加@MapperScan("com.xz.springboot.mapper") //包扫描,否则注解无效。
10、测试页面hello.html 和greets.html
hello.html 在templates文件夹下放置hello.html
Full Layout - jQuery EasyUI Demo
greets.html 在templates文件夹下放置greets.html
Getting Started: Serving Web Content
11、springboot集成mybatis的方式有如下两种(本项目采用的是方式一):
方式一:application.properties配置(或自定义配置文件)+UserMapper.java中注解方式
application.properties配置:
UserMapper.java中注解方式:
方式二:application.properties配置(或自定义配置文件)+mapper-mybatis.xml
mapper-mybatis.xml内容:
12、数据库表设计--person.sql表
13、springboot+mybatis的整体项目架构如下:
14、运行项目
点击按钮,运行项目
浏览器输入localhost:9999/name,输出结果
浏览器输入http://localhost:9999/showUser/1,输出结果
15、至此一个简单的springboot+mybatis的项目已经搭建完毕!!
如有问题,欢迎讨论!
具体代码见:https://github.com/xia123zheng/study