package com.angen.util;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* @description: PojoUtil
* @date: 2022/7/20
*/
public class PojoUtil {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:mysql://localhost:3306/test_mybatis?useSSL=false";
String user = "root";
String pass = "root";
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, pass);
//java文件输出路径
String path = "E:\\java重新学习\\mybatis_test\\src\\main\\java\\com\\angen\\pojo";
GetModel getModel = new GetModel(conn);
/*
使用:
pojo: 包含属性与getter、setter
bean: 包含属性与getter、setter与无参构造器,并实现Serializable接口
*/
//生成pojo到path
//getModel.generatePojo(path);
//生成pojo到path,在pojo中添加包信息"package com.ren.model"
//getModel.generatePojo(path, "com.ren.model");
//生成Bean到path
//getModel.generateBean(path);
//生成Bean到path,在Bean中添加包信息"package com.ren.bean"
//getModel.generateBean(path, "com.ren.bean");
getModel.generateBean(path);
}
}
class GetModel {
private Connection connection;
private List tables;
public GetModel() {
}
public GetModel(Connection connection) throws SQLException {
this.connection = connection;
this.tables = getTableList();
}
public Connection getConnection() {
return connection;
}
public void setConnection(Connection connection) {
this.connection = connection;
}
/**
* 获取数据库中所有表信息封装到List tables
* @return List 包含数据库中所有的表
* @throws SQLException
*/
private List getTableList() throws SQLException {
List tableList = new ArrayList<>();
DatabaseMetaData dbMetaData = connection.getMetaData();
ResultSet rs = dbMetaData.getTables(null, null, null, new String[] { "TABLE" });
while (rs.next()) {
Table table = new Table();
String tableName = rs.getString("TABLE_NAME");
table.setTableName(tableName);
table.setDatabaseName(rs.getString("TABLE_CAT"));
table.setColumns(getTableColumnList(tableName));
tableList.add(table);
}
return tableList;
}
/**
* 获取某表的所有column信息封装到List columnList中
*/
private List getTableColumnList(String tableName) throws SQLException {
List columnList = new ArrayList<>();
String sql = "select * from " + tableName;
PreparedStatement stmt;
try {
stmt = connection.prepareStatement(sql);
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData data = rs.getMetaData();
for (int i = 1; i <= data.getColumnCount(); i++) {
Column column = new Column();
// 获得所有列的数目及实际列数
int columnCount = data.getColumnCount();
// 获得指定列的列名
String columnName = data.getColumnName(i);
// 获得指定列的数据类型名
String columnTypeName = data.getColumnTypeName(i);
// 对应数据类型的类
String columnClassName = data.getColumnClassName(i);
// 在数据库中类型的最大字符个数
int columnDisplaySize = data.getColumnDisplaySize(i);
// 某列类型的精确度(类型的长度)
int precision = data.getPrecision(i);
// 小数点后的位数
int scale = data.getScale(i);
// 是否自动递增
Boolean isAutoInctement = data.isAutoIncrement(i);
// 是否为空
int isNullable = data.isNullable(i);
column.setColumnName(columnName);
column.setColumnTypeName(columnTypeName);
column.setColumnClassName(columnClassName);
column.setTableName(tableName);
column.setColumnDisplaySize(columnDisplaySize);
column.setPrecision(precision);
column.setScale(scale);
column.setAutoInctement(isAutoInctement);
columnList.add(column);
}
}
catch (SQLException e) {
e.printStackTrace();
}
return columnList;
}
/**
* 为table创建pojo
* @param table 表
* @param path 输出路径
*/
private static void writeFilePojo(Table table, String path, String packagePath) {
String fileName = path + "\\" + upperCase(table.getTableName()) + ".java";
try {
FileWriter writer = new FileWriter(fileName);
StringBuilder getterSetter = new StringBuilder();
//需要添加包路径
if (!packagePath.equals("0")) {
writer.write("package " + packagePath + ";\n\n");
}
writer.write("public class " + upperCase(table.getTableName()) + " {\n");
for (Column column : table.getColumns()) {
writer.write(" private " + changeType(column.getColumnTypeName()) + " " + column.getColumnName() + ";\n");
//getter()
getterSetter.append("\n public " + changeType(column.getColumnTypeName()) + " get" + upperCase(column.getColumnName()) + "() {\n");
getterSetter.append(" return " + column.getColumnName() + ";\n");
getterSetter.append(" }\n\n");
//setter()
getterSetter.append(" public void set" + upperCase(column.getColumnName()) + "(" + changeType(column.getColumnTypeName()) + " " + column.getColumnName() + ") {\n");
getterSetter.append(" this." + column.getColumnName() + " = " + column.getColumnName() + ";\n");
getterSetter.append(" }\n");
}
writer.write(getterSetter.toString());
writer.write("}");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 为table创建Bean
* @param table 表
* @param path 输出路径
*/
private static void writeFileBean(Table table, String path, String packagePath) {
String fileName = path + "\\" + upperCase(table.getTableName()) + ".java";
try {
FileWriter writer = new FileWriter(fileName);
StringBuilder getterSetter = new StringBuilder();
//需要添加包路径
if (!packagePath.equals("0")) {
writer.write("package " + packagePath + ";\n\n");
}
writer.write("import java.io.Serializable;\n\n");
writer.write("public class " + upperCase(table.getTableName()) + " implements Serializable {\n");
for (Column column : table.getColumns()) {
writer.write(" private " + changeType(column.getColumnTypeName()) + " " + column.getColumnName() + ";\n");
//getter()
getterSetter.append("\n public " + changeType(column.getColumnTypeName()) + " get" + upperCase(column.getColumnName()) + "() {\n");
getterSetter.append(" return " + column.getColumnName() + ";\n");
getterSetter.append(" }\n\n");
//setter()
getterSetter.append(" public void set" + upperCase(column.getColumnName()) + "(" + changeType(column.getColumnTypeName()) + " " + column.getColumnName() + ") {\n");
getterSetter.append(" this." + column.getColumnName() + " = " + column.getColumnName() + ";\n");
getterSetter.append(" }\n");
}
//无参构造器
writer.write("\n public " + upperCase(table.getTableName()) + "() { }\n");
writer.write(getterSetter.toString());
writer.write("}");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 将 str 首字母大写
* @param str
* @return
*/
private static String upperCase(String str) {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
/**
* 将数据库类型转换为java中合适的类型
* @param typeName
* @return
*/
private static String changeType(String typeName) {
switch (typeName) {
case "VARCHAR":
case "CHAR":
case "TEXT":
case "TINYTEXT":
case "MEDIUMTEXT":
case "LONGTEXT":
case "ENUM":
case "SET":
return "String";
case "BLOB":
case "BINARY":
case "VARBINARY":
case "TINYBLOB":
case "MEDIUMBLOB":
case "LONGBLOB":
return "byte[]";
case "INTEGER":
case "ID":
case "BIGINT":
return "Long";
case "TINYINT":
case "SMALLINT":
case "MEDIUMINT":
case "INT":
return "Integer";
case "DECIMAL":
return "BigDecimal";
case "BIT":
return "Boolean";
case "FLOAT":
return "Float";
case "DOUBLE":
return "Double";
case "DATE":
case "YEAR":
return "Date";
case "TIME":
return "Time";
}
return "String";
}
/**
* 根据tables生成pojo到path
* @param path 输出路径
*/
public void generatePojo(String path) {
for (Table table : tables) {
writeFilePojo(table, path, "0");
System.out.println("已创建Pojo: " + path + "\\" + upperCase(table.getTableName()) + ".java");
}
}
/**
* 根据tables生成Bean到path
* @param path 输出路径
*/
public void generateBean(String path) {
for (Table table : tables) {
writeFileBean(table, path, "0");
System.out.println("已创建Bean: " + path + "\\" + upperCase(table.getTableName()) + ".java");
}
}
/**
* 根据tables生成pojo到path
* @param path 输出路径
* @param packagePath 添加包路径
*/
public void generatePojo(String path, String packagePath) {
for (Table table : tables) {
writeFilePojo(table, path, packagePath);
System.out.println("已创建Pojo: " + path + "\\" + upperCase(table.getTableName()) + ".java 包名:" + packagePath);
}
}
/**
* 根据tables生成Bean到path
* @param path 输出路径
* @param packagePath 添加包路径
*/
public void generateBean(String path, String packagePath) {
for (Table table : tables) {
writeFileBean(table, path, packagePath);
System.out.println("已创建Bean: " + path + "\\" + upperCase(table.getTableName()) + ".java 包名:" + packagePath);
}
}
}
class Table {
private String tableName;
private String databaseName;
private List columns;
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getDatabaseName() {
return databaseName;
}
public void setDatabaseName(String databaseName) {
this.databaseName = databaseName;
}
public List getColumns() {
return columns;
}
public void setColumns(List columns) {
this.columns = columns;
}
@Override
public String toString() {
return "Table{" +
"\n tableName='" + tableName + '\'' +
"\n databaseName='" + databaseName + '\'' +
"\n columns=" + columns +
'}';
}
}
class Column {
// 列名
private String columnName;
// 列的数据类型名
private String columnTypeName;
// 对应数据类型的类
private String columnClassName;
// 在数据库中类型的最大字符个数
private int columnDisplaySize;
// 某列类型的精确度(类型的长度)
private int precision;
// 小数点后的位数
private int scale;
// 获取某列对应的表名
private String tableName;
// 是否自动递增
private Boolean isAutoInctement;
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getColumnTypeName() {
return columnTypeName;
}
public void setColumnTypeName(String columnTypeName) {
this.columnTypeName = columnTypeName;
}
public String getColumnClassName() {
return columnClassName;
}
public void setColumnClassName(String columnClassName) {
this.columnClassName = columnClassName;
}
public int getColumnDisplaySize() {
return columnDisplaySize;
}
public void setColumnDisplaySize(int columnDisplaySize) {
this.columnDisplaySize = columnDisplaySize;
}
public int getPrecision() {
return precision;
}
public void setPrecision(int precision) {
this.precision = precision;
}
public int getScale() {
return scale;
}
public void setScale(int scale) {
this.scale = scale;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public Boolean getAutoInctement() {
return isAutoInctement;
}
public void setAutoInctement(Boolean autoInctement) {
isAutoInctement = autoInctement;
}
@Override
public String toString() {
return "\n Column{" +
"columnName='" + columnName + '\'' +
", columnTypeName='" + columnTypeName + '\'' +
", columnClassName='" + columnClassName + '\'' +
", columnDisplaySize=" + columnDisplaySize +
", precision=" + precision +
", scale=" + scale +
", tableName='" + tableName + '\'' +
", isAutoInctement=" + isAutoInctement +
'}';
}
}
你可能感兴趣的:(java,java)
LeetCode 热题 100 - 贪心算法 - 买卖股票的最佳时机 - javascript
Jxxli
LeetCode hot100 leetcode 算法 贪心算法 javascript
题目给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。示例1:输入:[7,1,5,3,6,4]输出:5解释:在第2天(股票价格=1)的时候买入,在第5天(股票价格=6)的时候卖出,
SOFA RPC SPI机制原理
Jooou
rpc
SOFARPC(ScalableOpenFinancialArchitectureRemoteProcedureCall)是一个高可扩展性、高性能、生产级的JavaRPC框架。其SPI(ServiceProviderInterface)机制为框架提供了强大的扩展能力,允许开发者在不修改框架核心代码的情况下,对框架的各个功能组件进行定制和扩展。以下将详细介绍SOFARPC的SPI机制原理。1.Jav
vue文本插值
翻滚吧键盘
vue vue.js javascript ecmascript
好的,我们来详细讲解Vue中最基础的数据展示方式:文本插值和在其内部使用的JavaScript表达式。1.文本插值(TextInterpolation)知识点:文本插值是Vue中最基本的数据绑定形式。它使用“Mustache”语法(双大括号{{}})将数据直接渲染到HTML的文本内容中。核心作用:将Vue实例中setup函数返回的数据,动态地显示在页面的指定位置。响应式:当大括号内所依赖的数据发生
如何用postman进行自动化测试?
AIZHINAN
postman 测试工具 自动化测试
使用Postman进行自动化测试的完整指南Postman不仅可以用于手动API测试,还提供了强大的自动化测试功能。以下是详细的使用方法:B站讲的最好的Postman接口自动化测试教程,只需一小时自学入门,学会直接上手项目实战!一、基础自动化测试设置1.编写测试脚本在Postman请求的"Tests"标签页中,你可以用JavaScript编写测试脚本:javascript//检查状态码是否为200p
Springboot实现后台图片上传
文章目录整体流程概览后端实现细节1.文件上传控制器(`UploadController.java`)2.静态资源服务控制器(`StaticResourceController.java`)演示总结本文将深入探讨一个标准的Web应用后台管理系统中,图片上传功能的完整实现流程。我们将从前端用户交互开始,一直到后端的文件处理、存储和最终的URL返回。整体流程概览图片上传功能的核心流程可以分为以下几个步骤
系统初始化init到(zygote)后启动桌面
文章目录zygote启动AndroidRuntime.cppZygoteInit.javazygote.javacom_android_internal_os_Zygote.cppzytogeServer.javaZygoteConnection.javaSystemServer启动zygoteinit.javaAndroidRuntime.cppapp_main.cppRuntimeInit.j
vue中cdn方式引入和构建工具创建代码的不同
翻滚吧键盘
vue vue.js javascript 前端
你观察得非常准确,而且这个问题直击了现代JavaScript开发中两种不同模块化思想的核心。是的,你总结的完全正确。为什么会有const{createApp,ref}=Vue;和import{createApp,ref}from'vue';这两种不同的方式呢?答案在于代码的来源和作用域完全不同。我们用一个比喻来解释。方式一:CDN-公共广播系统你可以把使用CDN的方式,想象成在你的办公室里安装了一
Java内存区域划分及各区域作用
Java虚拟机内存区域示意图:各分区都有什么特点,他们的作用是什么呢?1.程序计数器(ProgramCounterRegister)线程私有。程序计数器是一块较小的空间,它可以看做是当前线程所执行的字节码的行号指示器。2.Java虚拟机栈线程私有。Java虚拟机栈的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(StackFrame)用于存储局
Java内存区域(运行时数据区域)怎么划分的?
1、Java内存区域(运行时数据区域)怎么划分的?程序计数器,Java虚拟机栈,本地方法栈,堆,方法区2、线程私用的部分(程序计数器,Java虚拟机栈,本地方法栈)程序计数器程序计数器存储了当前线程正在执行的字节码指令的地址(如果是当前执行的是Native方法,那么计数器为空),字节码解释器就是通过改变计数器的值来选取下一条需要执行的字节码指令。程序计数器是线程私有的,便于各个线程切换后,可以恢复
JavaScript性能优化实战:表格控件高效开发指南
javascript
引言在现代Web应用开发中,电子表格功能已成为数据分析、报表展示等场景的核心需求。SpreadJS作为一款高性能的纯前端电子表格控件,能够完美兼容Excel文件格式,支持百万级数据量和复杂公式计算。然而随着数据规模的增长和业务逻辑的复杂化,性能优化成为开发者必须面对的挑战。本文将深入剖析几种SpreadJS性能优化技巧,通过实际案例和代码演示,帮助开发者构建响应迅速、用户体验优异的电子表格应用。正
前端--深入理解HTTP协议
菜鸡想成为大佬
前端 前端 http 网络协议
HTTP协议简介HTTP(HyperTextTransferProtocol,超文本传输协议)是一个应用层协议,用于在客户端(通常是浏览器)和服务器之间传输超文本数据(如HTML、CSS、JavaScript等)。它是万维网(WorldWideWeb)的核心协议,通过HTTP,用户能够在浏览器中访问网站。HTTP的特点无状态:HTTP协议是无状态协议,即服务器不会自动保存每次请求之间的上下文信息。
CppCon 2018 学习:A Semi Compile/Run-time Map with (Nearly) Zero Overhead Looup
虾球xz
CppCon 学习 开发语言 c++
介绍一个C++和Java之间桥接(Bridge)系统的示例代码,它说明了如何在C++中调用Java类(如java.io.InputStream)的方法。下面是详细解读:一、内容来源说明《C++↔JavaBridge》目的:演示如何通过桥接层让C++直接调用Java方法(JNI背后封装)二、代码结构解读classInputStream//java.io.InputStream{public:inli
JAVA内存区域划分
weixin_44612246
java 开发语言 redis
根据《JAVA虚拟机规范》的规定,JAVA虚拟机在执行JAVA程序的过程中会把内存划分为不同的数据区域。不同类型的数据会存储在不同的区域,理解JAVA内存区域的工作细节对理解JAVA多线程、线程安全性有着重要意义。注意,JAVA内存区域的划分与我们常说的java内存模型JMM(JavaMemeryModel)是两个互不交叉的维度的概念,两者没有任何关系。JMM主要是将主内存和工作内存的关系、数据从
战损版JavaAgent方法耗时统计工具实现
小满只想睡觉
jvm java 开发语言
前言本篇文章将实现一个超绝战损版的基于JavaAgent的方法耗时统计工具。整体内容分为:JavaAgent原理简析;方法耗时统计工具实现;方法耗时工具的Springboot的starter包实现。正文一.JavaAgent原理简析理解啥是JavaAgent前,需要先介绍一下JVMTI(JVMToolInterface)。JVMTI是JVM提供的用于访问JVM各种状态的一套编程接口。基于JVMTI
Java基础 集合框架 队列架构 阻塞双端队列BlockingDeque架构
BlockingDequeBlockingDeque核心特性BlockingDeque核心方法唯一标准实现:LinkedBlockingDequeLinkedBlockingDeque构造方法LinkedBlockingDeque数据结构及管理逻辑LinkedBlockingDeque核心特性LinkedBlockingDeque核心操作方法逻辑LinkedBlockingDeque总结Linke
【Java面试】讲讲Redis的Cluster的分片机制
用心分享技术
Java面试题 java 面试 redis
RedisCluster分片机制详解1.分片核心机制:哈希槽(HashSlot)RedisCluster采用虚拟哈希槽分区,将数据分散到16384个固定槽位(slot)上,每个主节点负责一部分槽位。键的槽位计算方式为:slot=CRC16(key)%16384#仅计算键中`{}`内的内容(如`user:{1000}`仅哈希`1000`)分片流程示例:集群有3个主节点,槽分配为:节点A:0-5460
【Java面试】RocketMQ是如何做到零消息丢失的?
一、生产阶段:确保消息可靠发送同步发送与重试机制生产者采用同步发送(send()方法)并等待Broker返回SendResult,仅当状态为SEND_OK(刷盘和主从同步均成功)时确认发送成功。默认同步重试3次,可通过setRetryTimesWhenSendFailed(10)调整重试次数,应对网络抖动等问题。事务消息机制Half消息:生产者先发送半消息到Broker的HALF队列(对消费者不可
【Java面试】RocketMQ的设计原理
用心分享技术
Java面试题 java 面试 rocketmq
一、核心架构设计原因NameServer轻量级无状态问题:传统注册中心(如ZooKeeper)强一致性(CP)设计复杂,且在高并发场景下性能瓶颈明显。解决:NameServer采用无状态+最终一致性(AP),节点间不通信,仅通过Broker心跳(30s/次)更新路由,降低复杂度并提升吞吐量。容忍分钟级不一致(如Broker宕机需120s剔除),适合消息路由这种非强一致场景。Broker主从架构与文
原生html页面弹窗_JavaScript 弹窗
weixin_39598584
原生html页面弹窗
JavaScript弹窗可以在JavaScript中创建三种消息框:警告框、确认框、提示框。警告框警告框经常用于确保用户可以得到某些信息。当警告框出现后,用户需要点击确定按钮才能继续进行操作。语法window.alert("sometext");window.alert()方法可以不带上window对象,直接使用alert()方法。实例functionmyFunction(){alert("你好,
html5 原生 弹窗,HTML5 Popmotion.js实现的弹窗控件
weixin_39564527
html5 原生 弹窗
JavaScript语言:JaveScriptBabelCoffeeScript确定const{css,transform,chain,delay,tween,easing,parallel}=window.popmotion;const{interpolate}=transform;lettrigger;letisClosing=false;//SelectDOMconstmodalTrigge
深入理解 Spring 单元测试:@SpringBootTest、@Value 注入、@MockBean 使用实战与陷阱
drebander
spring spring 单元测试
Spring是目前最流行的Java企业级开发框架之一,而良好的单元测试是高质量代码的重要保障。尤其在实际开发中,我们经常会碰到诸如@Autowired空指针、Nacos配置项@Value注入失败、Mapper测试困难等问题。本文将围绕Spring单元测试的完整体系,结合以下关键要点进行讲解:@SpringBootTest的作用与最佳实践@Autowired注入空指针的常见原因与解决@Value注入
MyBatis架构原理解析:核心对象与执行流程深度剖析
一、开篇:理解MyBatis的核心价值在当今Java持久层框架生态中,MyBatis凭借其灵活的SQL控制能力和简洁的ORM实现成为企业级应用的首选。与JPA的全自动ORM不同,MyBatis采用半自动化映射理念,在保持SQL灵活性的同时,通过智能映射减少70%的JDBC样板代码。开发者直接编写SQLMyBatis核心引擎自动参数绑定结果集映射事务管理JDBC本文将深入剖析MyBatis的架构核心
java中agent的作用
一java中agent1.1agent-javaagent是Java虚拟机(JVM)提供的一个启动参数,用于在Java程序main方法执行之前,加载一个特殊的Java代理程序(JavaAgent)。它的核心作用是对运行中的Java程序进行字节码层面的动态修改、监控和增强。如安全审计/漏洞检测。-javaagent:/bankapp/deploy/raspant/raspant.jar
window.location.href的介绍及使用
じòぴé南冸じょうげん
chrome 前端
目录介绍:获取当前URL设置新的URLURL的组成部分解析URL参数什么是片段标识符的URL?使用newURL:输出的部分解释:假如我们需要获取路径上的最后一级的路径名:介绍:window.location.href是JavaScript中一个非常常用的属性,它用于获取或设置当前窗口或标签页的URL。这个属性返回的是完整的URL。获取当前URL简单地使用获取当前页面的URL:console.log
Servlet 自动刷新页面
沐知全栈开发
开发语言
Servlet自动刷新页面引言在Web开发中,实现页面的自动刷新是一个常见的需求。这种需求通常出现在需要实时更新信息显示的场景中,例如股票行情、新闻资讯等。Servlet技术作为一种成熟的JavaWeb技术,为我们提供了实现这一需求的有效途径。本文将详细介绍如何利用Servlet技术实现自动刷新页面的功能。Servlet简介Servlet是Java平台的一部分,它允许Java代码运行在Web服务器
Effective Go 编程技巧总结
强哥之神
golang 人工智能 GPU调度 linux 语言模型 云计算
Go是一种新兴的编程语言。尽管它借鉴了其他语言的许多特性,但也具备一些独特的属性,使得用Go编写的高效程序在风格上与其他语言编写的程序有所不同。直接将C++或Java程序翻译成Go代码,通常无法取得令人满意的结果——Java程序的编写方式是Java风格,而非Go风格。另一方面,如果从Go的语言特性出发去思考问题,可能会编写出风格截然不同但更为成功的程序。换句话说,要编写出优秀的Go代码,理解Go语
用Ruby脚本抓取百度MP3新歌Top 100发布到闲聊
iteye_8302
Ruby 百度 脚本 Ruby PHP rubygems
昨天和ouspec闲聊谈到可以用[url=http://www.iteye.com/wiki/JavaEye/1499-javaeye-api-help]JavaEye的闲聊api[/url]做些什么:[url]http://quake.iteye.com/blog/chat/1766[/url][quote]用JavaEye的闲聊API可以做什么?举例子:你可以注册一个账号,写个小程序从某个"专
【Java基础】一次编译,随处运行的简单原理
秃然想通了
java基础入门 java 开发语言
【Java基础】一次编译,随处运行的简单原理一句话解释:Java程序就像一个多变的机器人,能根据不同的环境变换外形,但核心始终不变!在Windows上变成.exe在Mac上变成.app在手机上变成.apk但无论它的外形如何变化,它的核心始终是同一个机器人!在我们的计算机中,存在着多种操作系统(如:Windows、Linux、MacOS等)。为了让Java程序能够在不同的操作系统上运行,Java内置
【Python爬虫实战】全面抓取网页资源(图片、JS、CSS等)——超详细教程与源码解析
Python爬虫项目
python 爬虫 javascript 新浪微博 开发语言 css 旅游
前言在互联网时代,网页数据已经成为重要的信息来源。许多时候,我们不仅需要抓取网页中的文字信息,还需要将网页中的各种资源文件(如图片、CSS样式表、JavaScript脚本文件等)一起抓取并保存下来。这种需求广泛应用于网页备份、离线浏览、数据分析等场景。本篇文章将带你从零开始,系统讲解如何使用Python最新技术,一步步实现抓取网页中所有静态资源的完整流程,包括:页面结构分析爬虫基本架构搭建异步爬取
centos使用wget下载jdk8
任意放逐
centos java linux
首先官网找需要的的jdk版本https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html我这里选择的是弹出下载提示框:勾选点Downloadjdk…这里需要使用一个账号登录,可以自行在网上搜一个账号,我就不给了。然后退回原来的页面下载,用一个能看到下载链接的软件下载,我使用的是idm
js动画html标签(持续更新中)
843977358
html js 动画 media opacity
1.jQuery 效果 - animate() 方法 改变 "div" 元素的高度: $(".btn1").click(function(){ $("#box").animate({height:"300px
springMVC学习笔记
caoyong
springMVC
1、搭建开发环境
a>、添加jar文件,在ioc所需jar包的基础上添加spring-web.jar,spring-webmvc.jar
b>、在web.xml中配置前端控制器
<servlet>
&nbs
POI中设置Excel单元格格式
107x
poi style 列宽 合并单元格 自动换行
引用:http://apps.hi.baidu.com/share/detail/17249059
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结:
先获取工作薄对象:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFCellStyle setBorder = wb.
jquery 获取A href 触发js方法的this参数 无效的情况
一炮送你回车库
jquery
html如下:
<td class=\"bord-r-n bord-l-n c-333\">
<a class=\"table-icon edit\" onclick=\"editTrValues(this);\">修改</a>
</td>"
j
md5
3213213333332132
MD5
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MDFive {
public static void main(String[] args) {
String md5Str = "cq
完全卸载干净Oracle11g
sophia天雪
orale数据库 卸载干净 清理注册表
完全卸载干净Oracle11g
A、存在OUI卸载工具的情况下:
第一步:停用所有Oracle相关的已启动的服务;
第二步:找到OUI卸载工具:在“开始”菜单中找到“oracle_OraDb11g_home”文件夹中
&
apache 的access.log 日志文件太大如何解决
darkranger
apache
CustomLog logs/access.log common 此写法导致日志数据一致自增变大。
直接注释上面的语法
#CustomLog logs/access.log common
增加:
CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-d.log 
Hadoop单机模式环境搭建关键步骤
aijuans
分布式
Hadoop环境需要sshd服务一直开启,故,在服务器上需要按照ssh服务,以Ubuntu Linux为例,按照ssh服务如下:
sudo apt-get install ssh
sudo apt-get install rsync
编辑HADOOP_HOME/conf/hadoop-env.sh文件,将JAVA_HOME设置为Java
PL/SQL DEVELOPER 使用的一些技巧
atongyeye
java sql
1 记住密码
这是个有争议的功能,因为记住密码会给带来数据安全的问题。 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Developer记住密码。 位置:Tools菜单--Preferences--Oracle--Logon HIstory--Store with password
2 特殊Copy
在SQL Window
PHP:在对象上动态添加一个新的方法
bardo
方法 动态添加 闭包
有关在一个对象上动态添加方法,如果你来自Ruby语言或您熟悉这门语言,你已经知道它是什么...... Ruby提供给你一种方式来获得一个instancied对象,并给这个对象添加一个额外的方法。
好!不说Ruby了,让我们来谈谈PHP
PHP未提供一个“标准的方式”做这样的事情,这也是没有核心的一部分...
但无论如何,它并没有说我们不能做这样
ThreadLocal与线程安全
bijian1013
java java多线程 threadLocal
首先来看一下线程安全问题产生的两个前提条件:
1.数据共享,多个线程访问同样的数据。
2.共享数据是可变的,多个线程对访问的共享数据作出了修改。
实例:
定义一个共享数据:
public static int a = 0;
Tomcat 架包冲突解决
征客丶
tomcat Web
环境:
Tomcat 7.0.6
win7 x64
错误表象:【我的冲突的架包是:catalina.jar 与 tomcat-catalina-7.0.61.jar 冲突,不知道其他架包冲突时是不是也报这个错误】
严重: End event threw exception
java.lang.NoSuchMethodException: org.apache.catalina.dep
【Scala三】分析Spark源代码总结的Scala语法一
bit1129
scala
Scala语法 1. classOf运算符
Scala中的classOf[T]是一个class对象,等价于Java的T.class,比如classOf[TextInputFormat]等价于TextInputFormat.class
2. 方法默认值
defaultMinPartitions就是一个默认值,类似C++的方法默认值
java 线程池管理机制
BlueSkator
java线程池 管理机制
编辑
Add
Tools
jdk线程池
一、引言
第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
关于hql中使用本地sql函数的问题(问-答)
BreakingBad
HQL 存储函数
转自于:http://www.iteye.com/problems/23775
问:
我在开发过程中,使用hql进行查询(mysql5)使用到了mysql自带的函数find_in_set()这个函数作为匹配字符串的来讲效率非常好,但是我直接把它写在hql语句里面(from ForumMemberInfo fm,ForumArea fa where find_in_set(fm.userId,f
读《研磨设计模式》-代码笔记-迭代器模式-Iterator
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.Arrays;
import java.util.List;
/**
* Iterator模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象内部表示
*
* 个人觉得,为了不暴露该
常用SQL
chenjunt3
oracle sql C++ c C#
--NC建库
CREATE TABLESPACE NNC_DATA01 DATAFILE 'E:\oracle\product\10.2.0\oradata\orcl\nnc_data01.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ;
CREATE TABLESPA
数学是科学技术的语言
comsci
工作 活动 领域模型
从小学到大学都在学习数学,从小学开始了解数字的概念和背诵九九表到大学学习复变函数和离散数学,看起来好像掌握了这些数学知识,但是在工作中却很少真正用到这些知识,为什么?
最近在研究一种开源软件-CARROT2的源代码的时候,又一次感觉到数学在计算机技术中的不可动摇的基础作用,CARROT2是一种用于自动语言分类(聚类)的工具性软件,用JAVA语言编写,它
Linux系统手动安装rzsz 软件包
daizj
linux sz rz
1、下载软件 rzsz-3.34.tar.gz。登录linux,用命令
wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载。
2、解压 tar zxvf rzsz-3.34.tar.gz
3、安装 cd rzsz-3.34 ; make posix 。注意:这个软件安装与常规的GNU软件不
读源码之:ArrayBlockingQueue
dieslrae
java
ArrayBlockingQueue是concurrent包提供的一个线程安全的队列,由一个数组来保存队列元素.通过
takeIndex和
putIndex来分别记录出队列和入队列的下标,以保证在出队列时
不进行元素移动.
//在出队列或者入队列的时候对takeIndex或者putIndex进行累加,如果已经到了数组末尾就又从0开始,保证数
C语言学习九枚举的定义和应用
dcj3sjt126com
c
枚举的定义
# include <stdio.h>
enum WeekDay
{
MonDay, TuesDay, WednesDay, ThursDay, FriDay, SaturDay, SunDay
};
int main(void)
{
//int day; //day定义成int类型不合适
enum WeekDay day = Wedne
Vagrant 三种网络配置详解
dcj3sjt126com
vagrant
Forwarded port
Private network
Public network
Vagrant 中一共有三种网络配置,下面我们将会详解三种网络配置各自优缺点。
端口映射(Forwarded port),顾名思义是指把宿主计算机的端口映射到虚拟机的某一个端口上,访问宿主计算机端口时,请求实际是被转发到虚拟机上指定端口的。Vagrantfile中设定语法为:
c
16.性能优化-完结
frank1234
性能优化
性能调优是一个宏大的工程,需要从宏观架构(比如拆分,冗余,读写分离,集群,缓存等), 软件设计(比如多线程并行化,选择合适的数据结构), 数据库设计层面(合理的表设计,汇总表,索引,分区,拆分,冗余等) 以及微观(软件的配置,SQL语句的编写,操作系统配置等)根据软件的应用场景做综合的考虑和权衡,并经验实际测试验证才能达到最优。
性能水很深, 笔者经验尚浅 ,赶脚也就了解了点皮毛而已,我觉得
Word Search
hcx2013
search
Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or ve
Spring4新特性——Web开发的增强
jinnianshilongnian
spring spring mvc spring4
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
CentOS安装配置tengine并设置开机启动
liuxingguome
centos
yum install gcc-c++
yum install pcre pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
Ubuntu上可以这样安装
sudo aptitude install libdmalloc-dev libcurl4-opens
第14章 工具函数(上)
onestopweb
函数
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
Xelsius 2008 and SAP BW at a glance
blueoxygen
BO Xelsius
Xelsius提供了丰富多样的数据连接方式,其中为SAP BW专属提供的是BICS。那么Xelsius的各种连接的优缺点比较以及Xelsius是如何直接连接到BEx Query的呢? 以下Wiki文章应该提供了全面的概览。
http://wiki.sdn.sap.com/wiki/display/BOBJ/Xcelsius+2008+and+SAP+NetWeaver+BW+Co
oracle表空间相关
tongsh6
oracle
在oracle数据库中,一个用户对应一个表空间,当表空间不足时,可以采用增加表空间的数据文件容量,也可以增加数据文件,方法有如下几种:
1.给表空间增加数据文件
ALTER TABLESPACE "表空间的名字" ADD DATAFILE
'表空间的数据文件路径' SIZE 50M;
&nb
.Net framework4.0安装失败
yangjuanjava
.net windows
上午的.net framework 4.0,各种失败,查了好多答案,各种不靠谱,最后终于找到答案了
和Windows Update有关系,给目录名重命名一下再次安装,即安装成功了!
下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=17113
方法:
1.运行cmd,输入net stop WuAuServ
2.点击开