首页 > 其他分享 >学习04

学习04

时间:2023-04-16 12:55:15浏览次数:35  
标签:04 System 学习 user println 注解 com out

1. 回顾

1. springboot概述: 简化spring工程的搭建。
2. springboot配置文件: (1)properties (2)yml 语法格式
3. java代码如何获取配置文件中的内容。
   [1]类上加个注解@ConfigurationProperties(prefix="")
   [2]在属性上@Value("${key}")----只能读取基本和字符串。

4. springboot整合mybatis持久化框架。
   [1]引入starter启动依赖 
   [2]修改配置文件---数据源的信息  映射文件的路径
   [3]dao接口---@Mapper或者@MapperScanner(basepackages="")   

2. 正文

1. springboot自动装配原理---
2. springboot整合mbatis-plus
3. springboot整合swagger2
4. springboot整合定时器

3. springboot自动装配原理

3.1 springboot包扫描原理

包建议大家放在主类所在包或者子包。默认包扫描的是主类所在的包以及子包。

主函数在运行时会加载一个使用@SpringBootApplication标记的类。而该注解是一个复合注解,包含@EnableAutoConfiguration,这个注解开启了自动配置功能。 该注解也是一个复合注解,包含@AutoConfigurationPackage。 该注解中包含@Import({Registrar.class}),这个注解引入Registrar类。该类中存在registerBeanDefinitions,可以获取扫描的包名。

如果需要人为修改扫描包的名称则需要在主类上@ComponentScan(basepackage={"包名"})

3.2 springboot自动装配原理

思考: 有没有自己使用DispatcherServlet. 为什么DispatcherServlet能用。

主函数在运行会执行一个使用@SpringbootApplication注解的类,该注解是一个复合注解,包含@EnableAutoConfiguration, 该注解开启自动配置功能,该注解也是一个复合注解,包含@Import() 该注解需要导入AutoConfigurationImportSelector类。 该类会加载很多自动装配类,而这些自动装配类完成相应的自动装配原理。

6分钟

4. springboot整合mybatis-plus

4.1 mybatis-plus概述

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

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

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

4.2 如何使用mp

(1)创建表并加入数据

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, '[email protected]'),
(2, 'Jack', 20, '[email protected]'),
(3, 'Tom', 28, '[email protected]'),
(4, 'Sandy', 21, '[email protected]'),
(5, 'Billie', 24, '[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=root
spring.datasource.url=jdbc:mysql:///company

(4)创建实体类

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

(5)创建一个dao接口

public interface UserMapper extends BaseMapper<User> {
}

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

@SpringBootApplication
@MapperScan(basePackages = "com.ykq.dao")
public class Qy163Springboot03Application {
    public static void main(String[] args) {
        SpringApplication.run(Qy163Springboot03Application.class, args);
    }

}

(7)测试

package com.ykq;

import com.ykq.dao.UserMapper;
import com.ykq.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Qy163Springboot03ApplicationTests {

    @Autowired
    private UserMapper userMapper;
    @Test
    void testFindById() {
        User user = userMapper.selectById(6);
        System.out.println(user);
    }

}

总结: 1.引入mp依赖 2. 创建数据源 3. 实体类 4.dao并继承BaseMapper<>接口 5.接口扫描

6.测试

4.3 使用mp完成CRUD

@SpringBootTest
class Qy163Springboot03ApplicationTests {

    @Autowired
    private UserMapper userMapper;
    @Test
    void testFindById() {
        User user = userMapper.selectById(1); //根据主键查询数据 默认主键名id 如果主键名不叫id
        System.out.println(user);
    }

    @Test
    public void deleteById(){
//        int i = userMapper.deleteById(1);
//        System.out.println(i);
        List<Integer> ids=new ArrayList<>();
        ids.add(2);
        ids.add(3);
        ids.add(5);
        ids.add(6);
        int i = userMapper.deleteBatchIds(ids);
        System.out.println(i);
    }

    //默认主键的生成策略:雪花算法-唯一id值。
    //使用递增 如果想使用递增策略:必须保证表中的id递增,而且需要在@TableId(type=IdType.AUTO)
    @Test
    public void testInsert(){
        User user=new User("蔡雨新",16,"[email protected]");
        int insert = userMapper.insert(user);
        System.out.println(insert);
    }

    @Test
    public void testUpdate(){
        User user=new User("乔文庆",18,"[email protected]");
        user.setUid(7L);
        userMapper.updateById(user);
    }

}

4.4 使用mp完成条件查询

@Test
    public void testFind(){
        //select * from user where uname like '%乔%' or age 19 and 25;
        //Wrapper<T> queryWrapper:查询对象。 条件接口。QUeryWrapper 查询条件类  UpdateWrapper更新条件类  LambdaWrapper 使用lambda表达式
        QueryWrapper<User> wrapper=new QueryWrapper<>(); //
        wrapper.likeRight("uname","_乔");
        wrapper.or();
        wrapper.between("age",19,25);
        wrapper.orderByDesc("age");
        wrapper.select("uname","age");
        List<User> list = userMapper.selectList(wrapper);
        list.forEach(System.out::println);
    }

    //分页需求--PageHelper---默认mp分页需要加分页拦截器
    @Test
    public void testPage(){
        Page<User> page=new Page<>(1,3); //current:当前第几页  size:每页显示条数
        userMapper.selectPage(page,null); //把查询分页的结果封装到page对象中
        System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
        System.out.println("获取总页数"+page.getPages());//获取当前页的记录
        System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
    }

4.5 联表使用mp的分页对象

//联表操作--使用mp中自动的分页。
    @Autowired
    private EmpMapper empMapper;
    @Test
    public void testPage2(){
        Page<Emp> page=new Page<>(1,3);
        QueryWrapper<Emp> wrapper=new QueryWrapper<>();
        wrapper.gt("sal",1000);
         empMapper.findPage(page,wrapper);
        System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
        System.out.println("获取总页数"+page.getPages());//获取当前页的记录
        System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
    }

标签:04,System,学习,user,println,注解,com,out
From: https://www.cnblogs.com/av404/p/17323115.html

相关文章

  • 学习-02
    1.ssm整合maven环境:本地仓库和镜像【阿里镜像|私服】1.1创建一个maven的web工程1.2pom引入相关依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins......
  • Spring事务学习
    spring将事务管理的逻辑和数据访问的逻辑分开管理,但是每一个数据访问dao都需要同一个Connection对象,这时,spring会在事务开始的时候将connection设置到一个ThreadLocal中,在dao中,就从这个ThreadLocal中拿到Connection。/***声明式事务demo*/publicvoidtranfer(){......
  • Vue2.0 学习 第三组 条件语句
    本笔记主要参考菜鸟教程和官方文档编写。1.v-if在div或者之类的dom中使用v-if可以控制是否插入该dom,控制由v-if的true和false决定。如:<divid="app"><divv-if="test"></div></div><script>newVue({el:"#app",data:{test:true}})</script>2.v-show......
  • 9、数据库学习规划:Oracle - 学习规划系列文章
          甲骨文公司的Oracle数据库是笔者认为的目前市面上性能最强大的数据库。其版本也发展到了现在的12c,提供的功能也更加的强大了。以前笔者使用的是9i,十几年过去了,也才发展到12代,说明Oracle数据库的性能和底层技术是非常完善和强大的了。 1、简介;Oracle公司......
  • 10、数据库学习规划:MySQL - 学习规划系列文章
          MySQL数据库是笔者认识的几个流行的数据库之一。类似于Linux重装系统,其也是开源的,最主要是有很多的社区支持,众多的开发者对其能够进行使用,所以其功能也挺强大,便于使用。通过对MySQL数据库的学习,笔者认为其是现今贡献最大和使用最广泛的数据库。因为其有社区版,能够免......
  • 最小生成树学习笔记
    定义最小生成树是指给定一个带权连通图G,如果里面有一个子图G'中的边权和加起来最小并且使得所有的点都能两两相通。性质从上述的定义可以看出,最小生成树有以下性质:如果图G中有n个点的话,G'中的边数为n-1且G'中不含有环。最小生成树可能是一个,也可能是多个。......
  • 李宏毅机器学习——pytorch
    什么是pytorchpython机器学习框架,Facebook提出,主要有一下两个特点使用GPU加速高维矩阵的运算torch.cuda.is_available()x=x.to('cuda')可以很方便的实现梯度的计算requires_grad=True指定需要对变量x计算梯度z是x的函数,调用z.backward()反向传播计算梯度x.grad属性......
  • AtCoder Regular Contest 104 F Visibility Sequence
    洛谷传送门AtCoder传送门考虑连边\((i,p_i)\)(若\(p_i=-1\)则不连边),可以发现形成了一篇内向树森林且这个森林存在一个dfs序为\(1,2,...,n\)。这棵森林有如下性质:\(\forallv\inson_u,h_u>h_v\)\(\forallv,w\inson_u\landv<w,h_v\leh_w\)考虑一个\(p......
  • Mathematica学习笔记002-数据导入导出
    如果不能把数据导入导出,Mathematica就只能是个大号计算器了。学会了导入导出,一方面可以把数据、图像结果保存,另一方面也可以将别的程序的中间结果导出成(txt或xls格式),然后交给Mathematica处理,让骑完成高精度计算和绘图。基本操作其实很简单Export["D:\\abc.txt",{{1,2},{3,4......
  • 微信小程序开发(学习记录1.0)
    首先,把遇到的问题贴出来,主要是这个解决问题的思路,供大家参考。现在的问题是将下面的导航栏做出来,但是在自己做的时候遇到的问题在app.json文件中输入tarBar,就会生成模板代码,默认会生成一个list的模板代码,几个list就是下面的导航栏有几部分,我们想要分成三部分,所以我们就会有三个lis......