springboot,简要记录,方便复习,
boot 笔记
第一步新建工程,导包,由于boot的数据库框架是用mybtis -paus,所以关于数据库系统那儿不用色选mybatis ,需要重新maven导包
完整导包以下人容:
View Code
View Code
View Code
View Code
View Code
第一步新建工程,导包,由于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);
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)