springboot,简要记录,方便复习,
boot 笔记
第一步新建工程,导包,由于boot的数据库框架是用mybtis -paus,所以关于数据库系统那儿不用色选mybatis ,需要重新maven导包
完整导包以下人容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.3</version>
</parent>
<groupId>com.example</groupId>
<artifactId>demo_boot</artifactId> <properties>
<version>0.0.1-SNAPSHOT</version>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.11</version>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.5.RELEASE</version>
</plugin>
</plugins>
</build> </project>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.11</version>
</dependency>
//下面那个组件目的是完成实体不需要set get,只需要加一个注解@data
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
第二步配,配置服务器端口,数据库 配置mybatis 的id 自增算法,还要配置日志系统不要显示全部信息,
server:
port: 80
//配置数据库地址
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/xsytest
username: root
password: 142857
//配置表前缀
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_
//以下配配置id的自增算法
id-type: auto
//配置日志系统的显示内容。
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
第三步,编写dao数据库层,这儿只要写接口就好,先编写一个实体类,比如关于图书的表,就需要新建一个给数据库表相同字段的实体类,
import lombok.Data;
import lombok.Getter;
//使用lombok 就可以不在set get 设置了
@Data
public class Book {
private Integer id;
private String type;
private String name;
}
传统配置方法一个方法对应一个sql查询语句;
@Mapper
public interface bookDao {
@Select("select * from tbl_book where id = #{id}")
Book getById(Integer id);
.........................................
传统定法太费时,mybatis-paus 为我们写好了全部方法,可能继承一个方法
@Mapper
public interface bookDao extends BaseMapper<Book> {}
这样常见的增删改方法就不用写了,可以在service层调用大部份数据库相关操作的方法.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=
关于service,层取名一定要给业务相关,先定义接口,然后新建impl包,实现方法类:
举例如下:
import java.util.List;
public interface BookService {
boolean save(Book book);
boolean update(Book book);
boolean delete(Integer id);
Book getById(Integer id);
List<Book> getAll();
IPage<Book> getByPage(int currentPage, int pageSize);
}
++++++++++++++++++然后实现类实现上面方法:++++++++++++++++++++++++++++++++++++++++++++++++
import java.util.List;
@Service
public class BookServiceimpl2 implements BookService {
@Autowired
private bookDao bookDao;
@Override
// 业务层都是逻辑规则,所以用返回布尔来判断
public boolean save(Book book) {
return bookDao.insert(book) > 0;
}
@Override
public boolean update(Book book) {
return bookDao.updateById(book) >0;
}
@Override
public boolean delete(Integer id) {
return bookDao.deleteById(id) > 0;
}
@Override
public Book getById(Integer id) {
return bookDao.selectById(id);
}
@Override
public List<Book> getAll() {
return bookDao.selectList(null);
}
@Override
public IPage<Book> getByPage(int currentPage, int pageSize) {
IPage page = new Page(currentPage,pageSize);
bookDao.selectPage(page,null);
return page;
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
由于都是操作增改,mybatis 帮我们也提供了更多方法,就边业务层都是可以不写的,但是很多方法不能解决实际场景时,可以重新写,但尽量不要改写框架也有的
以下是示例,
第一步定义业务层接口

public interface IBookService extends IService<Book> {
boolean saveBook(Book book);
boolean modify(Book book);
boolean delect(Integer id);
//Book select(Integer id);
IPage<Book> getPage(int currentpage, int pagesize) ;
}
第二步实现具体业务层

@Service
public class IbookServiceimpl extends ServiceImpl<bookDao, Book> implements IBookService { @Autowired
private bookDao bookDao; @Override
public boolean saveBook(Book book) {
return bookDao.insert(book) > 0;
} @Override
public boolean modify(Book book) {
return bookDao.updateById(book) >0;
} @Override
public boolean delect(Integer id) {
return bookDao.deleteById(id) > 0;
} @Override
public IPage<Book> getPage(int currentpage, int pagesize) {
// Page page = new Page(currentpage, pagesize);
// bookDao.selectPage(page, null);
// return page; IPage page = new Page(currentpage,pagesize);
bookDao.selectPage(page,null);
return page;
} //
// @Override
// public Book select(Integer id) {
// return bookDao.selectById(id);
//
// }
}
mybatis-paus 自动构建的业务层方法操作数据库方法与dao 有点出入
到此为止,整个底层,业务层建 那了可以编写测试类,测试类的目录要和开发的目录一样
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
dao测试文件

@SpringBootTest
public class bookDaotext { @Autowired
private bookDao bookDao; @Test
void testGetById(){
// System.out.println(bookDao.selectById(3));
// System.out.println(bookDao.selectList(null));
} @Test
void testGetPage(){
IPage page = new Page(1,6);
bookDao.selectPage(page, null);
// 通过以下的方法可以获取当前页,共几页等前端需要的数据
System.out.println(page.getCurrent());
System.out.println(page.getSize());
System.out.println(page.getTotal());
System.out.println(page.getPages());
System.out.println(page.getRecords());
} @Test
// 按条析查询
void testGetBy(){
QueryWrapper<Book> qw = new QueryWrapper<>();
// qw.eq,qw.??所有条件方法都在qw上
qw.like("name", "rrrr");
bookDao.selectList(qw);
}
//条件查询方法中强制指定参数的方法
void testGetBy2(){
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
String name = "Spring";
// 为了防止参数为空,方法一
// if(name != null ) lqw.like(Book::getName,name);
// 方法二
lqw.like(name !=null,Book::getName,name);
bookDao.selectList(lqw); }
业务层测试文件

@SpringBootTest
public class BookServiceTest {
@Autowired
private BookService bookService; @Test
void testGetById(){
System.out.println( "运行结果为"+bookService.getById(4));
} // 测保存方法
@Test
void testSave(){
Book book = new Book();
book.setName("黄金枝");
book.setType("name_vv");
bookService.save(book);
} @Test
void testUpdate(){
Book book = new Book();
book.setId(16);
book.setName("kk151515");
book.setType("u151515");
bookService.update(book); }
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
然后编写控制层。
import java.util.List;
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private IBookService bookService;
@GetMapping
public List<Book> getAll(){
return bookService.list();
}
@PostMapping
public Boolean save(@RequestBody Book book){
return bookService.save(book);
}
@PutMapping
public Boolean update(@RequestBody Book book){
return bookService.modify(book);
}
@DeleteMapping("{id}")
public boolean delect(@PathVariable Integer id){
return bookService.delect(id);
}
@GetMapping("{id}")
public Book getById(@PathVariable Integer id){
return bookService.getById(id);
}
@GetMapping("/{currentpage}/{pagesize}")
public IPage<Book> getPage(@PathVariable int currentpage,@PathVariable int pagesize){
return bookService.getPage(currentpage, pagesize);
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
由于前端交互数据需要统一数据,这儿需要专门定义一个类用来返回数据,将数据封装后返回:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@Data
public class R {
private Boolean flag;
private Object data;
public R(){}
public R(Boolean flag){
this.flag = flag;
}
public R(Boolean flag, Object data){
this.flag = flag;
this.data = data;
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private IBookService bookService;
@GetMapping
public R getAll(){
return new R(true,bookService.list());
// return bookService.list();
}
@PostMapping
public R save(@RequestBody Book book){
return new R(bookService.save(book));
}
@PutMapping
public R update(@RequestBody Book book){
return new R(bookService.modify(book));
}
@DeleteMapping("{id}")
public R delect(@PathVariable Integer id){
return new R(bookService.delect(id));
// return bookService.delect(id);
}
@GetMapping("{id}")
public R getById(@PathVariable Integer id){
return new R(true, bookService.getById(id));
// return bookService.getById(id);
}
@GetMapping("/{currentpage}/{pagesize}")
public R getPage(@PathVariable int currentpage,@PathVariable int pagesize){
return new R(true, bookService.getPage(currentpage, pagesize));
// return bookService.getPage(currentpage, pagesize);
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
springboot,简要记录,方便复习,的更多相关文章
- Springboot学习记录1--概念介绍以及环境搭建
摘要:springboot学习记录,环境搭建: 官方文档地址:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/ht ...
- 【原】【BG】-一次虚拟化环境实践简要记录
部分涉及到Linux.Nginx.tomcat.MySQL等的点滴操作记录,时间长了,就忘掉了,偶尔整理一下操作的history,就此简要备份一下: [原][BG]-一次虚拟化环境实践简要记录: ht ...
- pt-align的用法简要记录
pt-align的用法简要记录 1.pt-align 功能:将其它工具的输出按列对齐用法:pt-align [FILES]如果没有指定文件,则默认读取标准输入的内容. 2.例如: [root@dbte ...
- SpringBoot学习记录(二)
一. SpringBoot日志框架 SpringBoot:底层是Spring框架,Spring框架默认是用JCL(commons-logging): SpringBoot选用SLF4j和logback ...
- 使用SpringBoot AOP 记录操作日志、异常日志
平时我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能:我们在操作某些功能时也有可能会发生异常,但是每次发生异常要定位原因我们都要到服务器去查询日志才能找到,而且也不能对发 ...
- log4j配置文件简要记录
和大多数配置文件一样,log4j配置文件也有key-value形式和xml形式.这里主要记录一下key-value的形式 我们通过配置,可以创建出Log4j的运行环境.Log4j由三个重要的组件构成: ...
- 一次linux问题分析原因的简要记录
1. 这边功能测试 一个linux服务器 4c 16g的内存 发现总是出现异常. dotnet run 起来的一个 程序 总是会被killed 现象为: 2. 一开始怀疑是 打开的文件描述符过多 引起 ...
- SpringBoot 常见问题记录
问题一 Error starting ApplicationContext. To display the auto-configuration report re-run your applicat ...
- /proc/xxx/maps简要记录
定位内存泄漏基本上是从宏观到微观,进而定位到代码位置. 从/proc/meminfo可以看到整个系统内存消耗情况,使用top可以看到每个进程的VIRT(虚拟内存)和RES(实际占用内存),基本上就可以 ...
- SpringBoot学习记录(一)
一.SpringBoot入门 1.SpringBoot简介 简化Spring应用开发的一个框架:整个Spring技术栈的一个大整合:J2EE开发的一站式解决方案: SpringBoot的优点: (1) ...
随机推荐
- 3.1 C++ STL 双向队列容器
双向队列容器(Deque)是C++ STL中的一种数据结构,是一种双端队列,允许在容器的两端进行快速插入和删除操作,可以看作是一种动态数组的扩展,支持随机访问,同时提供了高效的在队列头尾插入和删除元素 ...
- C/C++ Qt 命令行版网络通信
通常情况下Qt如果需要建立网络通信则必须依附于图形界面,但如果是新手入门,图形界面则显得太过于繁琐不利于学习原理,如下本人实现了命令行版本的网络通信案例,能够让读者更好的理解Qt是如何创建网络通信套接 ...
- 从嘉手札<2023-12-09>
大雪时节 有种风雪欲来的静谧 如同飘摇的浮舟 人们常说上岸 可对于常年生活在水里的鱼儿来说 哪里是岸边呢 我不知道未来 但唯一可以确定的是 无论你过的怎么样 你都需要给自己一个交待 哪怕风雪兼程 哪怕 ...
- 希捷推出IronWolf Pro 24TB硬盘:CMR构建、285MB/s传输速率
希捷推出了全新IronWolf Pro 24TB硬盘,采用3.5寸规格,满足中小企业和NAS环境需求. 据了解,新款硬盘采用了希捷AgileArray技术,针对NAS系统进行了优化.其通过双平面平衡和 ...
- RabbitMQ基础学习Full版
RabbitMQ 消息队列在软件中的应用场景 异步处理上(优于原先的方式) 为什么优于呢? 首先,通常情况下,如上图我们其实不用消息队列的情况下,其实也可以不用100ms,不用allof即可 那么优势 ...
- Linux-ln命令创建链接(软连接/硬链接)
1.ln命令介绍 ln命令可以看作是 link 的缩写,其功能是创建文件间的链接,链接类型包括硬链接(hard link)和软链接(符号链接,symbolic link) 2.ln命令格式 ln 命令 ...
- Python Split 函数用法
一.split函数简介Python中split()函数,具体作用如下: 拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list):二.语法split() 方法语法: str.s ...
- 【leetcode】如何实现 regex 正则表达式引擎
题目 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字 ...
- 【Unity3D】场景切换、全屏_恢复切换、退出游戏、截屏
1 前言 1)场景切换 场景切换可以使用 SceneManager 的 LoadScene 和 LoadSceneAsync 方法,如下: public static void LoadSce ...
- 如何查看当前Ubuntu系统的版本-【转 https://www.cnblogs.com/chenxiaomeng/p/10038492.html】
如何查看当前Ubuntu系统的版本 一.系统位数 在控制台输入:sudo uname --m 如果显示i686,则表示安装了32位操作系统 如果显示 x86_64,则表示安装了64位操作系统 sudo ...