基于MyBatis-plus的SpringBoot开发
目录
一、SpringBoot整合mybatis
二、SpringBoot整合mybatis-plus
1、什么是mybatis-plus?
2、mybatis-plus的特性
3、mybatis-plus的使用
(1)编写注解配置实体类与关系表映射关系
(2)mapper层
(3)test层
新增:
修改ID:
修改:
查询ID:
查询ID:
查询count:
查询list:
分页查询:
查询delete:
基于条件查询 Account 表中的记录:
模拟动态查询1:
模拟动态查询2:
投影查询-字段查询:
逻辑删除:
一、SpringBoot整合mybatis
主要是融合mybatis对数据库操作的方式和SpringBoot框架进行整合,大概的框架结构为:
首先是在pom.xml中导入mybatis坐标:
<dependencies><!--mybatis坐标--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
然后是创建实体类pojo,再创建mapper层,用来定义方法:
// @Mapper //注册注入一个mapper
public interface AccountMapper {@Select("select * from account")public List<Account> findAll();public List<Account> find();
}
通过@MapperScan实现注册注入多个mapper(以包为单位),指定一个或多个包路径,Spring 会扫描这些包中的所有 Mapper 接口,并将它们注册为 Spring 容器中的 Bean。可以避免在每个 Mapper 接口上单独添加 @Mapper 注解,简化了 MyBatis 与 Spring 的集成配置。
@Mapper是标识某个接口为 MyBatis 的 Mapper,适合单个接口的配置,通常用于不使用 @MapperScan 的情况下。
然后在resources底下创建mappers包,里面创建AccountMapper.xml配置文件:
<?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.apesource.mybatis_springboot.mapper.AccountMapper"><select id="find" resultType="com.apesource.mybatis_springboot.pojo.Account">select * from account;</select>
</mapper>
其中namespace是将这个xml文件映射到目标路径的接口中去,其中的对应接口中的find()方法完成数据库操作。
yml文件中的配置为:
spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/homework?serverTimezone=GMTdriver-class-name: com.mysql.cj.jdbc.Driver
mybatis:mapper-locations: mappers/*.xml
其中配置了数据库的相关信息连接和mapper-locations: mappers/*.xml,指定 MyBatis 的 Mapper XML 文件的位置模式。mappers/*.xml 表示 Spring Boot 会在类路径下的 mappers 目录中查找所有以 .xml 结尾的文件,这些文件定义了 MyBatis 与数据库之间的 SQL 映射关系。
二、SpringBoot整合mybatis-plus
1、什么是mybatis-plus?
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的开发过程,提供了很多开箱即用的功能,使得开发者可以更加高效地进行持久层开发。MyBatis-Plus 不改变 MyBatis 原有的 API 和功能,而是在其基础上提供了更丰富的功能和自动化工具。
MyBatis-Plus 提供了一套通用的 CRUD 接口,只需要简单地继承这些接口就可以获得常用的 CRUD 操作方法,如 insert、delete、update 和 select,减少了大量重复的代码。
MyBatis-Plus 还可以实现自动填充、逻辑删除、分页插件、代码生成器等功能。
2、mybatis-plus的特性
3、mybatis-plus的使用
首先是导入坐标,mp坐标添加后,mybatis坐标就可以移除。
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version></dependency>
然后是实体类Account:
@TableName("account")
public class Account {@TableId(value = "aid",type = IdType.AUTO)private int aid;@TableField("aname")private String aname;@TableField("amoney")private int amoney;@TableField("aage")private int aage;@TableField("ahobby")private String ahobby;// 构造方法// set/get方法 toString方法...
}
(1)编写注解配置实体类与关系表映射关系
@TableName:
用途:指定该类映射的数据库表名为 account。
作用:@TableName 注解告诉 MyBatis-Plus,这个实体类 Account 对应的数据库表名是 account。这个表名可能与类名不同,注解通过明确表名来建立映射关系。
@TableId:
用途:指定主键字段 aid 的映射关系和主键生成策略,默认雪花算法。
属性说明:
- value = "aid": 表示这个字段在数据库表中的列名是 aid。
- type = IdType.AUTO: 指定主键生成策略为自增 (AUTO),即数据库会自动生成主键值(通常是自增的整数)。
@TableField:
用途:指定字段 aname 在数据库表中的列名,主要是用于害怕字段名与属性名称不相同,用于对应映射关系。
作用:@TableField("aname") 注解将类中的 aname 字段映射到数据库表中的 a_name 列。MyBatis-Plus 会根据这个映射关系进行数据库操作。
(2)mapper层
接口继承了BaseMapper接口:
public interface AccountMapper extends BaseMapper<Account> {@Select("select * from account")public List<Account> findAll();public List<Account> find();}
BaseMapper通常是一个通用的MyBatis接口,提供了基本的CRUD操作。AccountMapper继承了它,因此可以使用BaseMapper中定义的所有基本数据库操作方法。
config层定了一个叫MyBatisPlusConfig的类:
@Configuration
public class MyBatisPlusConfig {//注入mp拦截器@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){//1.实例化拦截器MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();//2.分页拦截器mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mybatisPlusInterceptor;}}
MybatisPlusInterceptor创建了一个 MybatisPlusInterceptor 的实例。这个拦截器是MyBatis Plus提供的,用于处理SQL执行过程中的各种拦截任务。
(PaginationInnerInterceptor)添加到 MybatisPlusInterceptor 中。分页拦截器用于处理分页查询的SQL语句,它会自动将分页参数(如页码、页大小)应用到查询语句中。
return mybatisPlusInterceptor是将配置好的 MybatisPlusInterceptor 实例返回,并将其注册为Spring容器中的一个Bean。这意味着MyBatis Plus将使用这个配置的拦截器来处理SQL语句。
(3)test层
测试层中去写相关方法:
新增:
@Testpublic void show1(){Account account = new Account("郝喵喵", 2000);int row = mapper.insert(account);System.out.println("主键回填id:"+account.getAid());System.out.println("影响行数:"+row);}
新建实体类对象,调用CRUD 接口的方法insert插入数据库,返回受影响行数。并且mubatis-plus中的方法实现了自动主键回填。
修改ID:
@Testpublic void test02()throws Exception{Account account = new Account(3,"郝苗苗",3000);int row = mapper.updateById(account);System.out.println("影响行数:"+row);}
同样调用了CRUD接口中的方法。
修改:
@Testpublic void test03()throws Exception{//1.数据Account account = new Account();account.setAhobby("打麻将");account.setAage(18);//2.修改条件QueryWrapper<Account> wrapper = new QueryWrapper<Account>();wrapper.eq("aname","郝苗苗");mapper.update(account,wrapper);}
其中的创建一个 QueryWrapper 对象,用于指定更新操作的条件。wrapper.eq("aname","郝苗苗");设置条件,表示选择 aname 列的值等于 "郝苗苗" 的记录。这是一个等值匹配条件。mapper.update(account, wrapper); 调用 mapper 对象的 update 方法,相当于CRUD接口中的方法。
查询ID:
@Testpublic void test04()throws Exception{Account account = mapper.selectById(3);System.out.println(account);}
调用的CRUD接口中selectById的方法。
查询ID:
@Testpublic void test05()throws Exception{List<Account> list = mapper.selectBatchIds(Arrays.asList(5,1,3));for (int i = 0; i < list.size(); i++) {Account account = list.get(i);System.out.println(account);}}
调用了 mapper 对象的 CRUD接口中 selectBatchIds 方法,从数据库中批量查询ID为 5、1、3 的 Account 记录。
查询count:
@Testpublic void test06()throws Exception{int count = mapper.selectCount(null);System.out.println(count);}
查询list:
public void test07()throws Exception{QueryWrapper<Account> queryWrapper = new QueryWrapper();
// queryWrapper.eq("ahobby","打麻将");
// queryWrapper.eq("aage","18");queryWrapper.eq("ahobby","打麻将").or().eq("aage","18");List<Account> list = mapper.selectList(queryWrapper);for (int i = 0; i < list.size(); i++) {Account account = list.get(i);System.out.println(account);}}
可以使用上面注释掉的,分别构建查询条件,或者是下面的用or()方法连接的查新条件,表示只需要满足其中一个条件,而不必同时满足两个条件。
分页查询:
@Testpublic void test08()throws Exception{//1.定义分页规则Page<Account> page = new Page<Account>();page.setSize(3);//每页记录数page.setCurrent(2);//当前页码//2.查询条件(可选)QueryWrapper queryWrapper = new QueryWrapper();IPage<Account> iPage = mapper.selectPage(page,null);List<Account> list = iPage.getRecords();//分页结果System.out.println("总记录数:"+iPage.getTotal());System.out.println("总记页数:"+iPage.getPages());for (int i = 0; i < list.size(); i++) {Account account = list.get(i);System.out.println(account);}}
这个是基于mybatis-plus的分页使用,注意page.setCurrent(2);当前页码从1开始,分页需要配置插件。
首先通过创建Page对象定义分页的规则,page.setSize(3); 设置每页显示的记录数为 3,page.setCurrent(2); 设置当前页码为 2。这意味着查询结果将从第二页开始,每页包含3条记录。
这里调用selectPage方法,传入分页规则 page 和查询条件(这里传入 null 表示没有额外条件)。
最后通过.getRecords()方法从 iPage 对象中提取出分页查询的结果,即当前页的 Account 记录列表,输出打印。
查询delete:
@Testpublic void test09()throws Exception{mapper.deleteById(4);}
基于条件查询 Account 表中的记录:
@Testpublic void show1(){//1.查询条件// LambdaQueryWrapper 是 MyBatis-Plus 提供的一个查询构建器,用于构建查询条件。这里创建了一个针对 Account 实体类的查询构建器实例。LambdaQueryWrapper<Account> lambdaQueryWrapper = new LambdaQueryWrapper<Account>();// 查询大于18的account对象lambdaQueryWrapper.gt(Account::getAage,18);//2.查询List<Account> list = mapper.selectList(lambdaQueryWrapper);for (int i = 0; i < list.size(); i++) {Account student = list.get(i);System.out.println(student);}}
创建一个 LambdaQueryWrapper 对象,用于构建SQL查询的条件。LambdaQueryWrapper 是 MyBatis-Plus 提供的一个查询构建器,主要用于在查询时构建更安全和灵活的条件,特别适用于避免字符串拼接带来的潜在问题。使用 gt 方法指定查询条件,这里的 gt 表示 "greater than"(大于)。
Account::getAage 指定 Account 实体类中的 aage 属性,意味着我们要查询 aage 大于 18 的记录。
模拟动态查询1:
@Testpublic void show2(){//1.前端发送来的数据Integer num1 = null;Integer num2 = 30;//1.查询条件LambdaQueryWrapper<Account> lambdaQueryWrapper = new LambdaQueryWrapper<Account>();//2.判断if(null != num2){lambdaQueryWrapper.lt(Account::getAage,num2);}if(null != num1){lambdaQueryWrapper.gt(Account::getAage,num1);}//3.查询List<Account> list = mapper.selectList(lambdaQueryWrapper);for (int i = 0; i < list.size(); i++) {Account student = list.get(i);System.out.println(student);}}
num1 为 null,表示没有传递下限的条件,num2 为 30,表示查询的上限年龄为30,即查询小于30岁人。
模拟动态查询2:
@Testpublic void show3(){//1.前端发送来的数据Integer num1 = null;Integer num2 = 30;//1.查询条件LambdaQueryWrapper<Account> lambdaQueryWrapper = new LambdaQueryWrapper<Account>();//2.判断lambdaQueryWrapper.lt(null != num2,Account::getAage,num2);lambdaQueryWrapper.gt(null != num1,Account::getAage,num1);//3.查询List<Account> list = mapper.selectList(null);for (int i = 0; i < list.size(); i++) {Account student = list.get(i);System.out.println(student);}}
其他均一样,第一个参数 null != num2 是一个布尔值,用于控制这个条件是否会被加入到查询中。因为 num2 不为 null,所以后面的这个条件会被应用。
第一个是判断条件,条件成立后,从Acount中取getAage属性,并把第三个参数作为条件。
投影查询-字段查询:
@Testpublic void show4() {// 查询只包含的条件的对象//1.条件LambdaQueryWrapper<Account> lambdaQueryWrapper = new LambdaQueryWrapper<Account>();// 这行代码使用 select() 方法指定只查询 Account 表中的 Aname(姓名)和 Ahobby(爱好)两个字段。lambdaQueryWrapper.select(Account::getAname,Account::getAhobby);//2.查询List<Account> list = mapper.selectList(lambdaQueryWrapper);//4.遍历for (int i = 0; i < list.size(); i++) {Account student = list.get(i);System.out.println(student);}}
这行代码使用 select() 方法指定只查询 Account 表中的 Aname(姓名)和 Ahobby(爱好)两个字段,只查询拥有Aname和Ahobby的对象。
逻辑删除:
- 物理删除:业务数据从数据库中丢弃,执行的是delete操作。
- 逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中,执行的是update操作。
实现步骤:
步骤1:修改数据库表添加`deleted`列,比如`0`代表正常,`1`代表删除,可以在添加列的同时设置其默认值为`0`正常。
步骤2:实体类添加属性以及注解,@TableLogic(value="0",delval="1"),用于实现逻辑删除功能。value="0": 表示记录在未被删除的情况下,该字段的值是什么。通常,0 表示数据正常。delval="1": 表示记录被逻辑删除时,该字段的值会被设置为 1。逻辑删除是指不直接从数据库中删除记录,而是通过改变字段值来标识数据已被删除。
@TableLogic(value = "0",delval = "1")
private int delval;
示例代码:
//逻辑删除@Testpublic void show7() {mapper.deleteById(5);}
这样就会根据delval属性进行逻辑删除了,但是不会改变数据库中的信息,删除完成后数据库中的delval属性从0变为1。
相关文章:
基于MyBatis-plus的SpringBoot开发
目录 一、SpringBoot整合mybatis 二、SpringBoot整合mybatis-plus 1、什么是mybatis-plus? 2、mybatis-plus的特性 3、mybatis-plus的使用 (1)编写注解配置实体类与关系表映射关系 (2)mapper层 (3…...
网站数据导出为excel 源码大全java php c# js python 与网络安全兼顾-阿雪技术观
一、阿雪技术观谈网站安全 1.保护用户隐私和数据 用户在访问网站时会提供各种个人信息,如姓名、地址、联系方式、信息等。如果网站存在安全漏洞,这些敏感信息可能会被黑客窃取,导致用户遭受身份盗窃、欺诈等 2.维护企业声誉和信任 一个安全可…...
Python知识点21---怎么把你的Python项目打包成一个完整的结果物给别人提供
很多写Python的人,都会遇到一个很抓瞎的事情,项目这么打包?就比如写Java代码写惯了,突然写个Python,就在想怎么办Python的平替Maven是什么?怎么把环境和写的代码打成一个结果物?这篇就告诉你。 …...
关于#genesiscsheel#的问题,如何解决?
🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…...
无人机之如何避免飞行错误篇
在无人机飞行中,飞手可能会遇到各种问题,这些问题不仅会影响飞行效果,还可以带来安全隐患。以下是一些常见的错误及避免方法,帮助飞手提高飞行稳定性和安全性: 一、校准传感器 IMU(惯性测量单位࿰…...
免费简单的制作3D卡通建模——Fuse软件和Readyplayer的使用介绍
最终效果 文章目录 最终效果一、使用Fuse软件去Steam下载安装捏人选择身体部位自定义人物细节参数换装贴图修改导出OBJ文件即可 二、使用ReadyplayerReadyplayer官网地址选择从模板开始,或者拍照选择图片进行捏脸将模型导入Unity通过Readyplayer官方插件导入模型通过…...
企业大模型业务架构技术选型分析
AI赋能企业:选择适合你的大模型业务架构 现代企业中,大模型业务日益普及,主要涵盖AI Embedded、AI Copilot和AI Agent三大架构。本文深入剖析其特性与适用场景,为企业选择合适的大模型业务架构提供指导,助力企业高效应…...
pyqt5 中python如何通过Qtwebchannel主动发消息给web前端
🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…...
Java Web —— 第五天(请求响应2)
响应数据 ResponseBody 类型:方法注解、类注解 位置: Controller方法上/类上 作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合,将会转换为JSON格式响应 说明: RestController Controller ResponseBody ; package com.example.springbo…...
数据科学 - 模型检验
1. 前言 模型检验是数据科学项目中至关重要的步骤,确保模型的质量,可靠性和实用性。 模型检验的主要目的是评估模型的性能,验证其在实际应用中的效果,以及防止模型出现过拟合,欠拟合或其他潜在问题。 在日常学习工作…...
【GaussDB(DWS)】数仓部署架构与物理结构分析
数仓架构与物理结构分析 一、部署架构二、物理结构三、测试验证 一、部署架构 华为数据仓库服务DWS,集群版本8.1.3.x 集群拓扑结构: 上述拓扑结构为DWS单AZ高可靠部署架构,为减少硬件故障对系统可用性的影响,建议集群部署方案遵…...
git做版本管理的时候,中途添加了新的内容在.gitignore中,怎么让git不再跟踪
当您在 .gitignore 文件中添加了新的路径模式后,Git 将不再跟踪这些路径下的新文件。但是,如果这些路径下的文件已经被 Git 跟踪(即它们已经被提交到仓库),您需要执行一些额外的步骤来让 Git 停止跟踪这些文件。 以下…...
Unity新输入系统 之 PlayerInput(真正的最后封装部分)
本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 首先你应该了解新输入系统的基本单位和输入配置文件 Unity新输入系统 之 InputAction(输入配置文件最基本的…...
跨部门协作:观测云在促进业务与技术团队合作中的作用
在当今的企业环境中,业务与技术团队之间的紧密合作对于推动创新和提升效率至关重要。观测云平台作为一个强大的数据监控和分析工具,在这方面发挥着至关重要的作用,它通过提供统一的数据视图和协作工具,促进了跨部门间的有效协作。…...
OceanBase V4.3 列存引擎之场景问题汇总
在OceanBase 4.3版本发布后(OceanBase社区版 V4.3 免费下载),其新增的列存引擎,及行列混存一体化的能力,可以支持秒级实时分析,引发了用户、开发者及业界人士的广泛讨论。本文选取了这些讨论中较为典型的一…...
Spring中的Aware接口及应用场景
Spring框架提供了一些Aware接口,例如ApplicationContextAware, BeanFactoryAware, EnvironmentAware等,这些接口允许你的Bean获取Spring容器的资源。 例如,如果你的Bean实现了ApplicationContextAware接口,那么Spring在启动的时候…...
设计模式 - 建造者模式
💝💝💝首先,欢迎各位来到我的博客!本文深入理解设计模式原理、应用技巧、强调实战操作,提供代码示例和解决方案,适合有一定编程基础并希望提升设计能力的开发者,帮助读者快速掌握并灵活运用设计模式。 💝💝💝如有需要请大家订阅我的专栏【设计模式】哟!我会定…...
MySQL数据分析进阶(十二)设计数据库——PART4
;※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,笔记整理比较粗糙,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!) 【中字】SQL进阶教程 |…...
在 Spring Boot 中使用桥接模式实现灵活的报表生成服务
在软件开发中,桥接模式是一种结构型设计模式,用于将抽象部分与它的实现部分分离,使得这两部分可以独立变化。这种模式非常适合处理需要灵活配置和扩展的场景,比如报表生成服务。本文将详细介绍如何使用桥接模式来实现一个灵活的报…...
算法:外卖调度
题目 有N个餐厅和M个外卖员,每个餐厅在某个时间点会产生一个外卖订单,这些订单都有产生时间、所需送达时间和优先级。外卖员在空闲时会选择最优先的订单来配送,直到所有订单都被送达。具体规则如下: 对于每个餐厅的订单,优先级高…...
leetcode50. Pow(x, n),快速幂算法
leetcode50. Pow(x, n),快速幂算法 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000 示例 2: 输入ÿ…...
Xinstall神器来袭,轻松搞定CPA推广渠道统计!
在数字化营销日益盛行的今天,CPA(按行动付费)推广已成为众多企业营销的重要手段。然而,随着渠道流量和获客途径的不断变化,CPA推广渠道统计的痛点也日益凸显。别担心,Xinstall来帮你解决问题! …...
011 | efinance分析豆一主连期货
👉👉👉 《玩转Python金融量化专栏》👈👈👈 订阅本专栏的可以下载对应的代码和数据集 🚀 上一篇🌟 下一篇⬅️ 010 东方财富帖子标题情绪分析012 akshare分析NYBOT棉花历史数据 ➡️豆一主连期货(通常简称“豆一”)是指中国期货市场上以大豆为标的的期货合约…...
【Python】函数入门(下)
3))* ** 注意:也遵循位置传参在前面,按关键字传参在后面。 代码示例: def func(*args,**kwargs):print(args,kwargs) 该函数中的参数会自动根据传参的方式不同(即:按位置…...
git的基本概念和使用原理
Git是一个分布式版本控制系统,用于跟踪文件的更改并协调多个开发人员之间的工作。以下是Git的基本概念和使用原理及方式: 目录 基本概念 使用原理 基本操作示例 基本概念 版本库(Repository): 版本库是Git用来保存…...
手写简化版的vue-router
vue-router作为vue全家桶之一的重要插件,有必要去深究一下,今天我们就从0到1手写一个简化版本。 开始之前,我们使用路由插件时是先进行下载路由 npm i vue-router ,然后在main.js中使用app.use导入router插件。想要手写vue-rou…...
分享一个基于uni-app的蛋糕商城订购小程序的设计与实现(源码、调试、LW、开题、PPT)
💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…...
Python绘图入门:使用Matplotlib绘制柱状图
Python绘图入门:使用Matplotlib绘制柱状图 柱状图是一种常见的数据可视化方式,能够直观地展示不同类别之间的数据差异。在Python中,Matplotlib是一个非常强大且灵活的绘图库,它不仅能绘制简单的图表,还能创建复杂的多…...
Qt5编译qmqtt库使用MQTT协议连接华为云IOT完成数据上传与交互
一、前言 随着物联网技术的发展,越来越多的设备通过网络互相连接,形成了庞大的智能系统。这些系统能够收集、分析并响应各种数据,从而实现自动化控制和智能化管理。在这个背景下,MQTT 成为了一个广泛使用的轻量级消息传输协议,特别适用于资源受限的环境,如移动应用或远程…...
mysql速起架子
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 下载mysql tar xvJf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 解压 mv mysql-8.0.21-linux-glibc2.12-x86_64 mysql-8.0 改名 去到bin目录 cd bin mkdir data gr…...
做网站多少钱google/怎么在百度推广自己的公司
非常好 强力推荐 这个是我最新并且一直推崇的方法:1、安装:sunyichaodeMacBook-Pro:~ sunyichao$ brew install mysql2、开启mysql:mysql.server start2、使用mysql的配置脚本:/usr/local/opt/mysql/bin/mysql_secure_installatio…...
wordpress wp_query/地推项目对接平台
点击上方蓝色链接,关注并“设为星标”干货,每天及时推送灵感源自于生活。来源:szhshp.org/comic/2018/03/26/10101.ep12.html分享一份 2019 最新 Java 架构师学习资料- END -推荐阅读:1、硬核!尽量避免 bug 手法2、Has…...
外贸网站推广怎样做/seo优化的优点
kafka学习笔记 kafka系列四、kafka架构原理、高可靠性存储分析及配置优化 kafka系列八、kafka消息重复和丢失的场景及解决方案分析 kafka消息的分发与消费与高级应用 springboot下 kafka 手动创建topic并指定分区(partition)数及分区副本(replica)数 Topic&Partition 的…...
网站开发是前端还是/互联网平台公司有哪些
目前的BI市场上有很多大数据的厂商,这也让许多客户眼花缭乱,不知如何下手。比如国内的亿信华辰跟国外的Tableau,QLK, PowerBI 都有非常多便于分析的可视化工具,但是在数据处理分析的功能性上,与SAS, Micr…...
网站界面设计实训报告/网站推广怎么做
今天在国外的网站上看到了很多看似简单却又非常强大的纯CSS绘制的图形,里面有最简单的矩形、圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和网站小图标,真的非常强大,分享给大家。 Square(正方形) #square {widt…...
wordpress pdf 下载/中国万网登录入口
《认识计算机》教案设计 [课 题] 认识计算机 [教学目的与要求] (1)能够了解计算机各部分的名称及作用。 (2) 培养学生的观察和自主学习的能力。 [课时安排] 1课时。 [教学重点与难点] (1)计算机是一个由多种设备组合在一起的整体。 (2)正确认识计算机各部分的名称及作用。 [教学…...