- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章IDEA下从零开始搭建SpringBoot工程的方法步骤由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
springboot的具体介绍可以参看其他网上介绍,这里就不多说了,就这几天的学习,个人理解,简而言之:
(1)它是spring的升级版,spring容器能做到的事情,它都能做到,而且更简便,从配置形式上来说,springboot完全抛弃了繁琐的xml文件配置方式,而是替代性地用注解方式来实现,虽然本质来说,是差不多的(类似包扫描,注解扫描,类加载之类).
(2)springboot集成的插件更多,从而使用很多服务,都只是引入一个依赖,几个注解和java类就可以用了,具体的参考相关手册.
(3)在web应用开发这一块,之前的应用一般来说是打包成war包,再发布到相关服务器容器下(例如tomcat),虽然springboot也可以这么做,但在springboot下更常见的形式是将springboot应用打包成可执行jar包文件。之所以这么做,源于你可以直接将springboot应用看成是一个java application,其web应用可以没有webapp目录(更不用说web.xml了),它推荐使用html页面,并将其作为静态资源使用.
下面具体记录一下,如何在idea下从零开始,一步步搭建springboot web应用,这里采用的是maven作依赖管理,新手起步,有任何疑问,请参考springboot官网.
需要说明的是springboot依赖的jdk版本为1.8及以上.
(1)file->new,选择maven,创建一个空项目,直接next. 。
(2)填写工程名 。
(3)next到底,成果创建一个基于maven的空java项目,其目录结构是这样的:
(4)在pom文件中引入springboot相关依赖 。
1
2
3
4
5
6
7
8
9
10
11
|
<parent>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-parent</artifactid>
<version>
1.5
.
1
.release</version>
</parent>
<dependencies>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
</dependencies>
|
(5)新建一个controller 包,用于存放所有的controller,这里跟官方的一样,使用samplecontroller为第一个测试用例。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/**
* created by song on 2017/2/15.
* 官方示例工程中的测试代码
*/
@controller
@enableautoconfiguration
public
class
samplecontroller {
@requestmapping
(
"/"
)
@responsebody
string home() {
return
"hello world!"
;
}
public
static
void
main(string[] args)
throws
exception {
springapplication.run(samplecontroller.
class
, args);
}
}
|
注意到,这里有一个main函数,再联想到前面说的,springboot应用一般是打包成可执行jar包来发布的,这个main函数就是整个项目的入口。而之所以能这么做,是因为springboot连tomcat8作为一个插件都集成进去了,所以就不必跟之前的ssm架构下一样,还需要去在tomcat下配置war包才能运行。直接点击运行该main函数,再浏览器链接栏,输入地址http://localhost:8080/,就可以看到打印的字符串”hello world!”了。这就是官网提供的一个最基本的基于springboot的web应用,如此便捷.
当然,一个基本的web应用,结构肯定不会这么简单。下面要说的是,如何在上面的基础上,搭建一个具有mvc结构的完整的web应用,其中数据库采用的是mysql,orm采用的是spring data jpa,前端页面采用js+html5。(当然还有其他的方式,例如orm框架采用mybatis等,本文暂未涉及。) 。
(6)在resource目录下新建一个application.properties文件(或yml文件),命名与位置为springboot默认的配置文件。在该文件中,记录着所有的模块配置内容。例如tomcat的端口(默认8080)以及编码方式等:
1
2
|
server.port=
8080
server.tomcat.uri-encoding=utf-
8
|
(7)引入本项目中所需要的相关依赖(mysql连接驱动 以及spring data jpa,thymeleaf模板引擎) 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<!-- https:
//mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>
5.1
.
39
</version>
</dependency>
<!-- https:
//mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-thymeleaf</artifactid>
<version>
1.4
.
0
.release</version>
</dependency>
<!-- https:
//mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-data-jpa</artifactid>
<version>
1.5
.
1
.release</version>
</dependency>
|
(8)在application.properties中配置mysql数据库连接信息 。
这里的数据库为本地数据库test,用户名和密码改成自己的 。
1
2
3
4
5
|
#mysql
spring.datasource.driver-
class
-name=com.mysql.jdbc.driver
spring.datasource.url=jdbc:mysql:
//localhost:3306/test?characterencoding=utf8
spring.datasource.username=****
spring.datasource.password=****
|
(9)在application.properties中配置spring data jpa 。
这一段的意思就是说,数据库类型为mysql,日志信息打印具体执行的sql语句,表更新策略以及java类到数据库表字段的映射规则等,具体查看网络资料.
1
2
3
4
5
6
7
8
|
#spring data jpa
spring.jpa.database=mysql
spring.jpa.show-sql=
true
spring.jpa.hibernate.ddl-auto=update
# naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.improvednamingstrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.mysql5dialect
|
(10)编写一个实体类user 。
@table标签,指定数据库中对应的表名,id配置为主键,生成策略为自动生成 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/**
* created by song on 2017/2/15.
* model 用户
*/
@entity
@table
(name =
"tbl_user"
)
public
class
user {
@id
@generatedvalue
(strategy = generationtype.identity)
private
long
id;
private
string name;
private
string password;
}
|
(11)基于jpa,实现dao层(即数据库数据的增删改查操作) 。
新建userrepositoty.java接口文件,源代码如下:
1
2
3
4
5
6
7
8
9
|
/**
* created by song on 2017/2/15.
* user表操作接口
*/
@repository
public
interface
userrepositoty
extends
jparepository<user,
long
>{
@query
(
"select t from user t where t.name = :name"
)
user findbyusername(
@param
(
"name"
) string name);
}
|
需要解释的是,spring data jpa提供了很多持久层接口,例如repository,crudrepositoty,pagingandsortingrepository 以及jparepository 接口。其中repository为基类,jparepository继承自pagingandsortingrepository接口,两个泛型参数分别代表java pojo类以及主键数据类型。我们创建自己的数据库操作接口时,只需继承上述jpa提供的某个接口,即可自动继承相关数据操作方法,而不需要再次实现。例如crudrepositoty提供了对增删改查操作的实现,pagingandsortingrepository提供了分页查询方法的实现。另外jpa提供了一套命名规则例如readby**()等,这些方法也只需要用户申明而由jpa自动实现了。如果这仍不能满足业务需求,也可以自定义sql查询语句,例如上述代码所示,采用@query标签, 其中 :*语法为引用下面用@param标识的变量,需要注意的是其中user不是表面而是java pojo类名。具体使用参考jpa使用手册.
(12)设计service层业务代码 。
新建userservice类,其源代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/**
* created by song on 2017/2/15.
* user业务逻辑
*/
@service
public
class
userservice {
@autowired
private
userrepositoty userrepositoty;
public
user finduserbyname(string name){
user user =
null
;
try
{
user = userrepositoty.findbyusername(name);
}
catch
(exception e){}
return
user;
}
}
|
(13)设计controller层 。
新建usercontroller.java,提供两个接口,/user/index 返回页面,/user/show返回数据。其源代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/**
* created by song on 2017/2/15.
* user控制层
*/
@controller
@requestmapping
(value =
"/user"
)
public
class
usercontroller {
@autowired
private
userservice userservice;
@requestmapping
(value =
"/index"
)
public
string index(){
return
"user/index"
;
}
@requestmapping
(value =
"/show"
)
@responsebody
public
string show(
@requestparam
(value =
"name"
)string name){
user user = userservice.finduserbyname(name);
if
(
null
!= user)
return
user.getid()+
"/"
+user.getname()+
"/"
+user.getpassword();
else
return
"null"
;
}
}
|
(14)在application.properties文件中配置页面引擎。这里采用springmvc(springboot还提供thymeleaf,freemaker等)。这里需要配置其静态资源(js、css文件、图片文件等)路径,以及html页面文件路径,参考springmvc在spring下的配置.
1
2
3
4
5
|
#视图层控制
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
spring.mvc.
static
-path-pattern=/
static
/**
|
(15)在resource目录下新建templates以及static目录,分别用于存放html文件以及(js、css文件、图片)文件。在(13)中返回了一个“user/index”页面,所以在templates下新建user目录,在user目录下新建index.html页面,这里就不写什么了,默认页面,通过相对路径引入js文件,js文件里只做示意,弹出一个alert().
user/index.html 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!doctype html>
<html lang=
"en"
>
<head>
<meta charset=
"utf-8"
/>
<script src=
"../static/scripts/jquery.min.js"
></script>
<script src=
"../static/scripts/test.js"
></script>
<title>title</title>
</head>
<h1>test page</h1>
<body>
</body>
</html>
static
/scripts/test.js
$(document).ready(function (){
alert(
"ok test"
);
});
|
(16)配置jpa 。
新建一个configuration包,用于存放项目配置类。类似ssm架构下,spring需要配置java pojo类包路径以及dao层接口路径,以自动扫描相关注解,这里同样需要配置这两项,不同的是spring采取的是xml配置方式,这里用java代码+注解方式配置。新建一个jpaconfiguration.java类,其代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/**
* created by song on 2017/2/15.
* jpa 配置类
*/
@order
(ordered.highest_precedence)
@configuration
@enabletransactionmanagement
(proxytargetclass =
true
)
@enablejparepositories
(basepackages =
"com.song.repository"
)
@entityscan
(basepackages =
"com.song.entity"
)
public
class
jpaconfiguration {
@bean
persistenceexceptiontranslationpostprocessor persistenceexceptiontranslationpostprocessor(){
return
new
persistenceexceptiontranslationpostprocessor();
}
}
|
(17)配置项目启动入口 。
到这一步就可以删掉(5)中官方示例给出的samplecontroller.java了,由于我们的工程结构已经发生了改变,我们需要告诉springboot框架去扫描哪些包从而加载对应类,所以这里重新编写main函数。新建一个entry.java类,其代码如下(其中@springbootapplication是一个复合注解,就理解为自动配置吧):
1
2
3
4
5
6
7
8
9
10
11
|
/**
* created by song on 2017/2/15.
* 项目启动入口,配置包根路径
*/
@springbootapplication
@componentscan
(basepackages =
"com.song"
)
public
class
entry {
public
static
void
main(string[] args)
throws
exception {
springapplication.run(entry.
class
, args);
}
}
|
(18)运行main函数,访问http://localhost:8080/user/index 会显示测试页面,并弹出alert(),访问http://localhost:8080/user/show?name=**(数据表里存在的数据)会显示user信息。最终的工程文件结构如下:
完整项目工程:https://github.com/sonlan/springboot-demo 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.jianshu.com/p/52129d66ba11 。
最后此篇关于IDEA下从零开始搭建SpringBoot工程的方法步骤的文章就讲到这里了,如果你想了解更多关于IDEA下从零开始搭建SpringBoot工程的方法步骤的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是在项目中使用 keras 的新手。我一直在我的模型中使用generator。 我真的很困惑我应该输入什么值 1) In fit_generator : steps_per_epoch & vali
假设我们有如下情况: A has to give $10 to B. B has to give $20 to C. C has to give $10 to D. 现在这种情况可以简化为: A lo
我正在尝试对特定列(在工作表“OA”中)进行相对引用,我需要在 110 的步骤中检索新工作表中的单元格内容 例如, =OA!$AB217 =OA!$AB327 =OA!$AB437 与其在每个单元格中
我的 PowerShell 控制台启动时间很慢(总是等待超过 5 秒),并且希望获得有关故障排除步骤的建议,以找出瓶颈可能在哪里? 我已经阅读了关于运行脚本的内容,-NoProfile防止模块等加载很
我在 NativeScript 应用程序中使用 slider 小部件,我想知道是否有步骤属性。在我的例子中,小部件代表金钱,我希望以 5 美元的增量滑动。 我查看了文档,但找不到任何对这种情况有帮助的
我在 NativeScript 应用程序中使用 slider 小部件,我想知道是否有步骤属性。在我的例子中,小部件代表金钱,我希望以 5 美元的增量滑动。 我查看了文档,但找不到任何对这种情况有帮助的
这是我的code : &n
为什么 (2) c.ERR(模棱两可)?第一个方法参数 - char ('a') 被扩展为 float => 匹配。 如果找到匹配项,是否无需继续执行第 2 步(装箱/拆箱)或第 3 步(尝试可变参数
我有一个函数,它处理一个包含 6100 个列表项的列表。当列表只有 300 个项目时,该代码可以正常工作。但是立即与 6100 崩溃。有没有一种方法可以遍历这 6100 个项目,一次说 30 个,然后
1.制作PHP安装程序的原理 其实PHP程序的安装原理无非就是将数据库结构和内容导入到相应的数据库中,从这个过程中重新配置连接数据库的参数和文件,为了保证不被别人恶意使用安装文件,当安装
我创建了一个类似于 primeNG page 的步骤组件我想把他放在一个 dynamic dialog 里面但在应用它之后,“第 1 步”和“第 2 步”不会呈现。 查看代码,我发现关键部分是我们打开
我在理解描述的 MixColumns 步骤时遇到问题 here . 我知道扩散,这一切都是有道理的,因为它指出每列都被视为多项式并乘以 GF(2^8) 的模。 但是..乘以GF(2 ^ 8)。尽管域仍
根据我对 TeamCity 工作原理的观察,我注意到在所有步骤执行完毕后评估构建失败条件。这很烦人,因为如果满足任何构建失败条件,我不能有一个不会执行的步骤。 我不是指常见的构建失败条件,例如“至少一
基于这篇试图在我的环境中测试管道代码的帖子。但它给出了以下错误消息。如何修复他的管道代码? ERROR: Unable to find project for artifact copy: test
我参与了一个项目,需要向我的一位同事提供生产数据的子集(日期范围),以进行故障排除。我想将经过清理的生产数据子集插入新的数据库表中我的同事可以访问。请提出实现此目标的最佳方法。 最佳答案 最简单的方法
我有这样的场景: 鉴于我去这个页面 当我输入 cucumber 时 然后我点击 然后我应该看到文字 我不应该看到这条线 如果我运行这个场景,它将执行所有 5 个步骤。但是我想跳过第4步(然后我应该看到
是否有任何功能可以避免 m 文件的绘图输出? 我的意思是我在文件的开头放置了一个函数(如 clc),然后所有绘图函数都被阻止。 最佳答案 您可以使用自己的(嵌套在您的函数内或同一目录中)重载内置绘图函
我是小 cucumber 语言的新手,这在我看来是非常基本的问题,但我找不到答案。 我知道可以在 Gherking 中编写多行步骤参数,如下所示: Given a blog post named "R
即使其中一个步骤失败,有没有办法继续执行 Cucumber Steps。在我当前的设置中,当一个步骤失败时, cucumber 会跳过剩余的步骤......我想知道是否有某种方法可以设置 cucumb
start-step-stop 码是一种数据压缩技术,用于压缩相对较小的数字。 该代码的工作原理如下:它具有三个参数,start、step 和 stop。 Start 确定用于计算前几个数字的位数。
我是一名优秀的程序员,十分优秀!