MyBatis是Java目前主流的ORM框架,在Spring Boot中使用MyBatis可以参考这篇文章:http://www.ityouknow.com/springboot/2016/11/06/spring-boot-mybatis.html
这篇文章来将介绍MyBatis Generator,(简称MBG,下文使用这个简称),该插件可以很方便的生成实体类、Mapper接口代码等,提高开发效率,它有点像.NET的EF框架中的DB First。另外,顺便介绍Spring Boot如何集成Swagger。
一、添加pom配置
(1)既然是像EF的DB First,那需要先建好数据库,可以先在MySQL中执行以下SQL脚本:
create database generatortest default character set utf8mb4 collate utf8mb4_unicode_ci;
use generatortest;
create user ' generatortest ' @' localhost ' identified by ' generatortest123 ' ;
grant all privileges on generatortest.* to ' generatortest ' @' localhost ' ;
flush privileges ;
CREATE TABLE `user `
(
id INT NOT NULL AUTO_INCREMENT COMMENT ' 用户ID ' ,
user_name VARCHAR (50 ) NOT NULL COMMENT ' 用户名 ' ,
`password` VARCHAR (50 ) NOT NULL COMMENT ' 密码 ' ,
email VARCHAR (50 ) COMMENT ' 邮箱 ' ,
avatar VARCHAR (255 ) COMMENT ' 头像 ' ,
create_time DATETIME NOT NULL COMMENT ' 创建时间 ' ,
update_time DATETIME NOT NULL COMMENT ' 更新时间 ' ,
deleted TINYINT (1 ) default 0 COMMENT ' 逻辑删除 ' ,
PRIMARY KEY (id)
);
ALTER TABLE `user ` COMMENT ' 用户表 ' ;
CREATE TABLE role
(
id INT NOT NULL AUTO_INCREMENT COMMENT ' 角色ID ' ,
role_name VARCHAR (50 ) NOT NULL COMMENT ' 角色名 ' ,
enabled TINYINT (1 ) default 1 NOT NULL COMMENT ' 有效标志 ' ,
create_time DATETIME NOT NULL COMMENT ' 创建时间 ' ,
update_time DATETIME NOT NULL COMMENT ' 更新时间 ' ,
deleted TINYINT (1 ) default 0 NOT NULL COMMENT ' 逻辑删除 ' ,
PRIMARY KEY (id)
);
ALTER TABLE role COMMENT ' 角色表 ' ;
CREATE TABLE permission
(
id INT NOT NULL AUTO_INCREMENT COMMENT ' 权限ID ' ,
permission_name VARCHAR (50 ) NOT NULL COMMENT ' 权限名称 ' ,
permission_value VARCHAR (200 ) NOT NULL COMMENT ' 权限值 ' ,
PRIMARY KEY (id)
);
ALTER TABLE permission COMMENT ' 权限表 ' ;
CREATE TABLE user_role
(
user_id INT NOT NULL COMMENT ' 用户ID ' ,
role_id INT NOT NULL COMMENT ' 角色ID '
);
ALTER TABLE user_role COMMENT ' 用户角色关联表 ' ;
CREATE TABLE role_permission
(
role_id INT NOT NULL COMMENT ' 角色ID ' ,
permission_id INT NOT NULL COMMENT ' 权限ID '
);
ALTER TABLE role_permission COMMENT ' 角色权限关联表 ' ;
View Code
(2)新建Maven项目,还不知道怎么用VS Code建Maven项目的可以参考这篇文章;
(3)添加相关Maven文件:
< dependency >
< groupId > mysqlgroupId >
< artifactId > mysql-connector-javaartifactId >
dependency >
< dependency >
< groupId > org.mybatisgroupId >
< artifactId > mybatisartifactId >
< version > 3.4.5version >
dependency >
< dependency >
< groupId > org.mybatis.generatorgroupId >
< artifactId > mybatis-generator-coreartifactId >
< version > 1.3.7version >
dependency >
二、添加MyBatis Generator配置文件
(1)在application.properties文件中添加MySQL数据连接配置:
spring.datasource.url=jdbc:mysql://localhost:3306/generatortest?serverTimezone=UTC&useUnicode =true&characterEncoding =utf-8&useSSL =true
spring.datasource.username=generatortest
spring.datasource.password=generatortest123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
(2)在src\main\resources目录下新建generatorConfig.xml配置文件,添加如下配置:
xml version="1.0" encoding="UTF-8" ?>
DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
< generatorConfiguration >
< properties resource ="application.properties" />
< context id ="MySqlContext" targetRuntime ="MyBatis3Simple" defaultModelType ="flat" >
< property name ="autoDelimitKeywords" value ="true" />
< property name ="beginningDelimiter" value ="`" />
< property name ="endingDelimiter" value ="`" />
< plugin type ="org.mybatis.generator.plugins.ToStringPlugin" />
< plugin type ="org.mybatis.generator.plugins.SerializablePlugin" />
< commentGenerator >
< property name ="suppressDate" value ="true" />
commentGenerator >
< jdbcConnection driverClass ="${spring.datasource.driver-class-name}"
connectionURL ="${spring.datasource.url}"
userId ="${spring.datasource.username}"
password ="${spring.datasource.password}" >
< property name ="nullCatalogMeansCurrent" value ="true" />
jdbcConnection >
< javaTypeResolver >
< property name ="useJSR310Types" value ="true" />
javaTypeResolver >
< javaModelGenerator targetPackage ="com.example.demo.model" targetProject ="src/main/java" />
< javaClientGenerator type ="ANNOTATEDMAPPER" targetPackage ="com.example.demo.mapper" targetProject ="src/main/java" />
< table tableName ="%" >
< generatedKey column ="id" sqlStatement ="Mysql" identity ="true" />
table >
context >
generatorConfiguration >
接下来分析generatorConfig.xml配置:
元素
非必选元素,用于指定一个需要在配置中解析使用的外部属性文件。这里引入application.properties配置文件,下文<jdbcConnection > 元素用到;
元素
必选元素,可以有多个,用必选属性id 区分;
targetRuntime 属性:默认值为MyBatis3;
MyBatis3 :MBG将生成与MyBatis 3.0及以上版本兼容的对象,以及与JSE 5.0及以上版本兼容的对象。同时生成“by example”方法,用于构建动态where字句;
MyBatis3Simple :比MyBatis3少生成“by example”方法;
defaultModelType 属性:值为flat时,每一张表只生成一个实体类,这个实体类包含表中的所有字段;
元素
非必选元素,以下三个属性设置是针对MySQL数据库的:
< property name ="autoDelimitKeywords" value ="true" />
< property name ="beginningDelimiter" value ="`" />
< property name ="endingDelimiter" value ="`" />
假设在Mysql数据库中有一个表名为user detail,中间是一个空格,这种情况下如果写出select * from user detail这样的语句,是会报错的;
Mysql中,一般会写成样子:select * from `user detail `
以上三个配置属性就是当表名或者字段名为SQL关键字时,自动加 ` 前后分隔符;
元素
非必选元素,用来定义一个插件。插件用于扩展或修改MBG代码生成器生成的代码;
元素
非必选元素,最多配置一个;
suppressAllComments 属性:值 为true时,阻止生成注释,默认为false;
suppressDate 属性:值为true时,阻止生成包含时间戳的注释,默认为false;
元素
必选元素,且只能有一个,用于指定数据库连接信息;
driverClass :必选属性,访问数据库的JDBC驱动程序的完全限定类名;
connectionURL :必选属性,访问数据库的JDBC连接URL;
userId :非必选属性,访问数据库的用户ID;
Password :非必选属性,访问数据库的密码;
元素
非必选元素,最多配置一个,用于指定JDBC类型和Java类型如何转换;
useJSR310Types :当值为true时,会进行如下转换,其中java.time.LocalDateTime和.NET中的DateTime最为相似;
JDBC Type
Resolved Java Type
DATE
java.time.LocalDate
TIME
java.time.LocalTime
TIMESTAMP
java.time.LocalDateTime
元素
必选元素,而且最多一个,用于控制生成的实体类;
targetPackage :必选属性,生成实体类存放的包名;
targetProject :必选属性,指定targetPackage 路径,可以是绝对路径或相对路径;
元素
非必选元素,最多配置一个,用于生成Mapper接口代码,不配置就不生成;
Type=” ANNOTATEDMAPPER” :生成基于注解的Mapper接口,不会有对应的XML映射文件;
Type=” XMLMAPPER” :所有的方法都在XML中,接口调用依赖XML文件;
targetPackage :必选属性,生成Mapper接口代码存放的包名;
targetProject :必选属性,指定targetPackage 路径,可以是绝对路径或相对路径;
元素
必选元素,可以有多个,tableName="%" 时生成所有表;
子元素 ,可选元素,最多一个,用于指定自动生成主键的属性;
Column :必选属性,生成列的列名;
sqlStatement :必选属性,使用一个预定义的的值返回新的SQL语句;
Identity :可选属性,是否为唯一标志列,默认为false;
三、运行MBG
(1)在项目中创建Generator类,添加一个main方法,写上如下代码:
public static void main(String[] args) throws Exception {
List warnings = new ArrayList();
boolean overwrite = true ;
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(
Generator. class .getResourceAsStream("/generatorConfig.xml"));
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate( null );
}
(2)点击Run,可以看到生成的实体类和Mapper接口代码
生成代码结构
四、使用MBG生成的代码
(1)pom.xml中添加如下配置,然后保存;
< dependency >
< groupId > org.springframework.bootgroupId >
< artifactId > spring-boot-starter-webartifactId >
dependency >
< dependency >
< groupId > org.mybatis.spring.bootgroupId >
< artifactId > mybatis-spring-boot-starterartifactId >
< version > 2.0.0version >
dependency >
(2)编写控制器代码,调用MBG生成的Mapper接口代码
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@RequestMapping(value = "/getUsers", method=RequestMethod.GET)
public List getUsers() {
List users=userMapper.selectAll();
return users;
}
@RequestMapping(value = "/getUser/{id}", method=RequestMethod.GET)
public User getUser(@PathVariable("id") Integer id) {
User user =userMapper.selectByPrimaryKey(id);
return user;
}
@RequestMapping(value = "/add", method=RequestMethod.POST)
public void save(@RequestBody User user) {
if (user.getCreateTime()==null )
user.setCreateTime(LocalDateTime.now(Clock.system(ZoneId.of( "Asia/Shanghai"))));
if (user.getUpdateTime() == null )
user.setUpdateTime(LocalDateTime.now(Clock.system(ZoneId.of( "Asia/Shanghai"))));
userMapper.insert(user);
}
@RequestMapping(value = "/update", method=RequestMethod.PUT)
public void update(@RequestBody User user) {
userMapper.updateByPrimaryKey(user);
}
@RequestMapping(value = "/delete/{id}", method=RequestMethod.DELETE)
public void delete(@PathVariable("id") Integer id) {
userMapper.deleteByPrimaryKey(id);
}
}
其中UserMapper通过注解@Autowired 注入进来。
(3)在application.properties配置文件中加上:
mybatis.type-aliases-package=com.example.demo.model
(4)在启动类中添加对 mapper 包扫描@MapperScan
五、Spring Boot中集成Swagger,方便接口调用
(1)pom.xml中添加支持swagger的模块,然后保存。
< dependency >
< groupId > io.springfoxgroupId >
< artifactId > springfox-swagger2artifactId >
< version > 2.9.2version >
dependency >
< dependency >
< groupId > io.springfoxgroupId >
< artifactId > springfox-swagger-uiartifactId >
< version > 2.9.2version >
dependency >
(2)添加SwaggerConfig配置文件:
public class SwaggerConfig {
@Bean
public Docket swaggerSpringMvcPlugin() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation. class )).build();
}
}
(3)为每个接口添加@ApiOperation 注解,如下:
@ApiOperation(value = "获取所有用户信息" , notes = "返回所有用户信息")
最后运行程序,浏览器打开:http://localhost:8080/swagger-ui.html
源码地址:https://github.com/Bingjian-Zhu/MybatisGeneatorDemo.git
转载于:https://www.cnblogs.com/FireworksEasyCool/p/11133827.html
你可能感兴趣的:(Spring Boot使用MyBatis Generator、Swagger)
避免检测:安卓模拟器/安卓虚拟机/root环境
圣道寺
日常使用 android
目录标题可选方案问题解决XposedInstallermagisk安装报错:Unabletodetecttargetimage如何避免模拟器被检测可选方案如果你想要避免某些安卓应用检测到你正在使用安卓虚拟机,你可以尝试以下方法。但请注意,这些操作可能违反了应用的使用条款,因此请在遵守相关法规和条款的前提下进行操作。修改虚拟机设备信息:一些应用会检查设备的制造商、型号等信息。你可以使用一些工具来修改
使用Docker部署一个使用PostgreSQL数据库的Springboot项目
youtian.L
Docker系列教程 数据库 docker spring boot java 容器
1-我们将建造什么?出于演示目的,我们将创建一个简单的食谱管理应用程序,其中包含两个实体:Chef和Recipe。编辑2-创建一个springboot应用程序为此,如果您使用IntelliJidea.并选择以下依赖项:SpringWeb,PostgreSQLDriver当然SpringDataJPA还要确保选择maven作为项目经理。编辑安装项目后,将其解压缩并使用您喜欢的IDE打开它。如第一部分
Golang面试题四(并发编程)
os-lee
go高级 golang 开发语言 后端
目录1.Go常见的并发模型2.哪些方法安全读写共享变量3.如何排查数据竞争问题4.Go有哪些同步原语1.Mutex(互斥锁)2.RWMutex(读写互斥锁)3.Atomic3.1.使用场景3.2.整型操作3.3.指针操作3.4.使用示例4.Channel使用场景使用示例5.sync.WaitGroup使用场景使用示例内部结构关键方法源码解析内部实现细节6.sync.Once使用场景使用示例实现原理
【linux性能优化】系统启动参数
温柔如酒
linux性能优化 linux 数据库 运维
grubby-c/boot/grub2/grub.cfg--update-kernel=ALL--args=“raid=noautodetectswiotlb=16384crashkernel=16M,lowcrashkernel=512M,highmodprobe.blacklist=virtio_nettransparent_hugepage=neveracpi_force_table_ver
ubuntu创建普通用户,删除用户,修改用户密码,修改用户名
温柔如酒
linux ubuntu ubuntu linux 运维
创建用户名为user的用户1.进入root权限账号su2.添加普通用户名useradduser3.设置普通用户密码passwduser4.修改用户登入后所使用的shellusermod-s/bin/bashuser5.设置家目录usermod-d/home/useruser6.创建家目录目录mkdir/home/user7.改变目录拥有者和组,(将/home/user下的所有文件的用户组改成use
Linux系统下DPDK源码编译,testpmd的使用以及编译过程中遇到的问题,以及高版本DPDK meson+ninja编译步骤
温柔如酒
DPDK linux 运维 网络
一.dpdk-20.081.首先,下载以及编译依赖库安装:ubuntu:apt-getinstalllibnuma-devcentos:yuminstalllibnuma-devel以及yuminstallnumactl-devel官网下载DPDK源码,DPDK官网:dpdk.org以dpdk-20.08为例,下载完成后,cd到源码所在路径1.指定DPDK安装路径,设置所需的环境变量并转到源目录e
QML音视频实时通信
QT性能优化QT原理源码QT界面美化
qt qt6.3 qt5 QT教程 c++ 音视频
QML音视频实时通信使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频免费看免费QT视频课程QT界面美化视频免费看1QML与音视频实时通信概述1.1QML音视频技术发展背景1.1.1QML音视频技
QML Web云应用开发
QT性能优化QT原理源码QT界面美化
qt qt6.3 qt5 QT教程 c++
QMLWeb云应用开发使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频免费看免费QT视频课程QT界面美化视频免费看1QML与Web技术概述1.1QML与Web技术简介1.1.1QML与Web技术
QT硬件接口设计
QT性能优化QT原理源码QT界面美化
qt qt6.3 qt5 QT教程 c++
QT硬件接口设计使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频免费看免费QT视频课程QT界面美化视频免费看1QT硬件接口设计概述1.1QT硬件接口设计简介1.1.1QT硬件接口设计简介QT硬件
【QT教程】QML音视频效果实现 QT音视频
QT性能优化QT原理源码QT界面美化
qt qt6.3 qt5 c++ QT教程
QML音视频效果实现使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频免费看免费QT视频课程QT界面美化视频免费看1QML与音视频效果1.1QML简介1.1.1QML简介QML简介QML简介QML
WebClient和RestTemplate的差异
master_chenchengg
能力提升 面试宝典 技术 IT信息化
WebClient和RestTemplate的差异引言RestTemplate的历史背景与适用场景WebClient的诞生背景及其优势编程模型对比错误处理机制的区别性能考量未来发展方向实际应用案例分享引言在当今互联网时代,服务间的通信是构建分布式系统不可或缺的一部分。Spring框架作为Java生态系统中最受欢迎的企业级开发框架之一,提供了多种工具来简化HTTP请求的处理。其中,WebClient
MySQL第三次实验
Z字小熊饼干爱吃保安
mysql 数据库
一、建库建表1、创建数据库mydb11_stu并使用数据库mysql>createdatabasemydb11_stu;QueryOK,1rowaffected(0.01sec)mysql>showdatabases;+--------------------+|Database|+--------------------+|information_schema||mydb10_city||myd
Vue 开发者的 React 实战指南:状态管理篇
对于Vue开发者来说,React的状态管理可能是最需要转变思维方式的部分之一。本文将从Vue开发者熟悉的角度出发,详细介绍React的状态管理方案,并通过实战示例帮助你快速掌握。本地状态管理对比Vue的响应式系统在Vue中,我们习惯使用data选项来定义组件的本地状态:{{count}}+1exportdefault{data(){return{count:0}},methods:{increme
vue3大屏可视化项目,包含地图,各种 图表,全屏适配方案
m0_74825526
javascript 开发语言 ecmascript
项目设计1.始终满屏适配,这种方案一般用在屏幕变化不会特别的大项目,项目基本上不会用在比例非常不协调的大屏,设计图按1920*1080标准电脑屏幕比,所用的屏幕也基本在这个比例左右2.涉及图表知识点简单,主要有自定义色系,环形图,堆叠柱状图,折线图3.使用高德地图标点做中间地图满屏适配方案实现思路1宽度使用vw,高度使用vh,严格按照设计图换算,并且留出缓冲空间2具体算法,设计图为1920_108
Vue的动态绑定
m0_74169345
javascript 前端 vue.js
Vue的动态绑定是其核心功能之一,通过它可以实现数据与视图之间的双向绑定,当数据发生变化时,视图会自动更新,反之亦然。以下是几种常见的动态绑定方式:数据绑定插值表达式:使用双大括号{{}}将数据插入到模板中。例如{{message}},当message数据发生变化时,页面上对应的位置会自动更新显示新的值。这种方式主要用于文本内容的绑定。v-text指令:与插值表达式类似,也是用于绑定文本内容。例如
WebSocket 基础入门:协议原理与实现
在现代网页应用中,WebSocket就像是一条永不断开的高速公路,让客户端和服务器之间的实时通信变得畅通无阻。记得在一个实时协作项目中,我们通过使用WebSocket,让用户的操作延迟从300ms降到了50ms。今天,我想和大家分享WebSocket的基础知识和实现方案。WebSocket是什么?WebSocket是一种在单个TCP连接上进行全双工通信的协议。它提供了在客户端和服务器之间建立持久连
Python基于matplotlib-scalebar库绘制比例尺
懒大王爱吃狼
python python matplotlib 开发语言 自动化 Python基础 opencv
在Python中,你可以使用matplotlib-scalebar库来在图表上绘制比例尺。这个库是matplotlib的一个扩展,专门用于在绘图时添加比例尺。以下是一个简单的示例,展示了如何使用matplotlib-scalebar来绘制带有比例尺的图表。首先,你需要安装matplotlib-scalebar库。如果你还没有安装它,可以使用以下命令来安装:pipinstallmatplotlib-
docekr在 x86d的 环境下打包arm64架构的docker包
学习中的程序媛~
架构 docker 容器
buildx简介buildx可用于在单个平台上实现跨CPU架构编译。buildx的实现依赖QEMU(某开源模拟器),支持多种CPU架构,如ARM、Power-PC和RISC-V。需要注意:buildx推送镜像时,不会走主机的hosts文件,默认使用https协议关于QEMUQEMU可以模拟一个完整的操作系统(开销较大)。QEMU还有一种用户态模式,基于binfmt_misc模拟目标硬件的用户空间,
2、Flink 在 DataStream 和 Table 之间进行转换
猫猫爱吃小鱼粮
Flink SQL flink 大数据
1.概述TableAPI和DataStreamAPI都可以处理有界流和无界流。DataStreamAPI提供了流处理的基础(时间、状态和数据流管理);TableAPI抽象了许多内部内容,并提供了一个结构化和声明性的API;在处理历史数据时,需要管理有边界的流;无边界流出现在实时处理场景中,这些场景可能需要先使用历史数据进行初始化。为了高效执行,这两个API都以优化的批处理执行模式处理有界流。由于批
具体毕设方案100例之第4例STM32智能家居烟雾温度火灾防盗报警系统设计版本1
李学长单片机毕设
单片机毕设具体方案 stm32 智能家居 毕业设计 51单片机 嵌入式硬件
使用STM32单片机进行数据处理任务。通过LCD1602液晶显示屏实时显示当前的烟雾浓度值。利用按键功能,用户可以设置烟雾浓度报警的上限值。当检测到的烟雾浓度超过预设的上限值时,启动蜂鸣器进行声光报警。
vue 前端优化性能优化方法
lfl18326162160
vue.js 前端 javascript
1.列表使用唯一keyv-for="iteminactiveList":key="item.id"原因是不使用key或者列表的index作为key的时候,每个元素对应的位置关系都是index,直接导致我们插入的元素到后面的全部元素,对应的位置关系都发生了变更,所以在patch过程中会将它们全都执行更新操作,再重新渲染。这可不是我们想要的,我们希望的是渲染添加的那一个元素,其他四个元素不做任何变更,
Python WebSocket服务器介绍
一只会写程序的猫
Python python websocket 服务器
PythonWebSocket服务器介绍WebSocket是一种在Web浏览器和服务器之间实现全双工通信的协议。它允许服务器主动发送消息到浏览器,而不需要浏览器发起请求。Python提供了许多库和框架来实现WebSocket服务器,本文将介绍如何使用Python构建一个简单的WebSocket服务器。WebSocket协议和工作原理WebSocket协议是通过HTTP协议的升级实现的。在HTTP协
python如何读取csv文件?
gaogsf
Python python 开发语言
CSV(CommaSeparatedValues)文件是一种常见的文件格式,它将数据以逗号分隔的形式存储,通常用于存储表格数据。在Python中,我们可以使用多种方法来读取CSV文件,本文将从多个角度分析Python如何读取CSV文件。一、Python内置的csv库Python内置了csv库,可以使用该库中的reader对象来读取CSV文件。下面是一个示例代码:importcsvwithopen(
QML学习 —— 34、视频媒体播放器(附源码)
[無限進步]
QML qml 音视频 媒体播放器
效果 说明 您可以单独使用MediaPlayer播放音频内容(如音频),也可以将其与VideoOutput结合使用以渲染视频。VideoOutput项支持未转换、拉伸和均匀缩放的视频演示。有关拉伸均匀缩放演示文稿的描述,请参见fillMode属性描述。 播放可能出错问题出现的问题: DirectShowPlayerService::doRender:Unresolvederrorc
在 Python 中使用 PyPDF2 向 PDF 文件批量添加水印
信息科技云课堂
python pdf
目录:使用PyPDF2添加水印到PDF文件批量添加水印到PDF文件所有页PDF文件广泛用于不同的设备和平台上,在某些情况下,可能需要在PDF文件中申明版权,需要将水印、条形码、二维码等添加到PDF中。PyPDF2提供了一种将另一个PDF文件作为水印,添加到PDF文件的方法。在下面的示例中,制作一个PDF水印文档,可以加入文字、二维码,通过合并的方法为PDF文件添加水印。使用PyPDF2添加水印到P
MyBatis(五)动态SQL
画船听雨眠aa
mybatis sql java
目录一、介绍二、if标签三、where标签四、choose-when-otherwise标签五、foreach标签七、trim标签八、提取公用的SQL语句一、介绍动态SQL是MyBatis的强大特性之一。在JDBC或其它类似的框架中,开发人员通常需要手动拼接SQL语句。根据不同的条件拼接SQL语句是一件极其痛苦的工作。例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态S
C#语言的数据结构
技术的探险家
包罗万象 golang 开发语言 后端
C#语言的数据结构探讨数据结构是计算机科学中一种用于组织、存储和管理数据的方式。有效地使用数据结构能使算法更加高效,并提高程序的性能。在C#语言中,我们可以构建和使用多种数据结构,以满足不同的需求。本文将介绍C#中的常用数据结构,包括数组、链表、栈、队列、哈希表、树和图等,并探讨它们的特点、实现和应用场景。1.数组数组是一种最基础且常用的数据结构。它是一个固定大小的线性结构,可以通过索引访问其中的
《智守数据堡垒——AI驱动的MySQL数据治理合规框架》
墨夶
数据库学习资料2 人工智能 mysql 数据库
在当今数字化转型加速的时代,企业面临着前所未有的数据挑战。一方面,海量的数据为企业带来了巨大的商业价值;另一方面,如何确保这些数据的安全性、一致性和合法性成为了亟待解决的问题。尤其是在金融、医疗等高度监管行业中,任何数据泄露或不当使用都可能导致严重的法律后果和社会影响。为此,构建一个既高效又能满足法律法规要求的数据治理体系显得尤为重要。今天,我们将探讨一种创新性的解决方案——利用人工智能(AI)技
用Python进行websocket接口测试
代码小念
软件测试 自动化测试 技术分享 python websocket 开发语言
这篇文章主要介绍了用Python进行websocket接口测试,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下我们在做接口测试时,除了常见的http接口,还有一种比较多见,就是socket接口,今天讲解下怎么用Python进行websocket接口测试。SocketSocket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可
2024-12-01百度TTS语音
坐吃山猪
AI训练 AI编程
百度TTS语音个人尝试代码仓库:https://gitee.com/enzoism/chrome_tampermonkey鸣谢:感谢每一位无私奉献的传道者,在此不一一具名!1-学习目标1)了解百度TTS语音2)使用百度TTS语音2-参考网址个人尝试代码仓库:https://gitee.com/enzoism/chrome_tampermonkey1-应用列表查看地址:https://console
JVM StackMapTable 属性的作用及理解
lijingyao8206
jvm 字节码 Class文件 StackMapTable
在Java 6版本之后JVM引入了栈图(Stack Map Table)概念。为了提高验证过程的效率,在字节码规范中添加了Stack Map Table属性,以下简称栈图,其方法的code属性中存储了局部变量和操作数的类型验证以及字节码的偏移量。也就是一个method需要且仅对应一个Stack Map Table。在Java 7版
回调函数调用方法
百合不是茶
java
最近在看大神写的代码时,.发现其中使用了很多的回调 ,以前只是在学习的时候经常用到 ,现在写个笔记 记录一下
代码很简单:
MainDemo :调用方法 得到方法的返回结果
[时间机器]制造时间机器需要一些材料
comsci
制造
根据我的计算和推测,要完全实现制造一台时间机器,需要某些我们这个世界不存在的物质
和材料...
甚至可以这样说,这种材料和物质,我们在反应堆中也无法获得......
 
开口埋怨不如闭口做事
邓集海
邓集海 做人 做事 工作
“开口埋怨,不如闭口做事。”不是名人名言,而是一个普通父亲对儿子的训导。但是,因为这句训导,这位普通父亲却造就了一个名人儿子。这位普通父亲造就的名人儿子,叫张明正。 张明正出身贫寒,读书时成绩差,常挨老师批评。高中毕业,张明正连普通大学的分数线都没上。高考成绩出来后,平时开口怨这怨那的张明正,不从自身找原因,而是不停地埋怨自己家庭条件不好、埋怨父母没有给他创造良好的学习环境。
jQuery插件开发全解析,类级别与对象级别开发
IT独行者
jquery 开发 插件 函数
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给
jQuery添加新的全局函数,相当于给
jQuery类本身添加方法。
jQuery的全局函数就是属于
jQuery命名空间的函数,另一种是对象级别的插件开发,即给
jQuery对象添加方法。下面就两种函数的开发做详细的说明。
1
、类级别的插件开发 类级别的插件开发最直接的理解就是给jQuer
Rome解析Rss
413277409
Rome解析Rss
import java.net.URL;
import java.util.List;
import org.junit.Test;
import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.S
RSA加密解密
无量
加密 解密 rsa
RSA加密解密代码
代码有待整理
package com.tongbanjie.commons.util;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerat
linux 软件安装遇到的问题
aichenglong
linux 遇到的问题 ftp
1 ftp配置中遇到的问题
500 OOPS: cannot change directory
出现该问题的原因:是SELinux安装机制的问题.只要disable SELinux就可以了
修改方法:1 修改/etc/selinux/config 中SELINUX=disabled
2 source /etc
面试心得
alafqq
面试
最近面试了好几家公司。记录下;
支付宝,面试我的人胖胖的,看着人挺好的;博彦外包的职位,面试失败;
阿里金融,面试官人也挺和善,只不过我让他吐血了。。。
由于印象比较深,记录下;
1,自我介绍
2,说下八种基本类型;(算上string。楼主才答了3种,哈哈,string其实不是基本类型,是引用类型)
3,什么是包装类,包装类的优点;
4,平时看过什么书?NND,什么书都没看过。。照样
java的多态性探讨
百合不是茶
java
java的多态性是指main方法在调用属性的时候类可以对这一属性做出反应的情况
//package 1;
class A{
public void test(){
System.out.println("A");
}
}
class D extends A{
public void test(){
S
网络编程基础篇之JavaScript-学习笔记
bijian1013
JavaScript
1.documentWrite
<html>
<head>
<script language="JavaScript">
document.write("这是电脑网络学校");
document.close();
</script>
</h
探索JUnit4扩展:深入Rule
bijian1013
JUnit Rule 单元测试
本文将进一步探究Rule的应用,展示如何使用Rule来替代@BeforeClass,@AfterClass,@Before和@After的功能。
在上一篇中提到,可以使用Rule替代现有的大部分Runner扩展,而且也不提倡对Runner中的withBefores(),withAfte
[CSS]CSS浮动十五条规则
bit1129
css
这些浮动规则,主要是参考CSS权威指南关于浮动规则的总结,然后添加一些简单的例子以验证和理解这些规则。
1. 所有的页面元素都可以浮动 2. 一个元素浮动后,会成为块级元素,比如<span>,a, strong等都会变成块级元素 3.一个元素左浮动,会向最近的块级父元素的左上角移动,直到浮动元素的左外边界碰到块级父元素的左内边界;如果这个块级父元素已经有浮动元素停靠了
【Kafka六】Kafka Producer和Consumer多Broker、多Partition场景
bit1129
partition
0.Kafka服务器配置
3个broker
1个topic,6个partition,副本因子是2
2个consumer,每个consumer三个线程并发读取
1. Producer
package kafka.examples.multibrokers.producers;
import java.util.Properties;
import java.util.
zabbix_agentd.conf配置文件详解
ronin47
zabbix 配置文件
Aliaskey的别名,例如 Alias=ttlsa.userid:vfs.file.regexp[/etc/passwd,^ttlsa:.:([0-9]+),,,,\1], 或者ttlsa的用户ID。你可以使用key:vfs.file.regexp[/etc/passwd,^ttlsa:.: ([0-9]+),,,,\1],也可以使用ttlsa.userid。备注: 别名不能重复,但是可以有多个
java--19.用矩阵求Fibonacci数列的第N项
bylijinnan
fibonacci
参考了网上的思路,写了个Java版的:
public class Fibonacci {
final static int[] A={1,1,1,0};
public static void main(String[] args) {
int n=7;
for(int i=0;i<=n;i++){
int f=fibonac
Netty源码学习-LengthFieldBasedFrameDecoder
bylijinnan
java netty
先看看LengthFieldBasedFrameDecoder的官方API
http://docs.jboss.org/netty/3.1/api/org/jboss/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.html
API举例说明了LengthFieldBasedFrameDecoder的解析机制,如下:
实
AES加密解密
chicony
加密解密
AES加解密算法,使用Base64做转码以及辅助加密:
package com.wintv.common;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decod
文件编码格式转换
ctrain
编码格式
package com.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
mysql 在linux客户端插入数据中文乱码
daizj
mysql 中文乱码
1、查看系统客户端,数据库,连接层的编码
查看方法: http://daizj.iteye.com/blog/2174993
进入mysql,通过如下命令查看数据库编码方式: mysql> show variables like 'character_set_%'; +--------------------------+------
好代码是廉价的代码
dcj3sjt126com
程序员 读书
长久以来我一直主张:好代码是廉价的代码。
当我跟做开发的同事说出这话时,他们的第一反应是一种惊愕,然后是将近一个星期的嘲笑,把它当作一个笑话来讲。 当他们走近看我的表情、知道我是认真的时,才收敛一点。
当最初的惊愕消退后,他们会用一些这样的话来反驳: “好代码不廉价,好代码是采用经过数十年计算机科学研究和积累得出的最佳实践设计模式和方法论建立起来的精心制作的程序代码。”
我只
Android网络请求库——android-async-http
dcj3sjt126com
android
在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通
ORACLE 复习笔记之SQL语句的优化
eksliang
SQL优化 Oracle sql语句优化 SQL语句的优化
转载请出自出处:http://eksliang.iteye.com/blog/2097999
SQL语句的优化总结如下
sql语句的优化可以按照如下六个步骤进行:
合理使用索引
避免或者简化排序
消除对大表的扫描
避免复杂的通配符匹配
调整子查询的性能
EXISTS和IN运算符
下面我就按照上面这六个步骤分别进行总结:
浅析:Android 嵌套滑动机制(NestedScrolling)
gg163
android 移动开发 滑动机制 嵌套
谷歌在发布安卓 Lollipop版本之后,为了更好的用户体验,Google为Android的滑动机制提供了NestedScrolling特性
NestedScrolling的特性可以体现在哪里呢?<!--[if !supportLineBreakNewLine]--><!--[endif]-->
比如你使用了Toolbar,下面一个ScrollView,向上滚
使用hovertree菜单作为后台导航
hvt
JavaScript jquery .net hovertree asp.net
hovertree是一个jquery菜单插件,官方网址:http://keleyi.com/jq/hovertree/ ,可以登录该网址体验效果。
0.1.3版本:http://keleyi.com/jq/hovertree/demo/demo.0.1.3.htm
hovertree插件包含文件:
http://keleyi.com/jq/hovertree/css
SVG 教程 (二)矩形
天梯梦
svg
SVG <rect> SVG Shapes
SVG有一些预定义的形状元素,可被开发者使用和操作:
矩形 <rect>
圆形 <circle>
椭圆 <ellipse>
线 <line>
折线 <polyline>
多边形 <polygon>
路径 <path>
一个简单的队列
luyulong
java 数据结构 队列
public class MyQueue {
private long[] arr;
private int front;
private int end;
// 有效数据的大小
private int elements;
public MyQueue() {
arr = new long[10];
elements = 0;
front
基础数据结构和算法九:Binary Search Tree
sunwinner
Algorithm
A binary search tree (BST) is a binary tree where each node has a Comparable key (and an associated value) and satisfies the restriction that the key in any node is larger than the keys in all
项目出现的一些问题和体会
Steven-Walker
DAO Web servlet
第一篇博客不知道要写点什么,就先来点近阶段的感悟吧。
这几天学了servlet和数据库等知识,就参照老方的视频写了一个简单的增删改查的,完成了最简单的一些功能,使用了三层架构。
dao层完成的是对数据库具体的功能实现,service层调用了dao层的实现方法,具体对servlet提供支持。
&
高手问答:Java老A带你全面提升Java单兵作战能力!
ITeye管理员
java
本期特邀《Java特种兵》作者:谢宇,CSDN论坛ID: xieyuooo 针对JAVA问题给予大家解答,欢迎网友积极提问,与专家一起讨论!
作者简介:
淘宝网资深Java工程师,CSDN超人气博主,人称“胖哥”。
CSDN博客地址:
http://blog.csdn.net/xieyuooo
作者在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,