Java实现ORM第一个api-FindAll

经过几天的业余开发,今天终于到ORM对业务api本身的实现了,首先实现第一个查询的api

老的C#定义如下
在这里插入图片描述

因为Java的泛型不纯,所以无法用只带泛型的方式实现api,对查询类的api做了调整,第一个参数要求传入实体对象
在这里插入图片描述

首先补充基础方法

反射工具类,用来给实体设置属性值

package LIS.Core.Util;import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.net.URL;
import java.net.URLClassLoader;//反射工具类
public class ReflectUtil {//设置对象指定属性名字的值public static void SetObjValue(Object obj,String name,Object val){try {Class c = obj.getClass();//得到列信息Field declaredField = c.getDeclaredField(name);//布尔的处理if(declaredField.getType()==Boolean.class) {if(val.toString()=="1"){val=Boolean.TRUE;}else if(val.toString()=="0"){val=Boolean.FALSE;}else{val=Boolean.TRUE;}}//布尔的处理else if(declaredField.getType()==boolean.class) {if(val.toString()=="1"){val=true;}else if(val.toString()=="0"){val=false;}else{val=true;}}//布尔的处理else if(declaredField.getType()==int.class) {if(val==null){val=0;}}declaredField.set(obj, val);}catch (Exception ex){ex.printStackTrace();}}/// <summary>/// 用类型全名和程序集全名获得类型/// </summary>/// <param name="typeName">类型全名</param>/// <param name="assemblyName">程序集名</param>/// <returns></returns>public static Class GetType(String typeName, String assemblyName){try {//得到根路径Class<?> clazz = ReflectUtil.class;ClassLoader classLoader = clazz.getClassLoader();URL resourceURL1 = classLoader.getResource("");String bashePath = resourceURL1.getFile();//组装成jar包路径String jarPath=bashePath+assemblyName+".jar";File file = new File(jarPath);if (!file.exists()) {throw new Exception("未能找到"+jarPath+"的文件");}//反射得到类型//自己生成jar包路径URL url = file.toURI().toURL();URL[] urls = new URL[]{url};//加载程序集URLClassLoader loader = new URLClassLoader(urls);//加载类Class c = loader.loadClass(typeName);if(c!=null){return  c;}else{throw new Exception("未能构建类型"+typeName);}}catch (Exception ex){ex.printStackTrace();}return  null;}
}

HashTable转参数列表工具类,把老的HashTable传参数转换为内部ParaDto

package LIS.Core.Util;
import LIS.Core.Dto.ParamDto;
import java.util.List;
import java.util.HashMap;
import java.util.*;import java.util.Hashtable;public class HashToParam {//哈希表得到参数列表public static List<ParamDto> GetParam(Hashtable hs){List<ParamDto> retList=new ArrayList<ParamDto>();Enumeration keys = hs.keys();while(keys.hasMoreElements()) {String str = (String) keys.nextElement();ParamDto dto=new ParamDto();dto.Key=str;dto.Value=hs.get(str);retList.add(dto);}return retList;}
}

参数实体,传sql参数用

package LIS.Core.Dto;
//ORM参数对象
public class ParamDto {/// <summary>/// 关键字段名称/// </summary>public Object Key;/// <summary>/// 关键字段值/// </summary>public Object Value;///构造函数public ParamDto(){}//构造函数public ParamDto(Object key, Object value){this.Key = key;this.Value = value;}
}

ORM的FindAll实现

package LIS.DAL.ORM.EntityManager;import LIS.Core.Context.ObjectContainer;import java.lang.reflect.Type;
import java.sql.*;
import java.util.List;
import java.util.*;
import LIS.Core.Dto.*;public class EntityManagerImpl implements LIS.DAL.ORM.EntityManager.IEntityManager {/// <summary>/// 存会话信息/// </summary>LIS.Model.Bussiness.Sessions Session=null;/// <summary>/// 开启事务,该方法初始化一个新的事务/// </summary>public void BeginTransaction(){}/// <summary>/// 数据查询/// </summary>/// <typeparam name="T">实体类型</typeparam>/// <param name="model">传入一个空的或者非空的实体对象</param>/// <param name="param">参数哈希表,数据库列名称和值的键值对</param>/// <param name="orderField">排序字段,如RowID ASC,Name DESC</param>/// <param name="pageSize">页面大小。为-1,无条件查询所有数据</param>/// <param name="pageIndex">页码。为-1,无条件查询所有数据</param>/// <returns>对象集合</returns>public <T> List<T> FindAll(T model,Hashtable param, String orderField, int pageSize, int pageIndex){List<T> retList = new ArrayList<T>();//建立连接Connection conn = null;//commandPreparedStatement stmt = null;try {Class c = model.getClass();//转换参数List<ParamDto> para=LIS.Core.Util.HashToParam.GetParam(param);//得到数据库驱动工厂LIS.DAL.ORM.DBUtility.IDbFactory factory= LIS.Core.Context.ObjectContainer.GetTypeObject("LisMianDbFactory");//得到表信息LIS.DAL.ORM.Common.TableInfo tableInfo = LIS.DAL.ORM.Common.ModelToSqlUtil.GetTypeInfo(model);//得到sql语句String sql = LIS.DAL.ORM.Common.ModelToSqlUtil.GetSelectSqlByTableInfo(factory, tableInfo, para, null, null, orderField, false);//连接串,最后的是数据库名称String url = factory.GetConnectionString();//用户String user = factory.GetUserName();//密码String password = factory.GetUserPass();//加载驱动factory.LoadDriver();//数据库连接conn = DriverManager.getConnection(url,user,password);stmt = conn.prepareStatement(sql);//设置数据参数LIS.DAL.ORM.DBUtility.DBParaUtil.SetDBPara(stmt,para);//执行sql得到结果集ResultSet rs = stmt.executeQuery();// 处理查询结果while (rs.next()) {//一行数据T oneRow = (T) c.newInstance();//循环读取列数据放入实体中for(int j=0;j<tableInfo.ColList.size();j++){String ColName=tableInfo.ColList.get(j).Name;Object val=rs.getObject(ColName);//设置属性值LIS.Core.Util.ReflectUtil.SetObjValue(oneRow,ColName,val);}retList.add(oneRow);}// 关闭 ResultSet、Statement 和 Connection 对象rs.close();}catch (Exception ex){ex.printStackTrace();}finally {// 关闭资源try {if (stmt != null){stmt.close();}}catch (Exception se2) {}try {if (conn != null){conn.close();}}catch (Exception se2) {}}return retList;}/// <summary>/// 查询测试/// </summary>public void DBSelectTest(){LIS.DAL.ORM.DBUtility.IDbFactory factory= LIS.Core.Context.ObjectContainer.GetTypeObject("LisMianDbFactory");//连接串,最后的是数据库名称String url = factory.GetConnectionString();//用户String user = factory.GetUserName();//密码String password = factory.GetUserPass();//建立连接Connection conn = null;//commandPreparedStatement stmt = null;try {//加载驱动factory.LoadDriver();conn = DriverManager.getConnection(url,user,password);//编译和执行SQL语句,传输SQL参数查询1997-2000行String sql = "SELECT * FROM dbo.SYS_Form where \"RowID\">? and \"RowID\"<?;";stmt = conn.prepareStatement(sql);stmt.setInt(1,1997);stmt.setInt(2,2000);//结果集ResultSet rs = stmt.executeQuery();// 处理查询结果while (rs.next()) {//取列数据int RowID = rs.getInt("RowID");String CName = rs.getString("CName");String Path = rs.getString("Path");//输出System.out.println(RowID + "\t" + CName + "\t" + Path);}// 关闭 ResultSet、Statement 和 Connection 对象rs.close();}catch (Exception ex) {// 处理 JDBC 异常ex.printStackTrace();}finally {// 关闭资源try {if (stmt != null){stmt.close();}}catch (Exception se2) {}try {if (conn != null){conn.close();}}catch (Exception se2) {}}}/*** Query data object by primary key ID, mainly used for writing business logic with SQL.* The difference between this method and GetById is that it has an internal caching mechanism.* @param <T> Entity type* @param id Object RowID* @return Data object*/public <T> T dolerGet(Object id) {T model=null;model.getClass();//Class<?> type = T.class;//String typeName = type.getSimpleName();//System.out.println(typeName);return null;}///测试SQL生成public <T> void  InsertSqlTest1(){try {T model=null;Class c=model.getClass();model=(T)c.newInstance();LIS.DAL.ORM.Common.TableInfo tableInfo = LIS.DAL.ORM.Common.ModelToSqlUtil.GetTypeInfo(model);LIS.DAL.ORM.DBUtility.IDbFactory factory = LIS.Core.Context.ObjectContainer.GetTypeObject("LisMianDbFactory");String sql = LIS.DAL.ORM.Common.ModelToSqlUtil.GetSelectSqlByTableInfo(factory, tableInfo, null, null, null, "", true);System.out.println(sql);}catch (Exception ex){ex.printStackTrace();}}///测试SQL生成public <T> void  InsertSqlTest(T model){try {//Type type = EntityManagerImpl.class.getClass().getGenericSuperclass();//Class c = type.getClass();//System.out.println(c.getName());//System.out.println(model.getClass().getName());LIS.DAL.ORM.Common.TableInfo tableInfo = LIS.DAL.ORM.Common.ModelToSqlUtil.GetTypeInfo(model);LIS.DAL.ORM.DBUtility.IDbFactory factory = LIS.Core.Context.ObjectContainer.GetTypeObject("LisMianDbFactory");String sql = LIS.DAL.ORM.Common.ModelToSqlUtil.GetSelectSqlByTableInfo(factory, tableInfo, null, null, null, "", true);System.out.println(sql);}catch (Exception ex){ex.printStackTrace();}}/// <summary>/// 保存对象/// </summary>/// <typeparam name="T">实体类型</typeparam>/// <param name="entity">实体对象</param>/// <returns>影响行数</returns>public <T> int Save(T entity){return  0;}
}

实体转Sql的工具类

package LIS.DAL.ORM.Common;
import LIS.Core.CustomAttributes.*;
import LIS.Core.Dto.*;
import LIS.Core.Dto.ParamDto;
import java.util.*;
import java.util.List;
import LIS.DAL.ORM.Common.TableInfo;
import LIS.DAL.ORM.DBUtility.IDbFactory;import java.lang.annotation.Annotation;
import java.lang.reflect.*;
import LIS.DAL.ORM.Common.ColumnInfo;
import LIS.DAL.ORM.Common.TableInfo;
import LIS.Core.Util.ReflectUtil;
import LIS.Core.CustomAttributes.TableAttribute;//通过实体类型得到SQL的工具类
public class ModelToSqlUtil {//通过实体对象得到表信息public static TableInfo GetTypeInfo(Object model) {if (model == null) {return null;}try {//返回的对象TableInfo tableInfo = new TableInfo();Class c = model.getClass();//得到表特性Annotation[] annoList = c.getAnnotations();if (annoList != null && annoList.length > 0) {for (int i = 0; i < annoList.length; i++) {//表特性if (annoList[i] instanceof TableAttribute) {tableInfo.TableInfo = (TableAttribute) annoList[i];}//唯一特性else {tableInfo.UniqueList.add((UniqueAttribute) annoList[i]);}}}//得到列信息Field[] declaredFields = c.getDeclaredFields();for (int i = 0; i < declaredFields.length; i++) {LIS.DAL.ORM.Common.ColumnInfo col = new LIS.DAL.ORM.Common.ColumnInfo();FrekeyAttribute fk = declaredFields[i].getAnnotation(FrekeyAttribute.class);col.FkInfo = fk;col.Name = declaredFields[i].getName();col.ColType = declaredFields[i].getType();col.Value = declaredFields[i].get(model);tableInfo.ColList.add(col);}return tableInfo;} catch (Exception ex) {ex.printStackTrace();}return null;}//通过表信息和参数列表组装查询SQL//factory:驱动工厂//tableInfo:表信息//para:参数//operList:参数对应的操作符列表//linkList:多个参数之间连接的操作符 and or这种//orderBySql:Order By的SQL语句//IsFk:是否组装外键查询的SQLpublic static String GetSelectSqlByTableInfo(IDbFactory factory,TableInfo tableInfo, List<ParamDto> para,List<String> operList,List<String> linkList, String orderBySql,Boolean IsFk){StringBuilder sb=new StringBuilder();sb.append("select ");//是否含有序号列boolean HasSequence=false;boolean HasSeqNum=false;//组装查询列for(int i=0;i<tableInfo.ColList.size();i++){//存列名String columnName = tableInfo.ColList.get(i).Name;if(columnName=="Sequence"){HasSequence=true;}else if(columnName=="SeqNum"){HasSeqNum=true;}//组装查询列if(i==0){sb.append(factory.DealPropertyName(columnName));}else{sb.append(","+factory.DealPropertyName(columnName));}//组装外键查询信息if(IsFk==true&&tableInfo.ColList.get(i).FkInfo!=null) {FrekeyAttribute fkAttr=tableInfo.ColList.get(i).FkInfo;String refTableName=factory.DealTableName(GetTableName(ReflectUtil.GetType("LIS.Model.Entity." + fkAttr.Name(), "LIS.Model")));sb.append("," + "(select " + factory.DealPropertyName(fkAttr.AssociaField()) + " from " + refTableName + " where ti." + factory.DealPropertyName(columnName) + "=" + refTableName + "." + factory.DealPropertyName(fkAttr.RefColumnName()) + ") as " + factory.DealPropertyName(columnName + "_" + fkAttr.Name() + "_" + fkAttr.AssociaField()));//如果有拉取字段1,查询拉取字段if (fkAttr.AssociaField1() != ""){sb.append("," + "(select " + factory.DealPropertyName(fkAttr.AssociaField1()) + " from " + refTableName + " where ti." + factory.DealPropertyName(columnName) + "=" + refTableName + "." + factory.DealPropertyName(fkAttr.RefColumnName()) + ") as " + factory.DealPropertyName(columnName + "_" + fkAttr.Name() + "_" + fkAttr.AssociaField1()));}//如果有拉取字段2,查询拉取字段if (fkAttr.AssociaField2() != ""){sb.append("," + "(select " + factory.DealPropertyName(fkAttr.AssociaField2()) + " from " + refTableName + " where ti." + factory.DealPropertyName(columnName) + "=" + refTableName + "." + factory.DealPropertyName(fkAttr.RefColumnName()) + ") as " + factory.DealPropertyName(columnName + "_" + fkAttr.Name() + "_" + fkAttr.AssociaField2()));}}}sb.append(" from " + factory.DealTableName(tableInfo.TableInfo.Name()) + " ti ");//组装查询参数if(para!=null&&para.size()>0){sb.append(" where ");for(int i=0;i<para.size();i++){String oper="=";if(operList!=null&&operList.size()>i){oper=operList.get(i);}String link="and";if(operList!=null&&operList.size()>i-1){link=operList.get(i-1);}if(i==0) {sb.append(factory.DealPropertyName(para.get(i).Key.toString()) + oper + factory.DealSqlPara(para.get(i).Key.toString()));}else{sb.append(" "+link+" "+factory.DealPropertyName(para.get(i).Key.toString()) + oper + factory.DealSqlPara(para.get(i).Key.toString()));}}}//存组装的排序sqlString strSort = "";//如果传入了排序字段,组装排序语句if (orderBySql != null && orderBySql.length() > 0){//用来存处理的排序串String dealStr = "";//先分割多个排序条件String[] strList = orderBySql.split(",");for (int m = 0; m < strList.length; m++){//分开多个排序条件if (m > 0){dealStr += ",";}//分开字段名称和升降序String[] strSubList = strList[m].split(" ");//处理字段名称dealStr += factory.DealPropertyName(strSubList[0]);//组装处理的串for (int n = 1; n < strSubList.length; n++){dealStr += " " + strSubList[n];}}//组装排序串strSort = " Order By " + dealStr;}else{if (HasSequence){strSort = " Order By " + factory.DealPropertyName("Sequence") + " ASC";}else if (HasSeqNum){strSort = " Order By " + factory.DealPropertyName("SeqNum") + " ASC";}else{strSort = "";}}sb.append(strSort);return sb.toString();}//通过实体类型得到实体表名称private static String GetTableName(Class c){//存表名String strTableName = "";//得到表特性TableAttribute tableInfo = null;//得到表特性Annotation[] annoList = c.getAnnotations();if (annoList != null && annoList.length > 0) {for (int i = 0; i < annoList.length; i++) {//表特性if (annoList[i] instanceof TableAttribute) {tableInfo = (TableAttribute) annoList[i];strTableName=tableInfo.Name();break;}}}return strTableName;}
}

数据库驱动工厂,增加得到用户名和密码的方法接口

package LIS.DAL.ORM.DBUtility;//数据驱动层接口,ORM基于此加载驱动和执行SQL
public interface IDbFactory {//得到数据库类型String GetStrDbType();//得到数据库连接串String GetConnectionString();//得到数据库用户名String GetUserName();//得到数据库密码String GetUserPass();//得到返回查询的RowID的SQL语句String GetReturnRowIDSql();//处理表名称,用来适配不同数据库间的属性命名差异String DealTableName(String tableName);//处理属性名字String DealPropertyName(String propertyName);//DealSqlParaString DealSqlPara(String propertyName);//加载驱动void LoadDriver();
}

调用测试,这里引入了阿里的对象转JSON库,fastjson

package com.company;
//import org.apache.commons.configuration.ConfigurationException;
//import org.apache.commons.configuration.PropertiesConfiguration;
import LIS.Model.Entity.SYSForm;
import LIS.Model.Entity.SYSUser;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
import java.net.URL;
import java.util.List;
import java.util.HashMap;
import java.util.*;
import com.alibaba.fastjson.*;public class Main {public static void main(String[] args) {//用容器的配置xml初始化容器LIS.Core.Context.ObjectContainer.InitIoc();//ORM通过容器取数据库驱动工厂LIS.DAL.ORM.EntityManager.EntityManagerImpl orm=new LIS.DAL.ORM.EntityManager.EntityManagerImpl();//执行查询测试orm.DBSelectTest();//测试通过实体得到SQL语句orm.InsertSqlTest(new SYSForm());orm.InsertSqlTest(new SYSUser());//调用ORM的FindAll测试Hashtable hs=new Hashtable();hs.put("Code","QC");List<SYSForm> formList=orm.FindAll(new SYSForm(),hs,"RowID desc",-1,-1);Object json=JSONObject.toJSON(formList);System.out.println("查询的LIST数据:"+json.toString());}
}

测试结果
在这里插入图片描述

把依赖的不稳定搞定后就快多了,轻松加愉快,哈哈。不过发现泛型不如C#强,方法不支持默认参数,尤其是方法不支持默认参数这个真不像一个现代语言,总体使用语法特性方面和工程依赖方面和IDE体验和C#比差多了,末日黄花喽,官方闭源,语法古老

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/169745.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中可变类型与不可变类型详细介绍

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 一.可变类型与不可变类型的特点 1.不可变数据类型 不可变数据类型在第一次声明赋值声明的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值, 而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空…

回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-GRU贝叶斯优化门控循环单元回归预测。基于贝…

字节码进阶之JVM Attach API详解

字节码进阶之JVM Attach API详解 文章目录 字节码进阶之JVM Attach API详解附加到虚拟机加载代理和获取信息分离虚拟机 使用Attach API的基本步骤1. **获取虚拟机实例**&#xff1a;2. **附加到虚拟机**&#xff1a;3. **加载代理或获取信息**4. **从虚拟机分离**&#xff1a;…

C语言-面试题实现有序序列合并

要求&#xff1a; a.输入两个升序排列的序列&#xff0c;将两个序列合并为一个有序序列并输出。 数据范围&#xff1a; 1≤n,m≤1000 1≤n,m≤1000 &#xff0c; 序列中的值满足 0≤val≤30000 输入描述&#xff1a; 1.输入包含三行&#xff0c; 2.第一行包含两个正整数n, m&am…

python网络爬虫(二)基本库的使用urllib/requests

使用urllib 了解一下 urllib 库&#xff0c;它是 Python 内置的 HTTP 请求库&#xff0c;也就是说不需要额外安装即可使用。它包含如下 4 个模块。 request&#xff1a;它是最基本的 HTTP 请求模块&#xff0c;可以用来模拟发送请求。就像在浏览器里输入网址然后回车一样&…

html web前端,登录,post请求提交 json带参

html web前端&#xff0c;登录&#xff0c;post请求提交 json带参 3ca9855b3fd279fa17d46f01dc652030.jpg <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title></t…

rust学习——方法 Method

文章目录 方法 Method定义方法self、&self 和 &mut self方法名跟结构体字段名相同 带有多个参数的方法关联函数多个 impl 定义为枚举实现方法 rust 结构体与枚举的区别回答1回答2 方法 Method 从面向对象语言过来的同学对于方法肯定不陌生&#xff0c;class 里面就充斥…

Python-----for循环基本语法及其应用---对序列进行遍历循环

for循环基本语法 for循环结构主要用于&#xff08;序列 &#xff1a;包括 字符串、列表、元组、集合以及字典&#xff09;类型数据的遍历&#xff08;循环&#xff09;操作。 遍历(Traversal)&#xff0c;是指沿着某条搜索路线&#xff0c;依次对树&#xff08;或图&#…

nodejs+wasm+rust debug及性能分析

文章目录 背景v8引擎自带的profilelinux的perf采集wasm三方库性能分析编译debug版本wasmrust程序debug调试异常模型正常模型结论优化 参考 Node使用火焰图优化CPU爆涨 - 掘金 【Node.js丨主题周】理解perf 与火焰图-腾讯云开发者社区-腾讯云 Easy profiling for Node.js Applic…

RK3568平台开发系列讲解(应用篇)串口应用编程之串口的使用步骤

🚀返回专栏总目录 文章目录 一、配置参数1.1、获取当前串口的配置参数1.2、修改和写入串口的配置参数二、模式2.1、输入模式2.2、输出模式2.3、控制模式2.4、本地模式2.5、特殊控制字符沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 串口设备是嵌入式开发中最常用的…

Node.js在Python中的应用实例解析

随着互联网的发展&#xff0c;数据爬取成为了获取信息的重要手段。本文将以豆瓣网为案例&#xff0c;通过技术问答的方式&#xff0c;介绍如何使用Node.js在Python中实现数据爬取&#xff0c;并提供详细的实现代码过程。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境…

Flutter的Invalid use of a private type in a public API警告

文章目录 问题描述有问题的源码 问题原因解决方法 问题描述 自己在写Flutter 应用时发现了一个Invalid use of a private type in a public API警告。 发现很多官方的例子也有这个问题。 有问题的源码 有问题的源码如下&#xff1a; class MyTabPage extends StatefulWid…

【三维重建-PatchMatchNet复现笔记】

【三维重建-PatchMatchNet复现笔记】 1 突出贡献2 数据集描述3 训练PatchMatchNet3.1 输入参数3.2 制定数据集加载方式 1 突出贡献 在计算机GPU和运行时间受限的情况下&#xff0c;PatchMatchNet测试DTU数据集能以较低GPU内存和较低运行时间&#xff0c;整体误差位列中等&#…

python sqlalchemy(ORM)- 02 表关系

文章目录 表关系ORM表示 1v1ORM表示 1vm 表关系 1:1&#xff0c;表A 中的一条记录&#xff0c;仅对应表B中的一条记录&#xff1b;表B的一条记录&#xff0c;仅对应表A的一条记录。1:m&#xff0c;表A中的一条记录&#xff0c;对应表B中的多条记录&#xff0c;表B中的一条记录…

【机器学习】集成学习Boosting

文章目录 集成学习BoostingAdaBoost梯度提升树GBDTXGBoostxgboost库sklearn APIxgboost库xgboost应用 集成学习 集成学习&#xff08;ensemble learning&#xff09;的算法主要包括三大类&#xff1a;装袋法&#xff08;Bagging&#xff09;&#xff0c;提升法&#xff08;Boo…

在 Python 中使用 Pillow 进行图像处理【2/4】

第二部分 一、说明 该文是《在 Python 中使用 Pillow 进行图像处理》的第二部分&#xff0c;主要介绍pil库进行一般性处理&#xff1a;如&#xff1a;图像卷积、钝化、锐化、阈值分割。 二、在 Python 中使用 Pillow 进行图像处理 您已经学习了如何裁剪和旋转图像、调整图像大…

26. 通过 cilium pwru了解网络包的来龙去脉

pwru是一种基于eBPF的工具,可跟踪Linux内核中的网络数据包,并具有先进的过滤功能。它允许对内核状态进行细粒度检查,以便通过调试网络连接问题来解决传统工具(如iptables TRACE或tcpdump)难以解决甚至无法解决的问题。在本文中,我将介绍pwru如何在不必事先了解所有内容的…

【java】【重构二】分模块开发版本锁定以及耦合(打包)实战

目录 一、创建dependencyManagement标签 二、 将需要版本控制的依赖版本进行标签设置 三、将需要版本控制的依赖从各子模块迁移到此处 四、将父模块的依赖版本控制 五、删除子模块的全部版本 1、bocai-web-management模块 2、bocai-utils模块 六、打包 1、确定代码都…

shein面试:nacos无入侵配置,做过吗,怎么做?

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、shein 希音、百度、网易的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 无入侵配置&#xff0c;做过吗&#xff0c;怎么做的&#xff1f;Na…

学习package.json

package.json 文件&#xff0c;它是项目的配置文件&#xff0c;常见的配置有配置项目启动、打包命令&#xff0c;声明依赖包等。package.json 文件是一个 JSON 对象&#xff0c;该对象的每一个成员就是当前项目的一项设置。 {"name": "monorepo_frame",&q…