当前位置: 首页 > news >正文

SSMP综合案例

案例实现方案分析

实体类开发————使用Lombok快速制作实体类

Dao开发————整合MyBatisPlus,制作数据层测试类

Service开发————基于MyBatisPlus进行增量开发,制作业务层测试类

Controller开发————基于Restful开发,使用PostMan测试接口功能

Controller开发————前后端开发协议制作

页面开发————基于VUE+ElementUI制作,前后端联调,页面数据处理,页面消息处理

列表、新增、修改、删除、分页、查询

项目异常处理

按条件查询————页面功能调整、Controller修正功能、Service修正功能

1.模块创建

  1. 勾选SpringMVC与MySQL坐标

  1. 修改配置文件为yml格式

  1. 设置端口为80方便访问

2.实体类开发

Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency

lombok版本由SpringBoot提供,无需指定版本

常用注解:@Data

@Data
public class Book {
private Integer id;
private String type;
private String name;
private String description;
}

为当前实体类在编译期设置对应的get/set方法,toString方法,hashCode方法,equals方法等

3.数据层面开发

使用技术:MyBatis-plus+Druid

1.导入相对应的MyBatisPlus与Druid对应的starter

<!--mybatis-plus-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version>
</dependency>
<!--druid连接池-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.16</version>
</dependency>

2.配置数据源与MyBatisPlus对应的基础配置(id生成策略使用数据库自增策略)

#配置端口号
server:port: 80
#配置数据源druid
spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=trueusername: rootpassword: 123456
#mp的配置
mybatis-plus:global-config:db-config:table-prefix: tbl_#数据库id的自增策略id-type: auto#配置日志configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

继承BaseMapper并指定泛型

@Mapper
public interface BookDao extends BaseMapper<Book> {
​
}

制作测试

@SpringBootTest
public class BookTest {@Autowiredprivate BookDao bookDao;
​@Testpublic void testById(){Book byId = bookDao.selectById(2);System.out.println(byId);}
​@Testpublic void testSave(){Book book=new Book();book.setName("明朝那些事");book.setType("有关历史");book.setDescription("nib");bookDao.insert(book);
​}
​@Testpublic void testDelete(){bookDao.deleteById(15);}
​@Testpublic void testUpdata(){Book book=new Book();book.setId(16);book.setName("明朝那些事");book.setType("有关历史");book.setDescription("nibglss");bookDao.updateById(book);}
​@Testpublic void testGetAll(){System.out.println( bookDao.selectList(null));}
​@Testpublic void testGetPage(){//需要拦截器追加sql分页的sql语句/** 参数1:当前是第几页* 参数2:每页显示的数据条数* */IPage page=new Page(2,5);bookDao.selectPage(page,null);System.out.println(page.getCurrent());System.out.println(page.getPages());System.out.println(page.getSize());System.out.println(page.getRecords());System.out.println(page.getTotal());}//按条件查询@Testpublic void testGetByCondition1(){
​QueryWrapper<Book> queryWrapper=new QueryWrapper<Book>();queryWrapper.like("name","spring");//select*from tbl_book where name like%spring%System.out.println( bookDao.selectList(queryWrapper));
​}
//使用QueryWrapper对象封装查询条件,推荐使用LambdaQueryWrapper对象,所有查询操作封装成方法调用,支持动态拼写查询条件@Testpublic void testGetByCondition2(){String name="Spring";LambdaQueryWrapper<Book> queryWrapper=new LambdaQueryWrapper<Book>();//select*from tbl_book where name like%spring%queryWrapper.like(name!=null,Book::getName,name);//select*from tbl_book where name like%spring%System.out.println( bookDao.selectList(queryWrapper));
​}
​
​
}

分页操作是在MyBatisPlus的常规操作基础上增强得到,内部是动态的拼写SQL语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现

@Configuration//用于指定该类是spring配置类,创建容器时会从该类加载注解
public class MPConfig {@Bean//标注该方法的返回值会存储到Spring容器中public MybatisPlusInterceptor mybatisPlusInterceptor(){//拦截器的外壳MybatisPlusInterceptor mybatisPlusInterceptor=new MybatisPlusInterceptor();
//        用什么拦截器,加载什么拦截器mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mybatisPlusInterceptor;}
}

4.业务开发层

定义接口

public interface BookService {boolean save(Book book);boolean delete(Integer id);boolean update(Book book);Book getById(Integer id);List<Book> getAll();IPage<Book> getByPage(int currentPage,int pageSize);
}

实现层定义

@Service
public class BookServiceImpl implements BookService {@Autowiredprivate BookDao bookDao;public Boolean save(Book book) {return bookDao.insert(book) > 0;}public Boolean delete(Integer id) {return bookDao.deleteById(id) > 0;}public Boolean update(Book book) {return bookDao.updateById(book) > 0;}
}

测试类定义

@SpringBootTest
public class BookServiceTest {@Autowiredprivate BookService bookService;@Testvoid testGetById(){bookService.getById(9);}@Testvoid testGetAll(){bookService.getAll();}@Testvoid testGetByPage(){bookService.getByPage(1,5);}
​
}

5.业务层———快速开发

使用MyBatisPlus提供有业务层通用接口(ISerivce<T>)与业务层通用实现(ServiceImpl<M,T>)在通用类基础上做功能重载或功能追加 注意重载时不要覆盖原始操作,避免原始提供的功能丢失

@Service
public class IBookServiceImpl extends ServiceImpl<BookDao,Book> implements IBookService {
​
}

测试

@SpringBootTest
public class BookServiceTest2 {@Autowiredprivate IBookServiceImpl bookService;@Testpublic void getById(){System.out.println( bookService.getById(1));}@Testpublic void selectAll(){System.out.println(bookService.list());}@Testpublic void delete(){bookService.removeById(16);}@Testpublic void testSave(){Book book=new Book();book.setName("大名王朝");book.setType("有关历史");book.setDescription("nib");bookService.save(book);
​}@Testpublic void testUpdata(){Book book=new Book();book.setId(14);book.setName("明朝那些事");book.setType("有关历史");book.setDescription("nibglss");bookService.updateById(book);}@Testpublic void testGetByPage(){IPage<Book> page = new Page<Book>(1,5);IPage<Book> byPage = bookService.page(page);List<Book> records = byPage.getRecords();System.out.println(records);}}

总结:

  1. 使用通用接口(ISerivce<T>)快速开发Service

  1. 使用通用实现类(ServiceImpl<M,T>)快速开发ServiceImpl

  1. 可以在通用接口基础上做功能重载或功能追加

  1. 注意重载时不要覆盖原始操作,避免原始提供的功能丢失

http://www.lryc.cn/news/45066.html

相关文章:

  • 让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)
  • axios请求拦截器
  • 四个常见的Linux技术面问题
  • 有什么适合程序员查资料的网站
  • (七)手把手带你搭建精美简洁的个人时间管理网站—实现登录与注册的前端代码【源码】
  • Day933.如何将设计最终落地到代码 -系统重构实战
  • 209. 长度最小的子数组
  • 【数据结构与算法】查找(Search)【详解】
  • 一文学会 Spring MVC 表单标签
  • 如何在 Windows10 下运行 Tensorflow 的目标检测?
  • 【jvm系列-04】精通运行时数据区共享区域---堆
  • ctfshow愚人杯 re easy_pyc wp
  • Ubuntu18.04 系统中本地代码上传至Gitlab库
  • Leetcode.1665 完成所有任务的最少初始能量
  • 【C++笔试强训】第一天
  • 【网络安全软件】上海道宁与Cybereason为您提供未雨绸缪的攻击保护,终结对端点、整个企业以及网络上任何角落的网络攻击
  • 基于RK3568的Android11 适配 MIPI 屏幕
  • Ubuntu安装python
  • django 运用pycharm的各种故障汇总(1)
  • 【设计模式】单例模式Singleton(Java)
  • 机器学习中的公平性
  • Docker镜像之Docker Compose讲解
  • 蓝桥杯30天真题冲刺|题解报告|第三十天
  • 配置 Git Husky 代码提交约束
  • IntelliJ IDEA 2023.1 最新变化
  • stm32学习笔记-9 USART串口
  • 【蓝桥杯】每日四道编程题(两道真题+两道模拟)| 第四天
  • 大家有没有时候觉得,递归,分治,回溯,傻傻分不清楚?
  • Java 8 - Lambda 表达式
  • 【Ruby学习笔记】4.Ruby 类和对象及类案例