Spring boot基础文档.docx
《Spring boot基础文档.docx》由会员分享,可在线阅读,更多相关《Spring boot基础文档.docx(20页珍藏版)》请在冰点文库上搜索。
![Spring boot基础文档.docx](https://file1.bingdoc.com/fileroot1/2023-7/3/1d50a7db-63ad-43b0-b051-a217c6f130f0/1d50a7db-63ad-43b0-b051-a217c6f130f01.gif)
Springboot基础文档
在IDEA环境下创建一个Springboot程序
一、点击NewProject后,选择SpringInitializr。
如下图所示,此时,如果右侧你的JDK自动出现了,那可以省很多事。
如果没有自动出现,则需要你点击New,去选择你JAVA的安装目录。
(为什么需要这样?
因为Spring的运行需要JAVA,所以IDE需要知道你的JAVA安装目录。
)
二、进入下一步后,会让你设置一下你工程的名字等基本信息。
三、然后这个界面比较重要,它的作用是在开始的时候,自动下载一些jar包。
你勾选一个,他就会自动下载。
请按照需求勾选。
四、填写工程名
五、OK,现在Intellij就自动为我们创建好一个Springboot的程序了哦~如下图所示:
Springboot写一个Helloworld
现在开始写第一个HelloWorld~看下图:
上图中的com.example是一个包名,为了代码可读性高,我们会使用MVC的开发模式,在com.example这个包下面,再新建几个包,分别用来写不同的代码。
需要新建的包如下:
1.controller包:
用来写控制器代码,控制器对应不同的请求,是网络请求的第一层。
2.model包:
里面每个class可以对应一个数据表,当你写好class,并且运行工程时,Springboot和Hibernate会自动为你在数据库里创建表。
3.repository包:
这里封装了所有对数据表的增删改查操作。
以后你需要操作数据库,其实就是使用这里的接口。
4.service包:
比如把登录、注册等一个完整的逻辑,封装为一个service,供controller调用,可以极大地简化开发,同时代码也具有更高的可读性。
下面,让我们来建立这四个包吧~在com.example这个包上右键,然后new一个包出来。
如图所示:
我这里创建好包名后,目录结构是这样的:
好了,到这一步,我们终于可以开始写代码啦~~~在本文里,我们将不会用到service、model、repository,只会用到controller来写一个简单的HelloWorld。
让我们开始写吧:
首先,在controller这个包上点击右键,新建一个class,名字就叫nana,如下图所示:
建立好文件后,我们在这个文件里输入以下的代码:
【注意,如果没有严格按照前面的教程来,你的包名可能和我的不一样,所以这个代码复制过去后,请自己检查一遍!
】
package ;
import ;
import ;
import ;
import ;
/**
* Created by longge93 on 16/4/14.
*/
@RestController
@EnableAutoConfiguration
public class nana {
@RequestMapping(value="/",method = RequestMethod.GET)
public String index(){
return "Hello World~";
}
}
然后我们来运行以下我们的工程,运行方法如下图所示:
如上图所示,点击那个三角形,就可以运行我们的工程了。
不过,所有写代码的过程都是不顺利的~~虽然我们点了运行,但是下面的控制台里却提示我们运行失败了,从上图的下面看出,是hibernate出错了。
为什么呢?
因为我们在Maven里包含了MySQL的jar包,但是却没有配置数据库连接需要的账号和密码等信息。
所以hibernate会报错~~因为我们这篇文章里,只是为了输出helloworld,用不着数据库。
所以我们先去pom文件里注释掉数据库相关的jar包应该就OK了。
我注释完后,我的pom文件是这样的,请仔细检查:
xml version="1.0" encoding="UTF-8"?
>
xsi="/XMLSchema-instance"
xsi:
schemaLocation="/4.0.0 /maven-">
com.example
demo
jar
demo
Demo project for Spring Boot
spring-boot-starter-parent
-- lookup parent from repository -->
<
1.8
spring-boot-starter-aop
---->
--
--spring-boot-starter-data-jpa-->
---->
---->
--
--spring-boot-starter-jdbc-->
---->
---->
--
--spring-boot-starter-redis-->
---->
spring-session
spring-boot-starter-thymeleaf
spring-boot-starter-web
---->
--mysql-->
--mysql-connector-java-->
--runtime-->
---->
spring-boot-starter-test
test
spring-boot-maven-plugin
此时,依然报错:
CannotdetermineembeddeddatabasedriverclassfordatabasetypeNONE
解决办法:
注释掉pom文件中jap和session,在完成以后,pom配置如下
xml version="1.0" encoding="UTF-8"?
>
xsi="/XMLSchema-instance"
xsi:
schemaLocation="/4.0.0 /maven-">
com.example
demo
jar
demo
Demo project for Spring Boot
spring-boot-starter-parent
-- lookup parent from repository -->
<
<
1.8
spring-boot-starter-aop
spring-boot-starter-web
spring-boot-starter-test
test
spring-boot-starter-thymeleaf
spring-boot-maven-plugin
然后我们再点击那个三角形运行,你会发现运行成功啦~~如下图所示:
因为Springboot其实已经自带Tomcat了,所以当我们把这个工程跑起来后,其实就相当于跑起来一个网站。
现在让我们去网页里看看我们的HelloWorld有没有正常工作吧~
在浏览器里,打开,你会发现输出了HelloWorld~~
来源:
/5cafb22d-351b-13b5-01e4-c260f480debf.html
Springboot在Springmvc下接入微信
在我们搭建好Springboot环境后,可以很容易的使用Springmvc,不需要复杂的配置,只需要做一些基本的注解就行了。
这一章讲述如何在Springmvc下去接入微信。
一、接入微信需要一个公网IP,这里我们使用的是ngrock内网穿透工具。
运行--》cmd,进入ngrock解压目录,输入命令ngrok-subdomain yxpeng -config=ngrok.cfg 8080
其中yxpeng是可以自己配置的子域名,8080端口通常设置为你的项目运行的端口,因为我这边默认的是8080,所以我设置成了8080.
二、与用servlet接入微信一样的,我们需要接受到微信后台通过get请求传过来的几个参数。
首先,写了一个model,其中封装了这四个参数。
package ;
/**
*微信接入校验信息model
*CreatedbyAdministratoron2016/11/80008.
*/
publicclassCheckModel{
privateStringsignature;
privateLongtimestamp;
privateLongnonce;
privateStringechostr;
publicStringgetSignature(){
returnsignature;
}
publicvoidsetSignature(Stringsignature){
this.signature=signature;
}
publicLonggetTimestamp(){
returntimestamp;
}
publicvoidsetTimestamp(Longtimestamp){
this.timestamp=timestamp;
}
publicLonggetNonce(){
returnnonce;
}
publicvoidsetNonce(Longnonce){
this.nonce=nonce;
}
publicStringgetEchostr(){
returnechostr;
}
publicvoidsetEchostr(Stringechostr){
this.echostr=echostr;
}
}
创建一个controller类,其中添加一个validate方法,用来接收这个model并进行处理
package;
import;
import;
import;
import;
import;
import;
import;
import;
/**
*CreatedbyAdministratoron2016/11/90009.
*/
@RestController
@RequestMapping("/user")
@EnableAutoConfiguration
publicclassUserController{
@Autowired
privateUserServiceuserService;
@RequestMapping("/check/{name}")
public@ResponseBodyStringaddUser(@PathVariable("name")Stringname){
Useruser=newUser();
user.setUserName(name);
user.setPassword("123");
user.setRealName("喻学鹏");
userService.saveUser(user);
returnuser.getUserName();
}
@RequestMapping("/find/{name}")
public@ResponseBodyStringfindUserByName(@PathVariable("name")Stringname){
Useru=null;
u=userService.findByUserName(name);
if(u!
=null){
returnu.getRealName();
}else{
return"未找到";
}
}
}
在tokenService中,分离出这四个参数,然后对token,timestamp和nonce这三个参数进行字典排序,然后进行SHA1加密,将密文与signature对比,如果相同就返回echostr.
package;
import;
import;
import;
import;
import;
/**
*CreatedbyAdministratoron2016/11/80008.
*/
@Service
publicclassTokenService{
/**
*微信接入数据验证
*@paramwxToken
*@paramtokenModel
*@return
*/
@Transactional
publicStringvalidate(StringwxToken,CheckModeltokenModel){
Stringsignature=tokenModel.getSignature();
Longtimestamp=tokenModel.getTimestamp();
Longnonce=tokenModel.getNonce();
Stringechostr=tokenModel.getEchostr();
if(signature!
=null&×tamp!
=null&nonce!
=null){
String[]str={wxToken,timestamp+"",nonce+""};
Arrays.sort(str);//字典序排序
StringbigStr=str[0]+str[1]+str[2];
//SHA1加密
Stringdigest=EncoderHandler.encode("SHA1",bigStr).toLowerCase();
//确认请求来至微信
if(digest.equals(signature)){
//最好此处将echostr存起来,以后每次校验消息来源都需要用到
returnechostr;
}
}
return"error";
}
}
三、登录微信公众平台
开发--》基本配置
填写好URL和token后,点击提交,微信后台就会想填写好的URL发送GET请求。
如果校验无误,就会提示接入成功。
JpaRepository
来源:
/2088265
什么是Repository?
2.1Repository(资源库):
通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调。
这个叫法就类似于我们通常所说的DAO,在这里,我们就按照这一习惯把数据访问层叫Repository
SpringData给我们提供几个Repository,基础的Repository提供了最基本的数据访问功能,其几个子接口则扩展了一些功能。
它们的继承关系如下:
Repository:
仅仅是一个标识,表明任何继承它的均为仓库接口类,方便Spring自动扫描识别
CrudRepository:
继承Repository,实现了一组CRUD相关的方法
PagingAndSortingRepository:
继承CrudRepository,实现了一组分页排序相关的方法
JpaRepository:
继承PagingAndSortingRepository,实现一组JPA规范相关的方法
JpaSpecificationExecutor:
比较特殊,不属于Repository体系,实现一组JPACriteria查询相关的方法
我们自己定义的XxxxRepository需要继承JpaRepository,这样我们的XxxxRepository接口就具备了通用的数据访问控制层的能力。
2.2JpaRepository所提供的基本功能
2.2.1CrudRepository:
这个接口提供了最基本的对实体类的添删改查操作
Tsave(Tentity);//保存单个实体
Iterablesave(Iterable
extendsT>entities);//保存集合
TfindOne(IDid);//根据id查找实体
booleanexists(IDid);//根据id判断实体是否存在
IterablefindAll();//查询所有实体,不用或慎用!
longcount();//查询实体数量
voiddelete(IDid);//根据Id删除实体
voiddelete(Tentity);//删除一个实体
voiddelete(Iterable
extendsT>entities);//删除一个实体的集合
voiddeleteAll();//删除所有实体,不用或慎用!
2.2.2PagingAndSortingRepository
这个接口提供了分页与排序功能
IterablefindAll(Sortsort);//排序
PagefindAll(Pageablepageable);//分页查询(含排序功能)
2.2.3JpaRepository
这个接口提供了JPA的相关功能
ListfindAll();//查找所有实体
ListfindAll(Sortsort);//排序查找所有实体
Listsave(Iterable
extendsT>entities