首页 > 其他分享 >Springboot-2

Springboot-2

时间:2023-04-15 10:58:37浏览次数:46  
标签:Springboot -- System student println page out

1. springboot自动装配原理

1.1 springboot包扫描原理

包建议放在主类所在包或者子包。默认包扫描的是主类所在的包以及子包。
主函数运行时会加载使用@SpringBootApplication标记的类,-->包含
@SpringBootApplication-->@EnableAutoConfiguration-->@AutoConfigurationPackage-->@Import({Registrar.class})-->registerBeanDefinitions
@SpringBootApplication-->@EnableAutoConfiguration都是复合注解
@EnableAutoConfiguration//开启了自动配置功能
@Import({Registrar.class}),这个注解引入了Registrar类
Registrar类可以获取扫描的包名。
如果需要人为修改扫描包的名称则需要在主类上@ComponentScan(basepackage={"包名"})

1.2 springboot自动装配原理

自己使用DispatcherServlet了吗?. 为什么DispatcherServlet能用。???
主函数运行时会加载使用@SpringBootApplication标记的类,-->包含
@SpringBootApplication-->@EnableAutoConfiguration-->@Import()导入AutoConfigurationImportSelector类
AutoConfigurationImportSelector类。 该类会加载很多自动装配类,而这些自动装配类完成相应的自动装配原理

2. springboot整合mybatis-plus

2.1 mybatis-plus概述

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

不能替代mybatis ,以后对于单表操作的所有功能,都可以使用mp完成。但是链表操作的功能还得要校验mybatis.

2.2 如何使用mp

(1)创建表并加入数据

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'aa', 11, '[email protected]'),
(2, 'ab', 12, '[email protected]'),
(3, 'ac', 13, '[email protected]'),
(4, 'ad', 14, '[email protected]'),
(5, 'ae', 15, '[email protected]');

(2)创建一个springboot工程并引入相关的依赖

<?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.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ykq</groupId>
    <artifactId>qy163-springboot03</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>qy163-springboot03</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </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>
            </plugin>
        </plugins>
    </build>

</project>

(3)配置数据源

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql:///test1

(4)创建实体类

@Data
@NoArgsConstructor//无参
@AllArgsConstructor//有参
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

(5)创建一个dao接口继承BaseMapper

public interface UserMapper extends BaseMapper<Student> {
}

(6)为接口生成代理实现类

@SpringBootApplication//@SpringBootApplication注解一般放在项目的一个启动类上,
用来把启动类注入到容器中,用来定义容器扫描的范围,用来加载classpath环境中一些bean.
@MapperScan(basePackages = "com.zjy.dao")//扫描
public class Qy163Springboot03Application {
    public static void main(String[] args) {
        SpringApplication.run(Qy163Springboot03Application.class, args);
    }

}

(7)测试

2.3 使用mp完成CRUD

@SpringBootTest
class Springboot2ApplicationTests {
    @Resource
    private Mapper mapper;

    @Test
    void findAll() {
        student student = mapper.selectById(1);//根据主键查询id
        System.out.println(student);
    }
    @Test
    public void deleteById(){
        List<Integer> is=new ArrayList<>();
        is.add(2);
        is.add(3);
        is.add(5);
        is.add(6);
        int i = Mapper.deleteBatchIds(is);
        System.out.println(i);
    }

    //默认主键的生成策略:雪花算法-唯一id值。
    //使用递增 如果想使用递增策略:必须保证表中的id递增,而且需要在@TableId(type=IdType.AUTO)
      实体类id上面加@TableId(type=IdType.AUTO)
    @Test
    void insert(){
        student student = new student("ay",new Date(),20);
        System.out.println(mapper.insert(student));
    }
    @Test
    void update(){
        student student = new student();
        student.setSmpno(0);
        student.setSname("atm");
        student.setSdate(new Date());
        student.setSno(20);
        System.out.println(mapper.updateById(student));
    }

2.4 使用mp完成条件查询

 @Test
    void testFind() {
        QueryWrapper<student> o = new QueryWrapper<>();
        o.likeRight("sname", "D");
        o.between("sno",20,40);
        List<student> students1 = mapper.selectList(o);
        students1.forEach(System.out::println);
    }

    //分页需求--PageHelper---默认mp分页需要加分页拦截器
   @Test
    void Page(){
    Page<student> page = new Page<>(1,3);
    mapper.selectPage(page,null);
    System.out.println("当前页的记录"+page.getRecords());
    System.out.println("获取总页数"+page.getPages());
    System.out.println("获取总条数"+page.getTotal());
}

2.5 联表使用mp的分页对象

 @Test
    void findPage2(){
        Page<student> page = new Page<>(1,3);
        mapper.all(page, null);
        System.out.println("当前页的记录"+page.getRecords());//获取当页的记录
        System.out.println("获取总页数"+page.getPages());//获取当页的记录
        System.out.println("获取总条数"+page.getTotal());//获取当页的记录
    }

标签:Springboot,--,System,student,println,page,out
From: https://www.cnblogs.com/zjy135790/p/17320563.html

相关文章

  • springboot连接不同数据库的写法
    MySQL当url连接不指定/数据库名可以访问到mysql服务器上有权限的任何库,但是所有sql需要加上库名前缀.pom<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>配置spring:datasource:driver-class-n......
  • SpringBoot 集成 MybatisPlus 九——逻辑删除
    1逻辑删除的概念逻辑删除不会在数据库中删除数据,只是通过一个字段用来标识被删除的记录,数据仍然保存在数据库中。在实际的工作当中,因为数据非常重要,为了防止因用户误操作删除数据后无法恢复的问题,我们通常不会对数据做物理删除,即将数据从数据库中直接删除。而是多采用逻辑删除的方......
  • SpringBoot常用注解
    本文整理了SpringBoot常用注解,主要讲解这些注解的用法,并附上一致思维导图。SpringBoot常用注解组件相关注解@Controller用于修饰MVC中controller层的组件,SpringBoot中的组件扫描功能会识别到该注解,并为修饰的类实例化对象,通常与@RequestMapping联用,当SpringMVC获取到请求时......
  • SpringBoot 整合 MongoDB
    SpringBoot整合MongoDB好久没搞SpringBoot相关的东西勒,但最近看的代码涉及到了这部分,虽然之前没做过也能看懂,但还是从基础开始搞起比较好。准备工作SpringBoot项目创建这个本来都不用说的,SpringBoot创建项目还能不会啊,但因为某些限制,现在用不了专业版IDEA,只能用社区版,......
  • springboot打成jar包resources下文件的获取
    importorg.apache.poi.util.IOUtils;importorg.springframework.boot.system.ApplicationHome;importorg.springframework.core.io.ClassPathResource;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream......
  • Springboot集成MongoDB存储文件、读取文件
    一、前言和开发环境及配置可以转载,但请注明出处。  之前自己写的SpringBoot整合MongoDB的聚合查询操作,感兴趣的可以点击查阅。https://www.cnblogs.com/zaoyu/p/springboot-mongodb.html 使用mongodb存储文件并实现读取,通过springboot集成mongodb操作。 可以有两种实现......
  • springboot-web-mybatis
    Restful开发规范Restful是网络应用接口程序的接口设计风格,基于HTTP协议GET:查询POST:新增PUT:修改DELETE:删除Restful是一种风格,可以不遵守如何为请求参数设置默认值可以在Service层判断是否为null,如果为true则给它赋值默认值可以在Controller层参数列表添加@RequstPa......
  • Java SpringBoot 中,动态执行 bean 对象中的方法
    根据不同的条件,调用不同的bean对象,执行对象中的方法SpringUtils工具类packagecom.vipsoft.web.utils;importcn.hutool.core.util.ArrayUtil;importorg.springframework.aop.framework.AopContext;importorg.springframework.beans.BeansException;importorg.sprin......
  • SpringBoot 集成 MybatisPlus 八——插件
    1Mybatis插件机制Mybatis插件是对Executor、StatementHandler、ParameterHandler、ResultSetHandler这四个接口上的方法进行拦截,利用JDK动态代理机制,为这些接口的实现类创建代理对象,在执行方法时,先去执行代理对象的方法,从而执行自己编写的拦截逻辑。ExecutorMyBatis的内部执行器......
  • java 处理常量字符串过长 & springboot 项目读取 resouces 文件夹下的文件内容
    长字符串起因项目里面有一长串的加密字符串(最长的万多个字符),需要拼接作为参数发送给第三方。如果我们使用枚举定义的话,idea编译的时候就会出现编译报错Error:java:常量字符串过长解决想法网上还有一个说法,说是编译器问题,修改idea工具的编译为eclipse即可......