springboot项目的创建和兼容jsp和注解开发,详细有效(注解和配置两种)
如果这篇博客能给你带来帮助不胜荣幸,如果有不对的地方,都是码农欢迎指正。直接进入正题
在这里首先我要声明一下我个人的感觉如果你会ssm(spring+mybatis+springmvc)的话,那么你可以在五分钟之内就搞定了,如果你不会也无所谓。
我个人是感觉springboot项目其实就是对ssm项目的一个管理和整合。如果你用的eclipse那么你需要下载插件,所以我建议大家直接下载sts(Spring Tools Suite)这个软件.官网自己下载
我使用的是sts这个树叶的软件。现在直接上:
1:第一 新建(new)找到Spring Starter Project(这个是创建springboot项目的),然后点击就创建一个springboot项目了。
然后会让你填写一下你的项目的具体的一些信息。最后点击next(也可以选择使用默认的东西)
然后会让你选择一些maven 的依赖 全部都是从下面的列表里找的比如从sql 里面找到mysql Driver驱动等等,需要什么就可以添加什么依赖(根据实际需求来添加)
添加完成之后创建项目的话你的项目里面就会自动下载这些依赖了,到时候前往pom.xml里面进行查看。
创建的过程可能比较慢 根据你的网速来定义 请大家耐心等待 至此恭喜你你已经创建了一个简单的springboot 项目了,里面需要有一些地方给大家讲一下:
我是用的导航图的样式来看项目,大家可以使用window--> view-->Navigator来修改视图模式
有几个框从上往下依此介绍:
第一个****application.java的文件是整个项目的启动类,所有的项目都需要从这里启动(切记切记)
然后resources这个文件加下放非Java文件资源的,比如说static下存放css和js和img等等 temolates文件下是存放html界面的,这个文件夹下类似ssm项目下的WEB-INF 文件夹下
是受到保护的不可以随便访问。然后最重要的就是application.properties(application.yml)文件。这个文件可以说是springboot项目的一个全局配置文件包含众多信息比如说:端口号的配置 datasource数据源的配置我一般习惯使用application.yml来进行一个配置。最后一个就是maven依赖的pom.xml依赖了。如果你的pom.xml如果跟我的一样报了错:
把你的版本号改成小一点的,比如说2.1.4等等。还有一点就是你的application.properties(application.yml文件)下面的webapp下面的文件夹你需要添加点东西,因为你使用的是war包,所以需要新建上一个文件夹(WEB-INFO)然后里面放上一个web.xml文件 和之前ssm的一样就可以了,然后web.xml文件里面什么也可以不用写。 到此你的项目就不报错了。
例如我的web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>myspringbootDemo</display-name>
</web-app>
其实这个东西:如果你不需要使用jsp或者其他的什么的完全可以把没有用的东西干掉。
然后开始写一点东西。写两个查询吧一个注解的一个配置文件的。老规矩还是按照学生表来实现:
咱们创建目录 student,然后在他下面创建几个包(model(实体类),dao(持久层),service(业务层),web(控制层) )可以看我的创建目录 然后在启动类的上面进行配置扫描其实如果你的实体类和接口要是写在了*****.application那个启动类的同级或统计一下目录,那么会自动帮你扫描。但是我本人也会进行强迫症的扫描。
好的然后就是上代码:实体类详情什么的我会发给大家项目的参考的。现在就说主要工作流程:然后你需要创建dao层的接口。这里要注意的是:因为你少了很多配置,然后呢你需要使用的就是注解了。所以你在创建接口的时候就需要给他加上注解@Mapper(就相当于告诉项目我这个类呢是接口):然后呢正常写接口,我们写两个方法一个是使用注解的主键查询。另一个是使用注解的形式写mapper.xml的查询:当你使用注解查询的时候你就需要在你的项目上面写上你的相关的注解比如查询使用(@select)修改使用 @Update 删除使用@Delete 等等不在一一举例 。然后括号里面写你的sql语句该怎么写就怎么写,跟ssm项目完全一样。 业务层和控制层同样使用注解来进行配置(可以这样理解:告诉项目这个是业务层,这个是控制层),配合着上面的扫描一起使用。
当然了在控制层唯一有一点不太一样的地方就是一般情况下我们再看控制层有的时候会加上一个注解@Controller 现在呢多了一个@RestController这个注解,把鼠标放上去的时候就会出现它比@Controller多了一个注解那就是@ResponseBody,也就是说如果使用@RestController这个注解的话你的控制层的所有方法返回的数据格式全部是json串。(当然了我个人建议大家使用@Controller,然后可以在每个方法上面加上@ResponseBody),当你写到这一步的时候,不妨可以停下来跟我的对照一下看看是否一样啊:
实体类:
package com.company.demo.student.model; public class Student { private Integer id;
private String name;
private Integer age;
private String sex; 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;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public Student(Integer id, String name, Integer age, String sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
} public Student() {
// TODO Auto-generated constructor stub
} @Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
} }
dao层:
package com.company.demo.student.dao; import java.util.List; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select; import com.company.demo.student.model.Student; @Mapper
public interface StudentMapper { @Select("select * from student where id =#{id}")
public Student queryById(Integer id); public List<Student> findAll();
}
业务层的接口:
package com.company.demo.student.service; import java.util.List; import com.company.demo.student.model.Student; public interface StudentService { public Student queryById(Integer id);
public List<Student> findAll();
}
业务层的实现类:
package com.company.demo.student.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.company.demo.student.dao.StudentMapper;
import com.company.demo.student.model.Student; @Service
public class StudentImpl implements StudentService{ @Autowired
private StudentMapper studentMapper; @Override
public Student queryById(Integer id) {
// TODO Auto-generated method stub
Student queryById = studentMapper.queryById(id);
return queryById;
} @Override
public List<Student> findAll() {
// TODO Auto-generated method stub
List<Student> findAll = studentMapper.findAll();
return findAll;
} }
控制层:
package com.company.demo.student.web; import java.util.List; 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.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import com.company.demo.Message.Result;
import com.company.demo.Message.ResultCode;
import com.company.demo.student.model.Student;
import com.company.demo.student.service.StudentService; @Controller
public class StudentController { @Autowired
private StudentService studentService; @ResponseBody
@RequestMapping("/findAll")
public Result findAll(){
Result result = new Result();
List<Student> findAll = studentService.findAll();
if(findAll!=null){
result.setData(findAll);
result.setResultCode(ResultCode.SUCCESS);
return result;
}else{
result.setResultCode(ResultCode.RESULT_IS_NOT);
return result;
}
} @ResponseBody
@RequestMapping("/selectById")
public Result selectById(Integer id){
Result result = new Result();
if(id!=null){
Student queryById = studentService.queryById(id);
if(queryById!=null){
result.setData(queryById);
result.setResultCode(ResultCode.SUCCESS);
return result;
}else{
result.setResultCode(ResultCode.RESULT_IS_NOT);
return result;
}
}else{
result.setResultCode(ResultCode.PARAM_IS_BLANK);
return result;
}
} }
完事了之后,因为是演示我就简单的做一下数据的返回处理 自己写了两个两个类当成数据的返回处理类吧算是:
第一个数据的返回类:
package com.company.demo.Message; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include; @JsonInclude(Include.NON_NULL)
public class Result{ private ResultCode resultCode;
private String message;
private Object data; public ResultCode getResultCode() {
return resultCode;
}
public void setResultCode(ResultCode resultCode) {
this.resultCode = resultCode;
} public Result() {
// TODO Auto-generated constructor stub
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public Object getData() {
return data;
} public void setData(Object data) {
this.data = data;
} //查询成功返回的东西
public static Result success(Object data){
Result result = new Result();
result.setResultCode(ResultCode.SUCCESS);
result.setData(data);
return result;
} //添加删除修改成功之后调用
public static Result success(){
Result result = new Result();
result.setResultCode(ResultCode.SUCCESS);
return result;
} //添加失败调用
public static Result failure(ResultCode resultCode){
Result result = new Result();
result.setResultCode(resultCode);
return result;
} //其他失败调用的
//查询成功返回的东西
public static Result success(Object data,ResultCode resultCode){
Result result = new Result();
result.setResultCode(resultCode);
result.setData(data);
return result;
} }
第二个:枚举的参数类型类:
package com.company.demo.Message; public enum ResultCode { SUCCESS(1,"成功"),
ERROR(0,"错误"), PARAM_IS_INVALID(1001,"参数无效"),
PARAM_IS_BLANK(1002,"参数为空"),
PARAM_TYPE_BIND_ERROR(1003,"参数类型错误"),
PARAM_NOT_COMPLETE(1004,"参数缺失"), USER_NOT_LOGGED_IN(2001,"用户未登录,访问的路径须验证,请登录"),
USER_LOGIN_ERROR(2002,"账户不存在或密码错误"),
USER_ACCOUNT_FORBIDDEN(2003,"账号已被禁用"),
USER_NOT_EXIST(2004,"用户不存在"),
USER_HAS_EXISTED(2005,"用户已存在"), RESULT_IS_NOT(5000,"没有符合您想要的查询结果"),
RESULT_OTHER_ERROR(9999,"没有进入方法,直接跳转返回"); private Integer code;
private String message; private ResultCode(Integer code, String message) {
this.code = code;
this.message = message;
} public Integer code() {
return this.code;
} public String message() {
return this.message;
} }
接下来这个是重点:那就是springboot 的全局一个简单配置: 我把之前resource 下面的那个application.properties 改成了application.yml格式.(用习惯了)
server:
port: 8085 #端口号
servlet:
context-path: /myspringboot #你自定义的虚拟的项目名 方便实用
spring:
mvc:
view:
suffix: .jsp #因为有的人可能用jsp 所以添加jsp的配置
prefix: /jsp/ #所以就配置一下前后缀 其实正常情况下应该是放到/WEB-INF/下面的。
#我为了方便演示就放到了可以直接访问的目录下,你可以自由放置
static-path-pattern: /static/** #过滤静态资源
thymeleaf: #springboot支持html文件 使用thymeleaf配置
cache: false
encoding: UTF-8
mode: LEGACYHTML5
prefix: classpath:/templates/
suffix: .html
check-template-location: true
datasource: #数据源配置
url: jdbc:mysql://localhost:3306/teststudent?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver #驱动类 看你的数据库是六以上的吗?版本高的需要使用 这个驱动
mybatis:
mapper-locations: classpath*:xml/*.xml #这个位置是配置 是配置dao层的mapper.xml存放的位置的 其中第一个是你新建的包名是什么就是什么
type-aliases-package: com.ygjy.hospital.model #实体类 别名配置 #配置pagehelper
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: count=countSql
然后如果你是用的是jsp 那么你需要干两件事 第一添加servlet 依赖:
<!--jsp页面使用jstl标签 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--用于编译jsp -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
第二:去那个配置文件里面进行配置:因为我刚才已经进行配置了就是配置jsp的视图解析:所以不用再配置了。
还有因为咱们还打算使用mapper.xml:所以我们需要新建一个文件夹来存放:我们在resource文件夹下新建一个叫xml()的文件:(这个跟上面的application.yml里面的配置相呼应)。然后在 pom.xml文件里面加入:<build></build>标签里面添加: 添加完成了之后你就可以使用mapper.xml文件了:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
里面可以写你的mapper.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.company.demo.student.dao.StudentMapper">
<resultMap id="student" type="com.company.demo.student.model.Student">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="age" jdbcType="INTEGER" property="age" />
<result column="sex" jdbcType="VARCHAR" property="sex" />
</resultMap> <!-- 搜索全部 -->
<select id="findAll" resultMap="student">
select * from student where 1=1;
</select> </mapper>
到达这里呢!其实你的项目已经算是好了!现在让我们启动一下项目:在这里请大家记住springboot 项目跟大家说过:有一个固定的启动类:现在我们找到那个启动类右击 run as
spring boot app 点击一下那个小树叶就可以了!
你会看到 spring 的字样:
我们先来演示一下使用注解方法的那个 打开你本地的postman 如果没有直接使用浏览器都可以,测一下接口:给他一个默认的参数比如说 我给了一个 5
效果展示:
因为本人的的前台功能比较菜,所以就简单的写一个jsp的吧,目的就是为了两个验证第一 :看看我刚才的配置是否成功了如果springboot项目能兼容jsp就说明配置成功了。
(前台jsp已上传百度云,可自行下载。)
下面直接展示jsp的效果。咱们在webapp下面新建一个jsp包然后 写一个界面 这次咱们验证使用mapper.xml的哪个方法。顺便看看mapper.xml的配置成功没有。
直接看效果:
到这里呢!就算是完成了,其实还有很多东西没有放进去,以后有时间的话会不断晚上的 比如逆向工程 分页 上传 导出什么的,打算写但是今天写到这里有点累了,其实都跟ssm没什么区别,以后有机会不断完善。最后附上源码给大家吧!(虽然自己也是刚入行的菜鸡)不给源码的人一般不是善良的码农。
链接: https://pan.baidu.com/s/1fInJe4AtSXCAlfMcFa5k6Q 提取码: maay
springboot项目的创建和兼容jsp和注解开发,详细有效(注解和配置两种)的更多相关文章
- IDEA中SpringBoot项目快速创建单元测试
如何在IDEA中对于SpringBoot项目快速创建单元测试 创建测试用例 右键需要进行测试的方法,选择GO TO然后选择Test 点击Create New Test 勾选需要创建单元测试的方法 然后 ...
- idea:spring initializr无web勾选,maven方式搭建springboot项目。jdk7创建springboot项目的版本不兼容问题。
一.idea 使用spring initializr不选择web搭建springboot项目 1.file => new => project 2.直接next到finish结束. 3.完 ...
- SpringBoot项目的创建流程(初步)
小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做JavaEE开发的小伙伴们肯定也听说过“约定大于配置”这样一句话,就是说系统,类库,框架应该假定合理的默认值,而非要求提 ...
- springboot项目的创建
创建springboot项目 包名和项目名 选择需要使用的框架,web 然后再点击下一步,完成即可创建springboot项目
- 多模块springboot项目启动访问不了jsp页面
被springboot项目maven打包.启动.访问折腾的头都大了,一步一个坑,在解决了所有的问题之后,那种欣喜若狂的心情只有自己能体会,决定要好好记录一下了,废话不多说了,直接进入正题. 问题和排查 ...
- jsp中使用动态数据进行mySQL数据库的两种操作方法
使用动态数据进行数据库内容的增删改查操作有两种方法: 在此定义数据库连接为conn 假设有表单进行数据输入并提交到处理页面一种是使用预编译格式: 其格式如下: String name = reques ...
- idea在springboot项目中没有【新建JSP选项】的解决方法
https://blog.csdn.net/qq_26525215/article/details/53726690 转载于CSDN
- SpringBoot项目刚刚创建就报异常,Failed to configure a DataSource: 'url' attribute is not specified and no embedded 的解决办法
错误信息: Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedde ...
- 【JSP EL】EL表达式获取当前时间(两种方式)
第一种方式: //先在代码段定义<% long date = new Date().getTime(); request.setAttribute("date", date) ...
- java poi操作创建xslx或xsl文件,存本地和进行网络传输两种方式集成
package com.java.zxf.util; import java.io.IOException; import java.io.OutputStream; import java.net. ...
随机推荐
- AspNetCore底层源码剖析(三)IOC
title: AspNetCore底层源码剖析(三)IOC date: 2022-09-21 13:20:01 categories: 后端 tags: - .NET 介绍 每个 ASP.NET Co ...
- SOFAJRaft模块启动过程
本篇文章旨在分析SOFAJRaft中jraft-example模块的启动过程,由于SOFAJRaft在持续开源的过程中,所以无法保证示例代码永远是最新的,要是源代码有较大的变动,亦或出现纰漏.错误的地 ...
- 洛谷 P1208混合牛奶 题解
一道贪心算法不是很明显的题目,其实一般的递推也可以做. 大体思路:肯定优先购买单价最低的奶农的牛奶,那么就需要先根据牛奶单价进行排序,这里用结构体会更好一点.之后在从前往后一个一个枚举,直至购买的牛奶 ...
- three.js一步一步来--如何画出构造辅助线
可以参考下面代码,粘贴上去就有了~ <template> <div class="container"> <h1>初步构造出辅助线</h1 ...
- Unity之GPS定位(腾讯sdk)
Unity之GPS定位(腾讯sdk) 目录 Unity之GPS定位(腾讯sdk) 前言 Unity版本及使用插件 正题 编写脚本 Run运行, 跑起来就行,具体要什么,去相关类找就好了. 没有腾讯地图 ...
- 关于integer数据对比的问题
先看案例 Integer c1 = 127; Integer c2 = 127; c1 == c2; //true Integer d1 = 128; Integer d2 = 128; d1 == ...
- 二、typora软件的安装与markdown语法
目录 一.typora软件的安装与使用 1.软件的安装 2.破解使用的方法 3.功能描述(markdown语法讲解) 标题 小标题 语言环境 表格 表情 图片 查看源代码 数学公式 流程图 高亮文本 ...
- 重定向Kubernetes pod中的tcpdump输出
重定向Kubernetes pod中的tcpdump输出 最新发现一个比较有意思的库ksniff,它是一个kubectl 插件,使用tcpdump来远程捕获Kubernetes集群中的pod流量并保存 ...
- PDF-XChange Editor
软件简介 PDF-XChange Editor官方版是PDF-XChange的增强版本编辑器,软件完全绿色免费,且功能无限制.PDF-XChange Editor官方版主要提供PDF电子文档的编辑功能 ...
- Solon2 开发之插件,二、插件扩展机制(Spi)
插件扩展机制,是基于 "插件" + "配置申明" 实现的解耦的扩展机制(类似 Spring Factories.Java Spi):简单.弹性.自由.它的核心作 ...