打开 IDEA 2019,文件 File --> 新建 New --> 项目 project --> 选择 Spring Initializr --> Next 下一步
Group:一般的是域名,或者是 cn.xxx 英文名都OK的。
Artifact:项目名称。
勾选需要的配置相关的依赖,本文章以 SpringBoot + Mybatis 整合的 JavaWeb 项目,所以勾上 Spring Web,MyBatis,MySql 数据库驱动,Lombok。 SpringBoot版本选2.3.3 Lombok 是一个Java库,它会自动插入编辑器和构建工具中,相关详细请看该文章——链接如下:https://blog.csdn.net/qq_41254299/article/details/104176272
然后 Next 下一步到 选择项目路径,最后 finish。
Finish 创建成功后,将会自动下载各种 jar 包,此时我们手动选择自己配置的 Maven 工具。
选择好 Maven 文件目录后 OK ,等待下载完行了。
项目创建成功 ,文件目录结构
打开 application.properties 文件,写入配置信息
#1.项目启动的端口 server.port=8080 #2.数据库连接参数 spring.datasource.url=jdbc:mysql://localhost:3306/testkey?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username=root spring.datasource.password=123456testkey是先前创建好的数据库,所以测试前先设计好数据库,数据表(MySQL)
CREATE TABLE `goods` ( `pid` int(11) NOT NULL, `pname` varchar(15) DEFAULT NULL, `pprices` decimal(10,2) DEFAULT NULL, PRIMARY KEY (`pid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- INSERT INTO `goods` VALUES ('100', '铅笔', '2.00'); INSERT INTO `goods` VALUES ('101', '黑色签字笔', '3.00'); INSERT INTO `goods` VALUES ('102', '15K笔记本', '3.00'); INSERT INTO `goods` VALUES ('103', '橡皮檫', '3.00'); INSERT INTO `goods` VALUES ('104', '钢笔', '3.00'); INSERT INTO `goods` VALUES ('105', '圆珠笔', '3.00');打开启动类(SpingbootApplication)测试,显示以下信息则配置数据链接成功。
以便于项目后面持久层的开发。
同时创建测试页访问是否创建springboot项目成功。
在 resources 下的 static 创建 web/test.html 一个测试页面。(为了方便目录结构清晰,src和resource下创建包和多层目录,先进行设置下,把当前的钩去掉) 。然后在用New/Directory创建目录时,使用 / 进行创建,例如web/js/,即可达到多层目录结构。
编写简单页面
运行启动类(SpingbootApplication),然后浏览器输入8080端口访问,即可成功!(http://localhost:8080/web/test.html)
一般的项目创建,代码的分层结构,常见分为几种包:controller 控制器层、entity 实体层、mapper 持久层、service 业务层。service下又分 ex (Exception类),impl(implement 实现业务接口类)。
额外的包有:config 配置类,interceptor 拦截器配置,util 工具类,等等其它包,根据项目需求分层。
接下来 resources 下的 mapper 和 static 两个文件夹。mapper 配置抽象方法匹配的映射,编写SQL语句;static 静态资源,例如:js、jq、html、css等文件。
注意:idea和eclipse不同,不能识别Java文件夹中的xml文件,如果直接放在resource下,可以扫描识别,但是放在resource中的Java文件不能编译识别。
现在我们只创建 controller、entity、mapper、service,同时 service 下创建 impl(即implement),这五个包。 鼠标右击打开 New package:com.superclovers.spingboot.controller 在项目下创建controller控制器层,余下四个包同理创建。
1、entity 包下创建 Goods 类 @Data 是lombok工具包含了set,get,toString 方法,相关详细请看该文章——链接如下:https://blog.csdn.net/qq_41254299/article/details/104176272
package com.superclovers.spingboot.entity; import lombok.Data; import java.io.Serializable; /** * 商品列表信息数据的实体类 */ @Data public class GoodsEntity implements Serializable { private static final long serialVersionUID = -7123568729160306865L; private Integer pid; private String pname; private String pprices; }1、mapper 包下创建 GoodsMapper 类
package com.superclovers.spingboot.mapper; import com.superclovers.spingboot.entity.GoodsEntity; import org.springframework.stereotype.Repository; import java.util.List; /** * 处理商品数据的持久层接口 */ @Repository public interface GoodsMapper { /** * 获取所有商品列表 * @return 商品列表 */ List<GoodsEntity> findList(); }第一:@Reponsitory使用后,在启动类上需要添加@MapperScan(“xxx.xxx.xxx.mapper”)注解; 第二:@Mapper注解使用后相当于@Reponsitory加@MapperScan注解,会自动进行配置加载。
2、为让框架知道持久层接口在哪里,可以为持久层接口添加@Mapper注解,但是,这种做法就要求每个持久层接口都必须添加以上注解,可以改为在启动类的声明之前添加@MapperScan注解,以配置持久层接口所在的包。@MapperScan("com.superclovers.springboot.mapper")
1、在 resources 创建 mapper 目录,注意创建的是 Directory 类型的目录,接着创建 GoodsMapper.xml 文件 New ——> File ——> 文件名:GoodsMapper.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.superclovers.spingboot.mapper.GoodsMapper"> <!-- 获取所有商品信息列表 --> <!-- List<GoodsEntity> findList(); --> <select id="findList" resultType="com.superclovers.spingboot.entity.GoodsEntity"> select pid,pname,pprices from goods </select> </mapper>2、在 application.properties 中配置这些XML映射文件的位置
#3.Mybatis配置 #3.1配置映射类所在的包 mybatis.type-aliases-package=com.superclovers.springboot.entity #3.2mapper文件所在路径,这样写可匹配mapper目录下的所有mapper,包括其子目录下的 mybatis.mapper-locations=classpath:mapper/*.xml3、测试类中编写并执行单元测试 在test 下创建测试类
package com.superclovers.springboot.mapper; import com.superclovers.springboot.entity.GoodsEntity; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; @RunWith(SpringRunner.class) @SpringBootTest public class GoodsMapperTests { @Autowired public GoodsMapper mapper; @Test public void findList() { System.err.println(mapper); List<GoodsEntity> list = mapper.findList(); System.err.println("count=" + list.size()); for (GoodsEntity item : list) { System.out.println(item); } } }4、Run findList() 出现以下结果,查询到数据库的数据,则持久层这块内容成功。
接下来就是控制器与持久层的对接工作!!!
创建业务层接口,添加抽象方法。在 service 包创建 IGoodsService (这里类名前加大写 I 表示业务接口类)。
package com.superclovers.springboot.service; import java.util.List; import com.superclovers.springboot.entity.GoodsEntity; /** * 处理商品数据的业务层接口 */ public interface IGoodsService { /** * 获取热销商品列表 * @return 热销商品列表 */ List<GoodsEntity> getHotList(); }业务层实现类:在 service 的 impl 下创建 实现接口类 GoodsServiceImpl。
package com.superclovers.springboot.service.impl; import com.superclovers.springboot.entity.GoodsEntity; import com.superclovers.springboot.mapper.GoodsMapper; import com.superclovers.springboot.service.IGoodsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class GoodsServiceImpl implements IGoodsService { @Autowired private GoodsMapper goodsMapper; /** * 获取热销商品列表 * @return 热销商品列表 */ @Override public List<GoodsEntity> getHotList() { return goodsMapper.findList(); } }在 test 下创建 com.superclovers.springboot.service.GoodsServiceTests 测试类,编写并执行测试方法,测试业务层实现类。
package com.superclovers.springboot.service; import com.superclovers.springboot.entity.GoodsEntity; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.List; @RunWith(SpringRunner.class) @SpringBootTest public class GoodsServiceTests { @Autowired IGoodsService service; @Test public void getHotList() { List<GoodsEntity> list = service.getHotList(); System.err.println("count=" + list.size()); for (GoodsEntity item : list) { System.err.println(item); } } }创建控制类的基类
package com.superclovers.springboot.controller; /** * 控制器类的基类 */ public abstract class BaseController { /** * 表示响应成功,用户的操作是正确的 */ protected static final Integer SUCCESS = 200; }在 controller 包下创建 GoodsController 控制器类,并添加@RestController和@RequestMapping(“goods”)注解,然后在类中声明业务层对象
package com.superclovers.springboot.controller; import com.superclovers.springboot.entity.GoodsEntity; import com.superclovers.springboot.service.IGoodsService; import com.superclovers.springboot.util.ResponseResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * 处理商品相关请求的控制器类 */ @RestController @RequestMapping("goods") public class GoodsController extends BaseController { @Autowired private IGoodsService goodsService; @GetMapping("hot") public ResponseResult<List<GoodsEntity>> getHotList() { // 执行查询 List<GoodsEntity> data = goodsService.getHotList(); // 返回 return new ResponseResult<>(SUCCESS, data); } }在静态资源的文件目录 resources/static/web/ 下创建 goods.html 编码页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link type="text/css" rel="styleSheet" href="../js/bootstrap-3.4.1/css/bootstrap.css"/> <script src="../js/jquery-3.3.1.js"></script> <title></title> </head> <body> <div style="width: 1000px; border: 1px groove solid; margin: 0 auto; margin-top: 120px;"> <table class="table table-hover"> <thead> <tr style="font-size: 20px; font-weight: bold; text-align: center;"> <td>编 号</td> <td>名 称</td> <td>单 价</td> </tr> </thead> <tbody id="goods" style="text-align: center;"> <tr style="font-size: 15px;"> <td>23</td> <td>23</td> <td>23</td> </tr> </tbody> </table> </div> <script type="text/javascript"> $(document).ready(function () { showGoodList(); }) function showGoodList() { $.ajax({ "url": "/springboot/hot", "type": "get", "dataType": "json", "success": function (json) { var list = json.data; $("#goods").empty(); for (var i = 0; i < list.length; i++) { var html = '<tr>' + '<td>#{pid}</td>' + '<td>#{pname}</td>' + '<td>#{pprices}¥</td>' + '</tr>'; html = html.replace(/#{pid}/g, list[i].pid); html = html.replace(/#{pname}/g, list[i].pname); html = html.replace(/#{pprices}/g, list[i].pprices); $("#goods").append(html); } } }) } </script> </body> </html>记得引入 bootstrap 框架和 jQuery 脚本 最后打开浏览器输入 http://localhost:8080/springboot/goods.html 页面数据显示,完成前后端的交互。
源码地址:GitHub:https://github.com/Xiaosen0v0/-spingboot.git Git码云:https://gitee.com/Xiaosen2477/spingboot
数据库文件:https://pan.baidu.com/s/1skFuRvjbEgBcQjhwZKu2Iw 密码:73hm
后续的内容请耐心等等,马上就来!写作不易请点赞加收藏+关注,谢谢!
转载请注明出处:https://blog.csdn.net/qq_41254299 本文出自【Superclover_的博客】