springboot+mybatis+druid+postgreSql案例

2023-10-31

springboot+mybatis+druid+postgreSql/mysql 示例

简介

最近加入一个新的团队,发现团队开发的底层调用时通过jdbctemplate拼凑sql,不能说这个不好,但是对于开发效率来说,肯定没有orm框架使用来的6,jdbctemplate拼凑造轮子的话,大部分时间会花在轮子上,而且,压测的时候,sql的好坏,对业务代码的嵌入太深,综合考虑不划算。
其实,就现在世面主流构建来说,都是mybatis,这个主要是把sql语句独立出来了,做到了对sql语句的可控。
啥也不说,直接看项目结构:
项目结构

结构解析

application.yml:总体springboot的配置参数

spring:
  profiles:
    active: dev


# 服务端口
server:
  port: 9090
  servlet:
    context-path: /mptest


#数据库配置
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: org.postgresql.Driver
    url: jdbc:postgresql://192.168.100.103:5432/postgres
    username: postgres
    password: postgres
    druid:
      #初始化连接大小
      initial-size: 8
      #最小空闲连接数
      min-idle: 5
      #最大连接数
      max-active: 10
      #查询超时时间
      query-timeout: 6000
      #事务查询超时时间
      transaction-query-timeout: 6000
      #关闭空闲连接超时时间
      remove-abandoned-timeout: 1800
      filters: stat,config

#mybatis
mybatis:
  mapper-locations: classpath:com/examle/mpdemo/dao/*.xml

logback-mptest.xml: 配置日志(开发、测试、生产)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <!-- 文件输出格式 -->
    <property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" />
    <!-- test文件路径 -->
    <property name="TEST_FILE_PATH" value="/logs/tianjun" />
    <!-- pro文件路径 -->
    <property name="PRO_FILE_PATH" value="/logs/tianjun" />

    <!-- 开发环境 -->
    <springProfile name="dev">
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${PATTERN}</pattern>
            </encoder>
        </appender>

        <logger name="com.cmcc.tian.canal2kafka.common.ClusterCanal" level="debug"/>
        <logger name="com.cmcc.tian.canal2kafka.common.AbstractCanalClient" level="debug"/>
        <logger name="com.cmcc.tian.canal2kafka.common.CanalKafkaProducer" level="debug"/>

        <root level="info">
            <appender-ref ref="CONSOLE" />
        </root>
    </springProfile>

    <!-- 测试环境 -->
    <springProfile name="test">
        <!-- 每天产生一个文件 -->
        <appender name="TEST-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 文件路径 -->
            <file>${TEST_FILE_PATH}</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <!-- 文件名称 -->
                <fileNamePattern>${TEST_FILE_PATH}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
                <!-- 文件最大保存历史数量 -->
                <MaxHistory>100</MaxHistory>
            </rollingPolicy>

            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${PATTERN}</pattern>
            </layout>
        </appender>

        <root level="info">
            <appender-ref ref="TEST-FILE" />
        </root>
    </springProfile>

    <!-- 生产环境 -->
    <springProfile name="prod">
        <appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${PRO_FILE_PATH}</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${PRO_FILE_PATH}/warn.%d{yyyy-MM-dd}.log</fileNamePattern>
                <MaxHistory>100</MaxHistory>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${PATTERN}</pattern>
            </layout>
        </appender>

        <root level="warn">
            <appender-ref ref="PROD_FILE" />
        </root>
    </springProfile>
</configuration>

druid-bean.xml: 开发发测试使用,监控druid,通过界面可以监控数据库连接池

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 配置_Druid和Spring关联监控配置 -->
    <bean id="druid-stat-interceptor"
        class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"></bean>

    <!-- 方法名正则匹配拦截配置 -->
    <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
        scope="prototype">
        <property name="patterns">
            <list>
                <value>com.roncoo.education.mapper.*</value>
            </list>
        </property>
    </bean>

    <aop:config proxy-target-class="true">
        <aop:advisor advice-ref="druid-stat-interceptor"
            pointcut-ref="druid-stat-pointcut" />
    </aop:config>

</beans>

m-p-demo\src\main\resources\com\example\mpdemo\dao\UserDao.xml:这是Dao的相关mapper类的映射集合,idea中有个问题,在resources资源文件中,必须更Dao类路径取名一致,以便和Dao类编译在一起(不然会报mapper找不到绑定类的坑)。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.mpdemo.dao.UserDao" >
    <insert id="userInsert" parameterType="com.example.mpdemo.entity.User">
        insert into tianjun_test (id,name,age) values (#{user.id},#{user.name},#{user.age})
    </insert>

    <select id="queryById" resultType="com.example.mpdemo.entity.User">
        select * from tianjun_test where id = #{id}
    </select>
</mapper>

代码剖析

还是按照entity-dao-servicej-controller的结构

entity层

package com.example.mpdemo.entity;

/**
 * @Description: 用户实体
 * @Author: tianjun
 * @CreateTime: 2018-04-02 13:22
 * @Editor: tianjun
 * @UpdateTime: 2018-04-02 13:22
 * @Company: netposa
 */
public class User {
    private Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

Dao层

package com.example.mpdemo.dao;

import com.example.mpdemo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * @Description: 用户相关操作
 * @Author: tianjun
 * @CreateTime: 2018-04-02 13:25
 * @Editor: tianjun
 * @UpdateTime: 2018-04-02 13:25
 * @Company: netposa
 */
@Mapper
public interface UserDao {
    Integer userInsert(@Param("user") User user);

    User queryById(@Param("id") Integer id);
}

service层

IUserService

package com.example.mpdemo.service;

import com.example.mpdemo.entity.User;

/**
 * @Description: 用户业务接口
 * @Author: tianjun
 * @CreateTime: 2018-04-02 13:38
 * @Editor: tianjun
 * @UpdateTime: 2018-04-02 13:38
 * @Company: netposa
 */
public interface IUserService {
    Integer userInsert(User user);

    User queryById(Integer id);
}

UserServcie

package com.example.mpdemo.service.impl;

import com.example.mpdemo.dao.UserDao;
import com.example.mpdemo.entity.User;
import com.example.mpdemo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Description: 用户业务类
 * @Author: tianjun
 * @CreateTime: 2018-04-02 13:37
 * @Editor: tianjun
 * @UpdateTime: 2018-04-02 13:37
 * @Company: netposa
 */
@Service
public class UserService implements IUserService {
    @Autowired
    private UserDao userDao;

    @Override
    public Integer userInsert(User user) {
        return userDao.userInsert(user);
    }

    @Override
    public User queryById(Integer id) {
        return userDao.queryById(id);
    }
}

controller层

package com.example.mpdemo.controller;

import com.example.mpdemo.entity.User;
import com.example.mpdemo.service.IUserService;
import org.apache.ibatis.annotations.ResultType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description: 用户接口类
 * @Author: tianjun
 * @CreateTime: 2018-04-02 13:42
 * @Editor: tianjun
 * @UpdateTime: 2018-04-02 13:42
 * @Company: netposa
 */
@RestController
@RequestMapping("/tt")
public class UserController {
    @Autowired
    private IUserService userService;

    @PostMapping("/userInsert")
    public Integer userInsert(User user){
        return userService.userInsert(user);
    }

    @PostMapping("/queryById")
    public User queryById(Integer id){
        return userService.queryById(id);
    }
}

协助层

DruidConfiguration: 集成druid

package com.example.mpdemo.utils.configuration;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DatabaseDriver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration
public class DruidConfiguration {

    @ConditionalOnClass(DruidDataSource.class)
    @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.alibaba.druid.pool.DruidDataSource", matchIfMissing = true)
    static class Druid extends DruidConfiguration {
        @Bean
        @ConfigurationProperties("spring.datasource.druid")
        public DruidDataSource dataSource(DataSourceProperties properties) {
            DruidDataSource druidDataSource = (DruidDataSource) properties.initializeDataSourceBuilder().type(DruidDataSource.class).build();
            DatabaseDriver databaseDriver = DatabaseDriver.fromJdbcUrl(properties.determineUrl());
            String validationQuery = databaseDriver.getValidationQuery();
            if (validationQuery != null) {
                druidDataSource.setValidationQuery(validationQuery);
            }
            return druidDataSource;
        }
    }
}

MyBatisConfig: 集成mybatis

package com.example.mpdemo.utils.configuration;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;

import javax.sql.DataSource;
import java.util.Properties;

/**
 * @Description: springboot集成mybatis的基本入口 1)创建数据源 2)创建SqlSessionFactory
 * @Author: tianjun
 * @CreateTime: 2018-04-02 14:56
 * @Editor: tianjun
 * @UpdateTime: 2018-04-02 14:56
 * @Company: netposa
 */
@Configuration // 该注解类似于spring配置文件
@MapperScan(basePackages = "com.example.mpdemo.dao") // 扫描Dao文件
@EnableTransactionManagement //支持事务注解
public class MyBatisConfig implements TransactionManagementConfigurer {

    @Autowired
    DataSource dataSource;//默认配置文件中的数据源

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean fb = new SqlSessionFactoryBean();
        fb.setDataSource(dataSource);// 指定数据源(这个必须有,否则报错)
        return fb.getObject();
    }

    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }

}

***DruidWebStatFilter:***druid的接界面配置的过滤器

package com.example.mpdemo.utils.filter;

import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

import com.alibaba.druid.support.http.WebStatFilter;

/**
 * @author
 */
@WebFilter(filterName = "druidWebStatFilter", urlPatterns = "/*", initParams = { @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*") })
public class DruidWebStatFilter extends WebStatFilter {

}

***DruidStatViewServlet:***druid界面配置(路径、用户名和密码等)

package com.example.mpdemo.utils.servlet;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

import com.alibaba.druid.support.http.StatViewServlet;

/**
 *
 * @author
 */
@WebServlet(urlPatterns = { "/druid/*" }, initParams = { @WebInitParam(name = "loginUsername", value = "admin"), @WebInitParam(name = "loginPassword", value = "admin") })
public class DruidStatViewServlet extends StatViewServlet {

    private static final long serialVersionUID = 1L;

}

启动

MPDemoApplication:放在最外层,以便能扫描到所有的带有注解的包

package com.example.mpdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.ImportResource;
@ServletComponentScan
@SpringBootApplication
@ImportResource(locations = {"classpath:druid-bean.xml"})
public class MPDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(MPDemoApplication.class, args);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot+mybatis+druid+postgreSql案例 的相关文章

  • Android 7.0 Camera架构源码分析1 - CameraService启动

    本系列教程主要讲解Camera从APP层到HAL层的整个流程 第一篇先讲解CameraService的启动 后面会讲解open preview takepicture的流程 Android 7 0之前CameraService是在media
  • Java中抛出的内存异常总结

    Java中抛出的内存异常总结 根据上述的总结 可以整理出来 JVM在运行的时候大致会分为五个区域 方法区 堆区 本地方法栈 虚拟机栈 程序计数器 其中程序计数器不会报出OutOfMemoryError错误 其他的都有可能会报出这个错误 St
  • 逆向百度翻译

    逆向步骤 访问首页 https fanyi baidu com 获取set cookie 第二次根据cookie 获取的首页包含token 正则匹配出来 算出sign 根据查询入参 js逆向算出sign 最终 cookie sign 和 t
  • 【魔改YOLOv5-6.x(上)】结合轻量化网络Shufflenetv2、Mobilenetv3和Ghostnet

    文章目录 前言 一 Shufflenetv2 论文简介 模型概述 加入YOLOv5 二 Mobilenetv3 论文简介 模型概述 深度可分离卷积 逆残差结构 SE通道注意力 h swish激活函数 加入YOLOv5 三 Ghostnet
  • fifo读写写测试

    记录学习日常 本实验参考正点原子的实验教程 按照自己的理解来完成实验 四个模块 第一个模块是调用fifo IP核并设计类型 二 写如数据模块 三 读数据模块 四 顶层模块 ip核设置如图 二 写数据模块的输入有时钟 复位 写满 写空 输出有
  • 实战:彻底搞定 SpringBoot 整合 Kafka

    前言 kafka是一个消息队列产品 基于Topic partitions的设计 能达到非常高的消息发送处理性能 Spring创建了一个项目Spring kafka 封装了Apache 的Kafka client 用于在Spring项目里快速
  • Java初识 (数据类型)

    有人说Java是一种简单的语言 实际上没有简单的语言 只有相对简单 Java是一种面向对象的语言 学习Java 首先得了解 JDK JDK Java开发者工具 JRM Java运行环境 JVM Java虚拟机 面试题 main 函数的参数是
  • 编写shell脚本——一键启动Hadoop集群

    第一步 1 创建一个存放脚本的目录 命令 mkdir bin 注 如果不了解存放脚本目录的命名 就将目录名命名为 bin 如果 自己命名为其他可能在后面第四步的时候查找不到脚本 2 在bin目录下创建 hadoop sh 脚本 1 进入新创
  • gp基础篇-用户与资源队列管理

    author skate time 2012 11 16 gp基础篇 用户与资源队列管理 gp像oracle一样 有自己的独立的用户管理模块 但gp不像oracle那样 把用户和用户组分的那么细 gp中的用户 即是用户 又是用户组gp中的用
  • 目标检测研究现状调研

    近期在调研目标检测的研究现状 包括two stage和one stage 以及anchor based和anchor free 把用到的一些链接记录一下 方便查阅 机器之心的一篇文章 从锚点到关键点 最新的目标检测方法发展到哪了 这篇文章介
  • linux jmap命令详解,jmap命令 linux jmap如何使用

    1 linux jmap如何使用 jmap命令可以获得运行中的jvm的堆的快照 从而可以离线分析堆 以检查内存泄漏 检查一些严重影响性能的大对象的创建 检查系统中什么对象最多 各种对象所占内存的大小 命令格式 jmap options pi
  • Linux和Windows火狐浏览器书签无法同步

    前言 装了ubuntu后发现Windows下的firefox书签无法同步 而且都登陆了相同的Google账号 最终发现问题所在 firefox有个全球服务和本地服务 ubuntu下的firefox默认是全球服务的 而windows下的fir
  • 利用do while 循环和 switch 分支语句做一个简易的ATM机

    自己的写的过程体会 第一步 重要的 要检查你的电脑是否联网了 本人在写到第3步时没注意到电脑没联网 就一直在显示不了你想要的结果 本来信誓旦旦说没错啊 就是这样啊 可是就显示不了 后来才发现是网络问题 所以 网络很重要 一把泪 啊 然后呢
  • python收集数据做主神_里纲_[综漫]收集数据做主神小说无防盗章节_作者忘却的悠_新书包网(www.51aslz.com)...

    里包恩怎么了 没什么 只是在想 你做为里包恩的学生 能不能帮我个忙 帮忙 纲不好意思的抓了抓头发 所有的心思都写在了脸上 什么我这么废柴能帮什么忙 虽然我很想帮忙 但是我真的什么都做不好 找里包恩本人更快吧 实在不行还有山本和狱寺他们 不过
  • RequestMapping中produces属性作用

    注解RequestMapping中produces属性可以设置返回数据的类型以及编码 可以是json或者xml RequestMapping value xxx produces application json charset UTF 8
  • mysql如何将表导出到excel

    一 显示当前使用或者指定的database中的每个表的信息 信息包括表类型和表的最新更新时间 show table status 二 mysql如何将表结构导出到excel SELECT TABLE NAME 表名 COLUMN NAME
  • 计算机视觉与深度学习-图像分割-视觉识别任务03-实例分割-【北邮鲁鹏】

    目录 参考 定义 Mark R CNN 结构 思路 Mask R CNN训练阶段使用的Mask样例 Mask R CNN实例分割结果 Mask R CNN检测姿态 参考 论文题目 Mask R CNN 论文链接 论文下载 论文代码 Face
  • 四、在原理图中添加每个元件的封装

    画完每个元件的封装后 回到原理图界面 双击每个原理图元件 在编辑中添加封装 全部添加好右键点击原理图 选择validate pcb 那个 编译原理图文件 会自动检查错误 检查出来可以导出一个错误文档 然后根据文档修正即可 这个编译是将元件的
  • android点击后图片变大,Android实现点击缩略图放大效果

    import android animation Animator import android animation AnimatorListenerAdapter import android animation AnimatorSet
  • 【javascript】获取键盘输入

    获取上下左右键 在JavaScript中 如果我们想要获取键盘中的键对应的键码 可以使用event对象的keyCode属性

随机推荐

  • java连接kafka api_Kafka-JavaAPI(Producer And Consumer)

    Kafka JAVA API Producer和Consumer Kafka 版本2 11 0 9 0 0 producer package com yzy spark kafka import kafka javaapi producer
  • 2008年北大信科研究生复试 机考真题(一)--大数据十进制转换

    描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出 输入 多组数据 每行为一个长度不超过30位的十进制非负整数 注意是10进制数字的个数可能有30个 而非30bits的整数 输出 每行输出对应的二进制数 样例输入 0 1 3
  • LogBack的使用

    需要JAR包 1 slf4j api 1 6 1 jar 2 logback access 0 9 29 jar 3 logback classic 0 9 29 jar 4 logback core 0 9 29 jar 加载顺序 1 l
  • Promise详解

    1 基本概念 Promise是JS异步编程中的重要概念 异步抽象处理对象 是目前比较流行Javascript异步编程解决方案之一 2 Promise的三种状态 pending 对象初始化状态 fulfilled 当调用resolve 成功
  • 计算机管理找不到防火墙,win10系统防火墙服务找不到的具体方案

    win10系统使用久了 好多网友反馈说win10系统防火墙服务找不到的问题 非常不方便 有什么办法可以永久解决win10系统防火墙服务找不到的问题 面对win10系统防火墙服务找不到的图文步骤非常简单 只需要从电脑桌面找到计算机 然后鼠标指
  • Effective C++ 学习笔记 条款06 若不想使用编译器自动生成的函数,就应该明确拒绝

    如想阻止拷贝 但编译器为类声明了拷贝构造函数和拷贝赋值运算符 这样就不能达到目的了 你可以通过将拷贝构造函数和拷贝赋值运算符声明为private的来阻止拷贝 但类的成员函数和友元还是可以调用 此时将它们声明但不定义就行了 这样调用它的函数会
  • 通过href 从http跳转https失效问题 前端解决

    目前 浏览器定位的功能大多数浏览器为了安全需要https协议才可使用 这就需要站点支持https协议 尝试通过a标签跳转至a目录下的index html 发现href中目标地址是https xxx com a 浏览器跳转到https xxx
  • 攻防世界:WEB新手练习区

    题目 https adworld xctf org cn challenges problem set index id 25 rwNmOdr 1678625790128 view source 题目描述 X老师让小宁同学查看一个网页的源代
  • 开源阅读书源_安卓神器

    Hi 新朋友 记得点蓝字关注我们哟 阅读 大家好 我是小昊 今天在论坛看到有人提到这个软件 我才记起来要老早就应该给大家推荐这个软件的 首先这个软件是需要自己添加源的 不加是用不了的哟 如
  • Docker安装以及常用命令

    提示 以下内容均为学习过程中的个人笔记 有用自取 无用勿喷 如有错误欢迎指正 一 什么是docker Docker 是采用Linux Container 基于Golang语言 采用apache2 0开源协议存储于GitHub开源的容器管理引
  • 【网络是怎样连接的】—— TCP/IP 传输数据

    协议栈的工作原理 1 协议栈的内部结构 操作系统中的网络控制软件 协议栈 的内部如图所示 分为几个部分 分别承担不同的功能 这张图中的上下关系具有一定的规则 上面的部分会向下面的部分委派工作 下面的部分接受委派的工作并实际执行 图中最上面的
  • 解决APK签名问题the apk for your currently selected variant(app-release-unsigned.apk)is not signed.

    转载地址 https www cnblogs com galibujianbusana p 7694087 html
  • C语言面试题汇编

    1 局部变量能否和全局变量重名 答 能 局部会屏蔽全局 要用全局变量 需要使用 局部变量可以与全局变量同名 在函数内引用这个变量时 会用到同名的局部变量 而不会用到全局变量 对于有些编译器而言 在同一个函数内可以定义多个同名的局部变量 比如
  • spdlog用法

    转自 spdlog学习笔记 说明 所有内容翻译自spdlog的wiki 受英语水平所限 有所错误或失真在所难免 如果您有更好的建议 请在博文下留言 线程安全 spdlog 命名空间下的是线程安全的 当loggers在不同的线程同时执行时 下
  • Django框架之DRF序列化与反序列化

    概念 序列化 将Python对象转换为json字符串 反之json字符串反序列化为对象 使用drf序列化组件的步骤如下 1 在你的app中新建一个py文件 新建一个序列化的类 2 在类中写要序列化的字段 在视图中使用序列化的类 1 实例化出
  • 从控制台输入基本工资,并计算输出实领工资

    题目 编写程序 public class Test01 这是一个main方法 程序的入口 public static void main String args 键盘输入 Scanner input new Scanner System i
  • 苹果电脑适合python吗_m1的MacBook pro适合python开发吗?

    我的MacBook Air M1到手了 我自己常用的python包都装了 都是arm的版本 不是用Rosseta跑的 请参考 短暂使用还没有发现什么BUG 只不过numpy和tf相关的包是Apple提供的 opencv也不能直接pip或者c
  • svm实现二分类_支持向量机原理详解(三): 核函数与非线性SVM

    前文推导了 线性 SVM的对偶问题 见支持向量机原理详解 二 拉格朗日对偶函数 SVM的对偶问题 不过 线性SVM以超平面来划分两类数据 如果数据本身是非线性的 那么以超平面作为决策边界就显得不太适用了 通过引入核函数 可以使SVM适用于非
  • 防雷工程专业术语及雷电浪涌保护器名词解释

    1 雷电次数 当雷暴进行时 隆隆的雷声持续不断 若其间雷声的时间间隔小于15分钟时 不论雷声断续传播的时间有多长 均算作是一次雷暴 若其间雷声的停息时间在15分钟以上时 就把前后分作是两次雷暴 2 雷电小时 就是说在该天文小时内发生过雷暴
  • springboot+mybatis+druid+postgreSql案例

    springboot mybatis druid postgreSql mysql 示例 springboot mybatis druid postgreSql mysql 示例 简介 结构解析 代码剖析 entity层 Dao层 serv