当前位置:   article > 正文

springboot中数据层标准开发(增删改查等数据操作)_spring数据层编写

spring数据层编写

第一步:模块创建

创建springboot项目,勾选spring Web模板+MySQL Driver驱动

②在pom.xml文件中手动添加MyBatis-Plus 、Druid  (插件的左边可以去官网查询)、lombok(具体左右在下文会介绍)

  1. <!-- 手动添加mybatis-plus-->
  2. <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
  3. <dependency>
  4. <groupId>com.baomidou</groupId>
  5. <artifactId>mybatis-plus-boot-starter</artifactId>
  6. <version>3.5.1</version>
  7. </dependency>
  8. <!--手动添加德鲁伊-->
  9. <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
  10. <dependency>
  11. <groupId>com.alibaba</groupId>
  12. <artifactId>druid-spring-boot-starter</artifactId>
  13. <version>1.2.8</version>
  14. </dependency>
  15. <!--手动加入Lombook-->
  16. <dependency>
  17. <groupId>org.projectlombok</groupId>
  18. <artifactId>lombok</artifactId>
  19. </dependency>

③将application.properties文件修改为 application.yml文件

第二步:书写代码

   ①application.yml配置文件:

  1. #第二种方法:Druid专用配置 推荐
  2. spring:
  3. datasource:
  4. druid:
  5. driver-class-name: com.mysql.cj.jdbc.Driver
  6. url: jdbc:mysql://localhost:3306/user_db?serverTimezone=GMT
  7. username: root
  8. password: admin
  9. #开启MP运行日志
  10. mybatis-plus:
  11. configuration:
  12. # 标准输出 打印到控制台上 以后我们就不用sout输出了, 这个东西会帮我们输出
  13. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

②实体类:

    其中@Data的注释来源于lombok,一个java的类库,提供了一组注解,简化了POJO实体类开发

    但是需要在配置文件中导入坐标

  1. import com.baomidou.mybatisplus.annotation.IdType;
  2. import com.baomidou.mybatisplus.annotation.TableField;
  3. import com.baomidou.mybatisplus.annotation.TableId;
  4. import com.baomidou.mybatisplus.annotation.TableName;
  5. import lombok.*;
  6. //@Getter所有的get方法
  7. //@Setter所有的set方法
  8. //@NoArgsConstructor 无参构造
  9. //@AllArgsConstructor//全部的构造
  10. @Data //get+set+toString+hashcode+equals 但是没有构造方法
  11. @TableName(value = "t_book")
  12. public class Book {
  13. // 这里的属性名 要和数据库表中的属性名一致,要不然最终的查询结果是null
  14. // 将数据库中的结果对此变量名进行注入
  15. @TableId(value="id",type = IdType.AUTO) //代表自增算法
  16. @TableField(value = "id")
  17. private int id;
  18. @TableField(value = "bookName")
  19. private String bookName;
  20. @TableField(value = "statue")
  21. private String statue;
  22. }

③数据库SQL映射需添加@Mapper被容器识别

    定义数据层接口与映射配置

  1. @Mapper
  2. public interface BookDao extends BaseMapper<Book> {//指定泛型才能知道操作谁
  3. }

④定义拦截器  (在下文的代码中会使用到),可以在一个类中加入多个拦截器,我们这里加入的是分页的拦截器,只有加入分页的拦截器之后,我们的分页才能最终成功

  1. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  2. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. //拦截器
  6. @Configuration //第一步:配置类 交给Spring管理 确保在启动类的包或子包下,才能被扫描到
  7. public class NPCConfig {
  8. // 第二步:做对应Bean
  9. @Bean
  10. public MybatisPlusInterceptor mybatisPlusInterceptor(){
  11. // 第三步:创建拦截器(这只是一个壳子)
  12. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  13. // 第四步:添加内部拦截器 (分页的)
  14. interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
  15. // 可以添加多个内部拦截器
  16. return interceptor;
  17. }
  18. }

⑤测试代码:

  1. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.company.dao.BookDao;
  6. import com.company.domain.Book;
  7. import org.junit.jupiter.api.Test;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.boot.test.context.SpringBootTest;
  10. import javax.management.Query;
  11. @SpringBootTest
  12. class Springboot08SsmpApplicationTests {
  13. @Autowired
  14. private BookDao bookDao;
  15. @Test
  16. void contextLoads() {
  17. // System.out.println(bookDao.selectById(10086));
  18. bookDao.selectById(10086);//这个能在控制台输出是因为我们开启了MP运行日志
  19. }
  20. @Test
  21. void testSave(){
  22. Book book = new Book();
  23. // 这里采用的是主键自增,我们不用手动给主键赋值(数据库默认的是雪花算法)
  24. // book.setId(10092);
  25. book.setBookName("信息技术");
  26. book.setStatue("优秀");
  27. bookDao.insert(book);
  28. }
  29. @Test
  30. void testUpdate(){
  31. Book book = new Book();
  32. book.setId(10086);
  33. book.setBookName("zhanghangzhang");
  34. bookDao.updateById(book);
  35. }
  36. @Test
  37. void testDelete(){
  38. bookDao.deleteById(10093);//通过id删除
  39. }
  40. @Test
  41. void testGetAll(){
  42. System.out.println( bookDao.selectList(null)); //给null查全部
  43. }
  44. @Test //分页 单纯运行这个是不行的,需要写一个配置类(拦截器)
  45. void testGetPage(){
  46. // 接口不能new 只能new实现类
  47. IPage page = new Page(1,5); //获取第一页的数据,显示五条
  48. // IPage对象中封装了分页操作中的所有数据:
  49. // 数据/当前页码值/每页数据总量/最大页码值/数据总量
  50. // IPage page = new Page(2,5); 获取第二页的数据,显示五条
  51. bookDao.selectPage(page,null);
  52. }
  53. @Test //按条件查询
  54. void testGetBy(){
  55. QueryWrapper<Book> qw = new QueryWrapper<>();//如果不传泛型,它会自己从查询的那个地方取
  56. qw.like("bookName","zhang"); //模糊查询 对bookName进行模糊查询 %zhang%
  57. bookDao.selectList(qw);
  58. }
  59. @Test
  60. void testGetBy2(){
  61. String val="zhangzhang";
  62. //上面testGetBy()方法中,查询的字段名很容易写错,但是我们采用lambda表达式之后,如果写错了就会报错(有语法检查)
  63. LambdaQueryWrapper<Book> qw = new LambdaQueryWrapper<>();
  64. qw.like(val!=null,Book::getBookName,val); //我们要判定val不是空,才能进行查询,要不回来查询的结果和我们要的结果不一致
  65. // 在like方法中就可以判断,加个参数 val!=null 就不用写if了
  66. bookDao.selectList(qw);
  67. }
  68. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/243445
推荐阅读
相关标签
  

闽ICP备14008679号