MyBatis故事:
官方网站: http://www.mybatis.org
官方文档: http://www.mybatis.org/mybatis-3/
GitHub:https://github.com/mybatis
通过在MyBatis的官方网站,我们会看到和MyBatis相关的一些软件产品:
MyBatis Migrations 是一款数据库迁移工具 http://www.mybatis.org/migrations ;
MyBatipse (Eclipse plugin) ,Eclipse插件提供在编写xml配置文件 时的内容提示和验证;
MyBatis Generator 代码生成工具;
What is MyBatis?
MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis SQL mapper framework for Java可以将其称之为Java持久层框架.
MyBatis 的前身是apache下的一个开源项目iBatis, iBATIS是一个由Clinton Begin 在2002年发起的开源项目,是一个基于Java的持久层框架。
iBATIS:http://ibatis.apache.org
iBATIS这个项目于2010年6月16号由apache迁移到了google code,iBatis3.x并且改名为MyBatis 。
MyBatis: http://code.google.com/p/mybatis/ (现在已经无法打开)
2013年11月MyBatis又从google code将代码迁移到Github。
MyBatis和Hibernate
MyBatis的作者:Clinton Begin 加拿大人 https://www.linkedin.com/in/clintonbegin
Hibernate 2001年推出的Java持久层框架,澳大利亚人 Gavin King https://www.linkedin.com/in/GavinKing
人们经常喜欢比较这两款优秀的持久层框架的特点:
技术
优点
缺点
jdbc
简单,纯粹,一切均可见,最基础的一种技术
1:需要手动关闭连接
2:结果集不能自动映射为对象
3:SQL夹杂在代码中,耦合度高,导致硬编码内伤
4:实际开发中SQL经常随需求变动,导致频繁修改,不易维护
jdbcTemplate
简单、纯粹、自动会话管理、结果集映射
需要手动拼装 SQL,SQL与Java代码混合在一起,长的SQL管理混乱
Hibernate
JPA
编程效率高,无需编写 SQL。 数据库更换成本低
较完善的二级缓存、自动防 SQL注入
完全掌握的门槛高 ; 复杂 SQL、复杂映射处理困难; 性能优化较麻烦、不易做特殊优化 ; 基于全映射的全自动框架,大量字段的 POJO进行部分映射时比较困难,导致数据库性能下降;
MyBatis
学习成本低、可以进行更为 细腻 的 SQL优化,减少查询字段、统一的SQL管理 SQL和 Java编码分开,功能边界清晰
需要手动编写维护 SQL、表结构变更之后需要手动维护SQL与映射;
MyBatis的定位
MyBatis专注于SQL本身,其为SQL映射,而非完整的SQL映射,它是一个半自动的ORM框架,需要自己编写SQL语句,这是其优点,也是缺点.
优点:SQL语句单独维护,便于SQL优化,便于发挥SQL的最大性能.
缺点:当数据库表和字段更改后,实体和数据库的映射关系需要手动维护,耗费时间长.
使用场景:是用于性能要求高,有大量的查询操作,适用于互联网项目,如:电商,O2O
互联网项目对持久层的需求:
1:对数据库的访问更加纯粹
2:尽可能不要使用数据库做运算
3:SQL语句尽可能命中索引(字段排序,查询字段,查询条件,尽可能命中索引)
MyBatis实战应用:
Mybatis框架就一个jar包;要使用 MyBatis, 只需将 mybatis-3.5.1.jar 文件置于 classpath 中即可。
使用Maven构建项目
org.mybatis
mybatis
3.5 .1
下载 MyBatis源码,构建 MyBatis 项目;https://codeload.github.com/mybatis/mybatis-3/zip/mybatis-3.5.1
如果不出意外,我们解压下载的压缩包,然后通过pom.xml导入IDEA中,通过Maven的compiler就可以正常编译成功,首次编译可能需要一定时间。
为了验证我么编译的项目是否可用,我们可以写一个简单的案例项目去测试一下,也方便后续的断点跟踪源码分析。
创建普通的Maven项目,添加Maven依赖
junit
junit
4.11
test
mysql
mysql-connector-java
5.1 .47
org.projectlombok
lombok
1.18 .8
org.slf4j
slf4j-api
1.7 .26
org.apache.logging.log4j
log4j-api
2.11 .2
org.apache.logging.log4j
log4j-slf4j-impl
2.11 .2
cglib
cglib
3.3 .0
org.javassist
javassist
3.27 .0 -GA
添加resources编译,个人建议添加
src/main/java
**/* .xml
src/main/resources
**/ *.*
添加jdbc.properties,根据自身配置
jdbc.username=xxx
jdbc.password =xxxxx
jdbc.driver =com.mysql.jdbc.Driver
jdbc.url =jdbc:mysql:// xxxx:3306/xxx?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false
最后贴上mybatis的xml配置
"1.0 " encoding=" UTF-8 " ?>
DOCTYPE configuration
PUBLIC " -//mybatis.org//DTD Config 3.0//EN "
" http://mybatis.org/dtd/mybatis-3-config.dtd " >
"D:\mybatis-3-mybatis-3.5.1\mybatis3-test\src\main\resources\jdbc.properties " />
"logImpl " value=" SLF4J " />
"cacheEnabled " value=" true " />
"com.xxx.model.User " alias=" User " />
"com.xxx.type.CryptHandlerType "
javaType =" com.xxx.model.IdCardType " />
default=" development " >
"development " >
"org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory " />
"POOLED " >
"driver " value=" ${jdbc.driver} " />
"url " value=" ${jdbc.url} " />
"username " value=" ${jdbc.username} " />
"password " value=" ${jdbc.password} " />
"test " >
"JDBC " />
"POOLED " >
"driver " value=" ${jdbc.driver} " />
"url " value=" ${jdbc.url} " />
"username " value=" ${jdbc.username} " />
"password " value=" ${jdbc.password} " />
"product " >
"JDBC " />
"POOLED " >
"driver " value=" ${jdbc.driver} " />
"url " value=" ${jdbc.url} " />
"username " value=" ${jdbc.username} " />
"password " value=" ${jdbc.password} " />
"com/xxx/mapper/UsersMapper.xml " />
日志配置
"1.0 " encoding=" UTF-8 " ?>
"debug " >
"Console " target=" SYSTEM_OUT " >
"%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n " />
"debug " >
ref=" Console " />
贴上本人的项目结构,仅供参考
MyBatis独立使用
// 通过配置文件获取输入流
InputStream resourceAsStream = Resources.getResourceAsStream(" mybatis-config.xml " );
// 构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 打开session
SqlSession sqlSession = sqlSessionFactory.openSession();
// 第四步 获取Mapper接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class );
// 第五步 调用Mapper接口对象的方法操作数据库
User user = mapper.selectByPrimaryKey(1 );
// 获取结果,处理业务
log.info(" 查询结果: " ,user.getId());
当我们数据库配置等都设置完毕,正常来说查询数据是不会出现异常的,这样就说明我们的源码编译是成功的。
MyBatis Generator (MBG)
MyBatis Generator 简称MBG,是用Java语言开发 的一个代码生成工具,可以深入分析你的数据库和表,帮助你生成基本的对数据库的 CRUD操作代码以及QBC风格的条件查询,但是表连接、存储过程等这些复杂SQL的定义需要我们手工编写。
MyBatis Generator 生成3个东西:
1、POJO
2、Mapper XML Files
3、Mapper interface
MyBatis Generator 生成代码不需要依赖任何第三方jar包,仅仅需要一个jdbc驱动包;
文档: http://www.mybatis.org/generator/
Github:https://github.com/mybatis/generator
原来 MyBatis Generator老版本:ibator,用于iBatis代码生成;
1、配置 MyBatis Generator (MBG) 的配置文件;
"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 " >
"jdbc.properties " />
"F:/mysql-connector-java-5.1.46.jar " />
"tables " targetRuntime=" MyBatis3 " >
"suppressAllComments " value=" true " />
"driverClass " value=" ${jdbc.driver} " />
"connectionURL " value=" ${jdbc.url} " />
"userId " value=" ${jdbc.username} " />
"password " value=" ${jdbc.password} " />
"org.mybatis.model " targetProject=" src/main/java " >
"enableSubPackages " value=" false " />
"trimStrings " value=" false " />
"org.mybatis.mapper " targetProject=" src/main/java " >
"enableSubPackages " value=" false " />
"XMLMAPPER " targetPackage=" org.mybatis.mapper " targetProject=" src/main/java " >
"enableSubPackages " value=" false " />
"user "
domainObjectName =" User "
enableCountByExample =" false "
enableUpdateByExample =" false "
enableDeleteByExample =" false "
enableSelectByExample =" false "
selectByExampleQueryId =" false " />
1、生成代码
--通过命令行生成 java -jar mybatis-generator-core-1.3.7.jar -configfile generatorConfig.xml ( 用得比较少 )
--通过Ant生成 ( ant几乎被淘汰了)
--通过java程序生成
--通过maven生成
org.mybatis.generator
mybatis-generator-maven-plugin
1.3 .7
src/main/resources/generatorConfig.xml
true
true
--通过Eclipse生成
建议不要用 mysql驱动8.0, 用 5.1.x系列的驱动;
使用maven插件通过以下方式即可自动生成。
在源码分析的前面,我会分享一些MyBatis的常规应用
你可能感兴趣的:(MyBatis源码分析(一))
AI大模型学习路线:从入门到精通的完整指南【2025最新】
AI大模型-大飞
人工智能 学习 大模型 LLM AI 程序员 大模型学习
引言近年来,以GPT、BERT、LLaMA等为代表的AI大模型彻底改变了人工智能领域的技术格局。它们不仅在自然语言处理(NLP)任务中表现卓越,还在计算机视觉、多模态交互等领域展现出巨大潜力。本文旨在为开发者、研究者和技术爱好者提供一条清晰的学习路径,帮助读者逐步掌握大模型的核心技术并实现实际应用。一、基础阶段:构建知识体系数学与理论基础线性代数:矩阵运算、特征值与奇异值分解是大模型参数优化的基础
android 时间的格式化问题
Shawn_LX
android中经常遇到要格式化时间,下面记录一下"yyyy-MM-dd”类型和”kk:mm:ss”类型的时间格式化方法:“staticSimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd");//只取年--月--日publicstaticintdiffDays(StringcompareTime){Calendarnow=Calen
android 自定义悬浮菜单
Shawn_LX
android中的自定义的悬浮菜单,其实就是一个dialog。类似于下图。代码如下:/***此类为自定义菜单Dialog**/publicclassMenuDialogextendsDialog{privatestaticfinalintH_NO_LOGIN=0;privatestaticfinalintH_REFRESH_VIEW=1;privateContextcontext;privateb
RabbitMQ 高级特性:从 TTL 到消息分发的全面解析 (下)
ngioig
RabbitMQ ruby 开发语言 后端
RabbitMQ高级特性RabbitMQ高级特性解析:RabbitMQ消息可靠性保障(上)-CSDN博客RabbitMQ高级特性:从TTL到消息分发的全面解析(下)-CSDN博客引言RabbitMQ作为一款强大的消息队列中间件,在分布式系统中发挥着至关重要的作用。除了基本的消息收发功能外,它还具备许多高级特性,如TTL、死信队列、延迟队列、事务和消息分发等。本文将详细介绍这些高级特性。1.TTL(
Your Battery Is a Blast! Safeguarding Against Counterfeit Batteries with Authentication 介绍
XLYcmy
论文阅读 网络安全 课程论文 机器学习 CCS 论文阅读 课程设计 大作业
本文主要围绕论文《YourBatteryIsaBlast!SafeguardingAgainstCounterfeitBatterieswithAuthentication》展开,这篇论文出自2023年丹麦哥本哈根举行的会议CCS’23,会议日期为2023年11月26日至30日。论文共有两个作者,一个是FrancescoMarchiori,来自意大利帕多瓦大学的Padua分校,其电子邮件地址为fr
苹果签名的战略价值:解析六大核心优势与商业赋能逻辑
ios
苹果签名的战略价值:解析六大核心优势与商业赋能逻辑(因篇幅过长所以分为两篇帖子发~)在iOS应用生态中,签名机制既是技术护城河,也是开发者突破分发限制的关键武器。本文将从开发效率、商业变现、安全管控等维度,深度剖析苹果签名体系带来的独特价值。一、突破AppStore审核壁垒,加速产品验证苹果签名最核心的优势在于规避冗长审核流程。根据2023年统计,AppStore平均审核周期为24小时,首次提交通
栈区、堆区、静态区
励志的小陈
c语言 开发语言
一、栈区(Stack)1.栈区是什么•栈区(Stack)是计算机内存中的一部分,用于存储程序运行时的临时数据。2.栈区的有关性质(1)存储临时数据•栈区主要用于存储局部变量(比如函数内部定义的变量)和函数调用时的上下文信息(比如返回地址和参数)。(2)后进先出•就像你把一张便签纸放在一堆便签纸的顶部,当你需要拿一张便签纸时,你总是先拿最上面的那张。在栈区中,最后被放入的数据会最先被取出。(3)自动
HarmonyOS Next ohpm-repo实战案例——搭建企业级私有仓库
harmonyos
在企业级开发环境中,搭建一个稳定、高效且安全的HarmonyOSNextohpm-repo私有仓库至关重要。它不仅能集中管理项目依赖的三方库,还能提升开发效率、保障代码安全。接下来,我们将从部署架构设计、包管理优化以及访问控制等方面,详细介绍企业级ohpm-repo私有仓库的搭建指南。企业级ohpm-repo部署架构设计(私有仓库+反向代理+多实例高可用架构)私有仓库ohpm-repo作为私有仓库
【CMake指南】第5篇:跨平台配置与工具链(实现多环境无缝构建)
JuicyActiveGilbert
CMake指南 嵌入式硬件 单片机 c++ CMake 教程
本文中的相关代码、文件皆为示例。1.跨平台路径处理1.1统一路径分隔符#将路径转换为当前平台的格式file(TO_CMAKE_PATH"/usr/local/include"NORMALIZED_PATH)message("转换后路径:${NORMALIZED_PATH}")#Windows输出:usr\local\include1.2路径拼接最佳实践#错误方式(硬编码分隔符)set(INC_PA
IP证书如何让企业提升网络信任度
ssl证书ip地址
IP证书,作为一种专门设计用于保护IP地址安全的数字证书,正逐渐成为提升企业网络信任度的关键工具。###IP证书申请入口申请时记得填写注册码230931,获取一对一技术支持一、身份验证与加密通信IP证书的核心在于通过PKI技术实现设备身份与IP地址的强绑定。当企业为服务器或设备部署IP证书后,通信双方通过交换证书验证身份,并协商对称密钥加密数据,确保通信的机密性与完整性。这一机制有效抵御了IP欺骗
代码签名证书:快速消除不安全警告!
ssl证书
一、代码签名证书的作用代码签名证书是由受信任的证书颁发机构(CA)颁发给软件开发者的数字证书,用于对软件代码进行数字签名。通过数字签名,开发者可以证明代码自签名以来未被篡改,从而确保软件的完整性和真实性。代码签名证书是消除“未知发布者”警告的最有效方式。二、如何申请和使用代码签名证书1、选择合适的证书类型:根据软件类型和开发需求,选择标准代码签名证书或EV代码签名证书。EV证书提供了更高级别的身份
80或者443端口不能开放也可签发的IP SSL证书
https
以IP地址来申请SSL证书的时候,通常需要以上传服务器文件的方式来验证IP地址的管理权限,这就涉及常规端口的开放,一般需要开放80或者443端口,如不能开放则无法签发SSL证书。DunTrust提供的IP地址证书,除了支持80或者443端口验证外,还支持其他端口验证。申请网址:www.yundunssl.comhttps://www.yundunssl.cn/下面是具体的申请流程注册账号:在Dun
【C语言】C语言数据类型和变量练习巩固
ChiaWei Lee
C语言 c语言 开发语言
1、关于scanf函数说法正确的是?A.scanf中也有占位符,占位符和后边的参数提供的地址一一对应。B.scanf()处理所有占位符时,会自动过滤起首的空白字符,包括空格、制表符、换行符C.scanf的占位符%s表示读取一个字符串,遇到空白字符也全部读取D.scanf是库函数,库函数不需要包含头文件正确答案:AB:scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符,sc
深度合成算法备案十大雷区拆解
AI产品备案
人工智能 算法 语言模型 ai
最近后台收到了很多小伙伴的私信,基本上都是在问算法备案被打回了;哪部分的材料有什么问题;不清楚驳回原因等等。今天结合大家最关心的问题,为大家详细剖析一下备案过程中常见的十大难题及解决方法。一、备案主体性质界定不明不少企业在备案过程中往往难以明确自身是否属于备案主体范围,尤其是涉及技术提供与应用服务的交叉领域,无法判断自身是否属于“具有舆论属性或者社会动员能力”主体。解决方案:仔细研读相关政策法规,
【技术实测】单一世界承载数万单位无分片同步!全球低延迟互动DEMO开放测试
微网兔子
後端技術 c++ 服务器 unity 后端 分布式
核心突破分散式同步引擎`实现三大关键指标:✅无分片架构-全域实体即时同步✅毫秒级延迟-跨洲网路优化✅万级货运-秒登入不排队万人单一世界最新技术测试影片目前,我们已实现一定的技术突破,并希望收集开发者的回馈,以确定下一步的优化方向。为了验证这项技术,我们部署了一个测试环境,具体情况如下:3万名玩家的即时互动3D测试环境(512×512平方米)已部署12,000个模拟客户端,开放18,000个名额给开
C++和C语言的区别有哪些
残余的记忆
c++ c语言 数据结构 开发语言
C++和C语言是两种不同的编程语言,虽然它们有许多相似之处,但是它们之间也存在着很多区别。本文将介绍C++和C语言之间的一些主要区别。1.面向对象编程C++是一种面向对象编程语言,相较于C语言,其具有更多的特性。面向对象编程(OOP)作为一种编程方法论,通过对数据进行封装、继承、多态等操作,来实现程序的灵活性和可维护性。C++提供了很多面向对象编程的特性,例如类、继承、多态等。这些特性能够让程序员
走出内卷的困局
盐论君
创业创新 社交电子 远程工作 求职招聘
《逃避自由》的作者若能体会《平凡的世界》中孙少平的苦难,就不会以一种消极的口吻提出:人们想要的自由是不需要负责任的自由。如果一个人连体会工作伦理的前提都不具备,那么我们不妨认为父辈们希望后代追求稳定的生活和工作是对的。对于一直生活在不稳定中的大多数人,自由是令人畏惧的,只有当他们拥有对抗这份恐惧的能力时,自由才能真正让人‘横眉冷对千夫指’,但想要做到这一点的前提恰恰是先要拥有一份较为稳定的工作,内
windows协议不再续签,华为再无windows可用,将于四月发布鸿蒙PC
国货崛起
华为 harmonyos
大家好,我是国货系创始人张云泽,最近不少小伙伴在后台问:“听说Windows协议要到期了?我的电脑会不会变砖?”还有人说:“华为笔记本以后用不了Windows了?鸿蒙系统能用吗?”今天咱们就唠唠这事儿,不整虚的!windows协议到期将不再续签,华为将于四月发布鸿蒙PC版一、普通用户的Windows协议到期,慌不慌?其实啊,Windows协议到期一般分两种情况:个人用户:比如用了临时激活码或者第三
【sklearn 04】DNN、CNN、RNN
@金色海岸
sklearn dnn cnn
DNNDNN(DeepNeuralNetworks,深度神经网络)是一种相对浅层机器学习模型具有更多参数,需要更多数据进行训练的机器学习算法CNNCNN(convolutionalNeuralNetworks,卷积神经网络)是一种从局部特征开始学习并逐渐整合的神经网络。卷积神经网络通过卷积层来进行特征提取,通过池化层进行降维,相比较全连接的神经网络,卷积神经网络降低了模型复杂度,减少了模型的参数,
【sklearn 02】监督学习、非监督下学习、强化学习
@金色海岸
sklearn 学习 人工智能
监督学习、非监督学习、强化学习**机器学习通常分为无监督学习、监督学习和强化学习三类。-第一类:无监督学习(unsupervisedlearning),指的是从信息出发自动寻找规律,分析数据的结构,常见的无监督学习任务有聚类、降维、密度估计、关联分析等。-第二类:监督学习(supervisedlearning),监督学习指的是使用带标签的数据去训练模型,并预测未知数据的标签。监督学习有两种,当预测
前端存储后端响应数据方式详解
z2637305611
前端
在前端存储后端响应数据是常见需求,可以优化性能(减少重复请求)、支持离线访问或提升用户体验。以下是超详细的实现方式和注意事项:一、前端存储后端数据的核心步骤1.获取后端数据使用fetch或axios发送请求://使用fetchfetch('https://api.example.com/data').then(response=>response.json()).then(data=>saveDa
养生,开启健康生活之门
yy0821yy
生活
在这个快节奏的时代,人们在忙碌奔波中,往往忽略了自身健康。养生保健,不再是老年人的专属,而是各个年龄段维持良好生活状态的关键,它是我们开启健康生活的一把钥匙。规律作息是养生的基石。人体就像一台精密的仪器,各个器官按照生物钟有条不紊地运转。熬夜追剧、通宵工作,看似是在争取时间,实则是在打乱身体的正常节奏。长期熬夜会导致内分泌失调,脸上冒出痘痘,精神萎靡不振,免疫力下降,各种疾病也容易找上门来。因此,
解锁健康密码:拥抱养生,重塑生活
yy0821yy
生活
在当下,快节奏的生活如汹涌浪潮,裹挟着我们一路向前。高强度的工作、繁杂的生活琐事,让人们在忙碌中常常忽略了自身健康。然而,健康并非从天而降的幸运,而是精心呵护的成果,养生则是开启健康之门的钥匙。饮食养生是基石。俗话说:“病从口入。”合理的饮食结构对健康至关重要。多摄入富含膳食纤维的粗粮,像燕麦、糙米,它们能促进肠道蠕动,预防便秘,降低心血管疾病风险。新鲜的蔬果更是必不可少,菠菜、橙子等富含维生素与
健康养生:活力生活的基石
yy0821yy
生活
在当下,生活节奏快得像飞驰的列车,我们在忙碌里穿梭,愈发明白健康才是最珍贵的财富。健康养生可不是一阵风似的潮流,它实实在在是开启活力生活的关键,精心呵护着我们身体与心灵的方方面面。就拿饮食来说,这可是健康养生的根基。践行均衡饮食,就如同为身体精心筹备一场满汉全席。多吃那些颜色鲜艳的蔬菜,像绿油油的西兰花,它富含维生素与矿物质,给身体补充满满的营养;还有红彤彤的番茄,既能抗氧化,又美味可口。水果也不
健康养生:滋养身心的生活智慧
yy0821yy
生活
健康养生,是一场与身体和心灵的对话,是对生命细致入微的呵护,它贯穿于生活的点滴之中,为我们开启优质生活的大门。情志养生在健康养生中占据重要地位。人的情绪如同四季的天气,或晴或雨,但长期的负面情绪如狂风暴雨,会冲击身体的健康防线。我们要学会保持平和、乐观的心态。当遇到挫折时,把它视为成长的机遇,以积极的思维去化解困难。比如,工作上的项目失败了,可以从中总结经验,看到自己提升的空间,而不是一味自责。平
健康养生:开启高品质生活之门
yy0821yy
生活
健康是人生最宝贵的财富,而养生则是守护健康的智慧之选。在快节奏的现代生活中,掌握健康养生之道,能让我们精力充沛地面对每一天。饮食养生首当其冲。我们应追求均衡饮食,确保每餐都有适量的碳水化合物、蛋白质、脂肪、维生素和矿物质。主食多选择粗粮,如燕麦、玉米等,它们富含膳食纤维,能促进肠道蠕动。优质蛋白质来源包括豆类、鱼类、鸡胸肉等,它们是身体修复和生长的基石。减少高油、高盐、高糖食物的摄入,多吃新鲜的蔬
数据产品赋能数字化转型
wengad
数字化转型 数据产品 人工智能 大数据
数据产品赋能数字化转型引言:数据产品的创新与发展:赋能决策智能化的钥匙一、数据产品的定义与特征二、数据产品的核心功能三、应用实践与案例分析四、未来展望引言:数据产品的创新与发展:赋能决策智能化的钥匙在数字化转型的浪潮下,数据已成为企业核心竞争力的关键要素。数据产品的出现,不仅是信息技术发展的必然产物,更是企业实现数据价值最大化、推动决策智能化的重要工具。本文旨在探讨数据产品的概念、功能特性、应用实
少样本数值型数据集 | 数据增强
蒜蓉趣多多
机器学习 人工智能 材料工程
对于小样本数字型数据集,数据增强的有效方法主要集中在创造新的样本、调整现有样本的特征、或者通过生成模型来模拟真实分布。下面是个人搜集到的方法及部分代码。希望对大家的科研/工作有所帮助!1.噪声注入(NoiseInjection)方法:在原始数据上添加少量的随机噪声,生成新的样本。噪声可以是高斯噪声、均匀分布噪声或其他分布的噪声。实现:对于每个特征,可以加上一个服从小均值和小方差的正态分布噪声,如X
33.从入门到精通:Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别
摘星月为妆。
Python从入门到精通 正则表达式
33.从入门到精通:Python3正则表达式re.match函数re.search方法re.match与re.search的区别Python3正则表达式re.match函数re.search方法re.match与re.search的区别Python3正则表达式在Python3中,可以使用re模块来进行正则表达式的匹配和处理。以下是一个简单的例子,说明如何使用re模块进行正则表达式匹配:import
ICC2 高效进阶:set_host_options 命令精解,数字后端设计必备!
数字后端物理设计知识库
icc2命令每日精要 后端 性能优化
在数字后端物理设计的战场中,效率就是生命,而ICC2的set_host_options命令就是助力各位工程师和学子们快速提升效率的神器!今天就带大家深入探索这个命令的奥秘,让复杂的配置变得轻松简单。一、set_host_options的核心价值这个命令专注于多核处理的灵活配置,无论是多线程、分布式处理还是并行任务执行,它都能轻松驾驭。通过精准定义主机资源、核心数以及提交协议等关键参数,工程师们可以
html
周华华
html
js
1,数组的排列
var arr=[1,4,234,43,52,];
for(var x=0;x<arr.length;x++){
for(var y=x-1;y<arr.length;y++){
if(arr[x]<arr[y]){
&
【Struts2 四】Struts2拦截器
bit1129
struts2拦截器
Struts2框架是基于拦截器实现的,可以对某个Action进行拦截,然后某些逻辑处理,拦截器相当于AOP里面的环绕通知,即在Action方法的执行之前和之后根据需要添加相应的逻辑。事实上,即使struts.xml没有任何关于拦截器的配置,Struts2也会为我们添加一组默认的拦截器,最常见的是,请求参数自动绑定到Action对应的字段上。
Struts2中自定义拦截器的步骤是:
make:cc 命令未找到解决方法
daizj
linux 命令未知 make cc
安装rz sz程序时,报下面错误:
[root@slave2 src]# make posix
cc -O -DPOSIX -DMD=2 rz.c -o rz
make: cc:命令未找到
make: *** [posix] 错误 127
系统:centos 6.6
环境:虚拟机
错误原因:系统未安装gcc,这个是由于在安
Oracle之Job应用
周凡杨
oracle job
最近写服务,服务上线后,需要写一个定时执行的SQL脚本,清理并更新数据库表里的数据,应用到了Oracle 的 Job的相关知识。在此总结一下。
一:查看相关job信息
1、相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行
多线程机制
朱辉辉33
多线程
转至http://blog.csdn.net/lj70024/archive/2010/04/06/5455790.aspx
程序、进程和线程:
程序是一段静态的代码,它是应用程序执行的蓝本。进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。线程是比进程更小的单位,一个进程执行过程中可以产生多个线程,每个线程有自身的
web报表工具FineReport使用中遇到的常见报错及解决办法(一)
老A不折腾
web报表 finereport java报表 报表工具
FineReport使用中遇到的常见报错及解决办法(一)
这里写点抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己。
出现问题先搜一下文档上有没有,再看看度娘有没有,再看看论坛有没有。有报错要看日志。下面简单罗列下常见的问题,大多文档上都有提到的。
1、address pool is full:
含义:地址池满,连接数超过并发数上
mysql rpm安装后没有my.cnf
林鹤霄
没有my.cnf
Linux下用rpm包安装的MySQL是不会安装/etc/my.cnf文件的,
至于为什么没有这个文件而MySQL却也能正常启动和作用,在这儿有两个说法,
第一种说法,my.cnf只是MySQL启动时的一个参数文件,可以没有它,这时MySQL会用内置的默认参数启动,
第二种说法,MySQL在启动时自动使用/usr/share/mysql目录下的my-medium.cnf文件,这种说法仅限于r
Kindle Fire HDX root并安装谷歌服务框架之后仍无法登陆谷歌账号的问题
aigo
root
原文:http://kindlefireforkid.com/how-to-setup-a-google-account-on-amazon-fire-tablet/
Step 4: Run ADB command from your PC
On the PC, you need install Amazon Fire ADB driver and instal
javascript 中var提升的典型实例
alxw4616
JavaScript
// 刚刚在书上看到的一个小问题,很有意思.大家一起思考下吧
myname = 'global';
var fn = function () {
console.log(myname); // undefined
var myname = 'local';
console.log(myname); // local
};
fn()
// 上述代码实际上等同于以下代码
m
定时器和获取时间的使用
百合不是茶
时间的转换 定时器
定时器:定时创建任务在游戏设计的时候用的比较多
Timer();定时器
TImerTask();Timer的子类 由 Timer 安排为一次执行或重复执行的任务。
定时器类Timer在java.util包中。使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定
JDK1.5 Queue
bijian1013
java thread java多线程 Queue
JDK1.5 Queue
LinkedList:
LinkedList不是同步的。如果多个线程同时访问列表,而其中至少一个线程从结构上修改了该列表,则它必须 保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方
http认证原理和https
bijian1013
http https
一.基础介绍
在URL前加https://前缀表明是用SSL加密的。 你的电脑与服务器之间收发的信息传输将更加安全。
Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后
【Java范型五】范型继承
bit1129
java
定义如下一个抽象的范型类,其中定义了两个范型参数,T1,T2
package com.tom.lang.generics;
public abstract class SuperGenerics<T1, T2> {
private T1 t1;
private T2 t2;
public abstract void doIt(T
【Nginx六】nginx.conf常用指令(Directive)
bit1129
Directive
1. worker_processes 8;
表示Nginx将启动8个工作者进程,通过ps -ef|grep nginx,会发现有8个Nginx Worker Process在运行
nobody 53879 118449 0 Apr22 ? 00:26:15 nginx: worker process
lua 遍历Header头部
ronin47
lua header 遍历
local headers = ngx.req.get_headers()
ngx.say("headers begin", "<br/>")
ngx.say("Host : ", he
java-32.通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小(两数组的差最小)。
bylijinnan
java
import java.util.Arrays;
public class MinSumASumB {
/**
* Q32.有两个序列a,b,大小都为n,序列元素的值任意整数,无序.
*
* 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
* 例如:
* int[] a = {100,99,98,1,2,3
redis
开窍的石头
redis
在redis的redis.conf配置文件中找到# requirepass foobared
把它替换成requirepass 12356789 后边的12356789就是你的密码
打开redis客户端输入config get requirepass
返回
redis 127.0.0.1:6379> config get requirepass
1) "require
[JAVA图像与图形]现有的GPU架构支持JAVA语言吗?
comsci
java语言
无论是opengl还是cuda,都是建立在C语言体系架构基础上的,在未来,图像图形处理业务快速发展,相关领域市场不断扩大的情况下,我们JAVA语言系统怎么从这么庞大,且还在不断扩大的市场上分到一块蛋糕,是值得每个JAVAER认真思考和行动的事情
安装ubuntu14.04登录后花屏了怎么办
cuiyadll
ubuntu
这个情况,一般属于显卡驱动问题。
可以先尝试安装显卡的官方闭源驱动。
按键盘三个键:CTRL + ALT + F1
进入终端,输入用户名和密码登录终端:
安装amd的显卡驱动
sudo
apt-get
install
fglrx
安装nvidia显卡驱动
sudo
ap
SSL 与 数字证书 的基本概念和工作原理
darrenzhu
加密 ssl 证书 密钥 签名
SSL 与 数字证书 的基本概念和工作原理
http://www.linuxde.net/2012/03/8301.html
SSL握手协议的目的是或最终结果是让客户端和服务器拥有一个共同的密钥,握手协议本身是基于非对称加密机制的,之后就使用共同的密钥基于对称加密机制进行信息交换。
http://www.ibm.com/developerworks/cn/webspher
Ubuntu设置ip的步骤
dcj3sjt126com
ubuntu
在单位的一台机器完全装了Ubuntu Server,但回家只能在XP上VM一个,装的时候网卡是DHCP的,用ifconfig查了一下ip是192.168.92.128,可以ping通。
转载不是错:
Ubuntu命令行修改网络配置方法
/etc/network/interfaces打开后里面可设置DHCP或手动设置静态ip。前面auto eth0,让网卡开机自动挂载.
1. 以D
php包管理工具推荐
dcj3sjt126com
PHP Composer
http://www.phpcomposer.com/
Composer是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。
中文文档
入门指南
下载
安装包列表
Composer 中国镜像
Gson使用四(TypeAdapter)
eksliang
json gson Gson自定义转换器 gsonTypeAdapter
转载请出自出处:http://eksliang.iteye.com/blog/2175595 一.概述
Gson的TypeAapter可以理解成自定义序列化和返序列化 二、应用场景举例
例如我们通常去注册时(那些外国网站),会让我们输入firstName,lastName,但是转到我们都
JQM控件之Navbar和Tabs
gundumw100
html xml css
在JQM中使用导航栏Navbar是简单的。
只需要将data-role="navbar"赋给div即可:
<div data-role="navbar">
<ul>
<li><a href="#" class="ui-btn-active&qu
利用归并排序算法对大文件进行排序
iwindyforest
java 归并排序 大文件 分治法 Merge sort
归并排序算法介绍,请参照Wikipeida
zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F
基本思想:
大文件分割成行数相等的两个子文件,递归(归并排序)两个子文件,直到递归到分割成的子文件低于限制行数
低于限制行数的子文件直接排序
两个排序好的子文件归并到父文件
直到最后所有排序好的父文件归并到输入
iOS UIWebView URL拦截
啸笑天
UIWebView
本文译者:candeladiao,原文:URL filtering for UIWebView on the iPhone说明:译者在做app开发时,因为页面的javascript文件比较大导致加载速度很慢,所以想把javascript文件打包在app里,当UIWebView需要加载该脚本时就从app本地读取,但UIWebView并不支持加载本地资源。最后从下文中找到了解决方法,第一次翻译,难免有
索引的碎片整理SQL语句
macroli
sql
SET NOCOUNT ON
DECLARE @tablename VARCHAR (128)
DECLARE @execstr VARCHAR (255)
DECLARE @objectid INT
DECLARE @indexid INT
DECLARE @frag DECIMAL
DECLARE @maxfrag DECIMAL
--设置最大允许的碎片数量,超过则对索引进行碎片
Angularjs同步操作http请求with $promise
qiaolevip
每天进步一点点 学习永无止境 AngularJS 纵观千象
// Define a factory
app.factory('profilePromise', ['$q', 'AccountService', function($q, AccountService) {
var deferred = $q.defer();
AccountService.getProfile().then(function(res) {
hibernate联合查询问题
sxj19881213
sql Hibernate HQL 联合查询
最近在用hibernate做项目,遇到了联合查询的问题,以及联合查询中的N+1问题。
针对无外键关联的联合查询,我做了HQL和SQL的实验,希望能帮助到大家。(我使用的版本是hibernate3.3.2)
1 几个常识:
(1)hql中的几种join查询,只有在外键关联、并且作了相应配置时才能使用。
(2)hql的默认查询策略,在进行联合查询时,会产
struts2.xml
wuai
struts
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache