mongodb初成长,spring整合mongodb

Java工程师成长之路:从基础到架构的十年实战经验总结 Java作为企业级应用开发的核心语言,其技术体系涵盖从基础语法到分布式架构的完整知识栈。理解Java虚拟机内存模型、垃圾回收机制和并发编程原理,是构建高性能、高可用系统的技术基石。这些底层机制直接决定了应用的内存效率、线程安全和响应能力,对于处理高并发场景、优化系统性能具有关键价值。在实际工程实践中,开发者需要掌握Spring生态、微服务架构以及数据库优化等关键技术,以应对复杂的业务需求。本文基于Java面试八股文和Java虚拟线程等热点话题,分享从编码实践到系统设计的完整成长路径,涵盖环境配置、工具链使用 阅读详情

pom.xml

  <properties>
    <org.springframework.version>4.3.6.RELEASE</org.springframework.version>
  </properties>

<dependencies>
    <dependency>  
        <groupId>org.springframework</groupId>  
        <artifactId>spring-webmvc</artifactId>  
        <version>${org.springframework.version}</version>
    </dependency> 
    <dependency>
	    <groupId>log4j</groupId>
	    <artifactId>log4j</artifactId>
	    <version>1.2.17</version>
	</dependency>
	<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-log4j12</artifactId>
	    <version>1.7.23</version>
	</dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.10.0.RELEASE</version>
    </dependency>
	<dependency>
	    <groupId>commons-fileupload</groupId>
	    <artifactId>commons-fileupload</artifactId>
	    <version>1.3</version>
	</dependency>
	<dependency>
		<groupId>commons-lang</groupId>
		<artifactId>commons-lang</artifactId>
		<version>2.6</version>
	</dependency>
	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-core</artifactId>
		<version>2.8.6</version>
	</dependency>
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-databind</artifactId>
	    <version>2.8.6</version>
	</dependency>
		
    
    
    <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-test</artifactId>
	    <version>${org.springframework.version}</version>
	    <scope>test</scope>
	</dependency>
	<dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>4.12</version>
	    <scope>test</scope>
	</dependency>
</dependencies>

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:mongo="http://www.springframework.org/schema/data/mongo"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
						http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/data/mongo 
						http://www.springframework.org/schema/data/mongo/spring-mongo.xsd 
						http://www.springframework.org/schema/aop 
						http://www.springframework.org/schema/aop/spring-aop.xsd
						http://www.springframework.org/schema/context 
						http://www.springframework.org/schema/context/spring-context.xsd
						http://www.springframework.org/schema/tx 
						http://www.springframework.org/schema/tx/spring-tx.xsd
						http://www.springframework.org/schema/util
						http://www.springframework.org/schema/util/spring-util.xsd"
	default-autowire="byName">
	
	<!-- 除了具有<context:annotation-config />的功能之外,还具有自动将带有@component,@service,@Repository等注解的对象注册到spring容器中的功能。排除@Controller组件,该组件由SpringMVC配置文件扫描 -->
	<context:component-scan base-package="com.hd.mamainst.app.service,com.hd.mamainst.app.dao,com.hd.mamainst.basedao">
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	</context:component-scan>
	
	<context:property-placeholder location="classpath*:mongodb.properties"  />
	
	
	<!-- mongo客户端连接 -->
	<mongo:mongo-client id="mongoClient" credentials="${mongo.user}:${mongo.pwd}@${mongo.dbname}" host="${mongo.host}" port="${mongo.port}">
        <mongo:client-options
                connections-per-host="${mongo.connectionsPerHost}"
                min-connections-per-host="${mongo.minConnectionsPerHost}"
                threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
                connect-timeout="${mongo.connectTimeout}"
                max-wait-time="${mongo.maxWaitTime}"
                socket-keep-alive="${mongo.socketKeepAlive}"
                socket-timeout="${mongo.socketTimeout}"
                max-connection-idle-time="${mongo.maxConnectionIdleTime}"
                max-connection-life-time="${mongo.maxConnectionLifeTime}"
        />
    </mongo:mongo-client>
    
    <!-- mongo工厂 -->
    <mongo:db-factory id="mongoDbFactory" mongo-ref="mongoClient" dbname="${mongo.dbname}" />
    
    <!-- mongo操作模板,注入了前面的mongo工厂和自定义mongo转换器 -->
    <mongo:template id="mongoTemplate" db-factory-ref="mongoDbFactory"  write-concern="NORMAL"/>
</beans>

mongodb.properties

#正式环境
mongo.host=127.0.0.1
mongo.user=mongouser
mongo.pwd=mongpwd
mongo.dbname=test
mongo.port=27017
#每个主机的连接数 
mongo.connectionsPerHost=10
#每个主机的最小连接数
mongo.minConnectionsPerHost=5
#线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值。如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误
mongo.threadsAllowedToBlockForConnectionMultiplier=5
#连接超时的毫秒。0是默认和无限
mongo.connectTimeout=10000
#最大等待连接的线程阻塞时间
mongo.maxWaitTime=120000
#此参数表示socket I/O读写超时时间,推荐为不超时,即 0    Socket.setSoTimeout(int)
mongo.socketTimeout=0
#该标志用于控制socket保持活动的功能,通过防火墙保持连接活着
mongo.socketKeepAlive=false
#最大连接空闲时间
mongo.maxConnectionIdleTime=1500
#最大连接存留时间
mongo.maxConnectionLifeTime=0


#mongo slave
#mongo.heartbeatSocketTimeout=1000
#mongo.heartbeatConnectTimeout=1500
#mongo.minHeartbeatFrequency=5
#mongo.heartbeatFrequency=10

编写测试类进行测试

MongDbTest.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class MongoDbTest {
	@Resource
    private MongoTemplate mongoTemplate;
	private static List<String> deleteList;

	@Before
	public void beforeTest() {
		deleteList=new ArrayList<>();
	}
	
	@After
	public void afterTest() {
		for (String id : deleteList) {
			mongoTemplate.remove(new Query(Criteria.where("_id").is(id)), "user");
		}
	}
    
    @Test
    public void saveTest() {
    	//准备
    	AccountDocument user1 = new AccountDocument();
		user1.setCreatedate(new Date());
		user1.setIssigneddelete(false);
		user1.setLabel("测试用户");
		
		//测试
		mongoTemplate.insert(user1);
		
		//记录删除
		deleteList.add(user1.getId());
		
		//验证
        Assert.assertNotNull(user1.getId());
    }
    
    @Test
    public void findTest() {
    	//准备
		AccountDocument user1 = new AccountDocument();
		user1.setCreatedate(new Date());
		user1.setIssigneddelete(false);
		user1.setAccountmobile("18080147050");
		user1.setLabel("测试用户");
		mongoTemplate.insert(user1);
		deleteList.add(user1.getId());
    	
		//测试
		Query query = new Query(Criteria.where("accountmobile").is("18080147050"));
		List<AccountDocument> list = mongoTemplate.find(query, AccountDocument.class);
		
		//验证
        Assert.assertTrue(list!=null&&list.size()>0);
    }
    
    @Test
    public void updateTest() {
    	//准备
		AccountDocument user1 = new AccountDocument();
		user1.setCreatedate(new Date());
		user1.setIssigneddelete(false);
		user1.setAccountmobile("18888888888");
		user1.setLabel("测试用户");
		mongoTemplate.insert(user1);
		deleteList.add(user1.getId());
    	
		//测试
    	Query query = new Query(Criteria.where("_id").is(user1.getId()));
		mongoTemplate.updateFirst(query, new Update().set("accountmobile", "18080147050"), AccountDocument.class);
		
		//验证
        Assert.assertTrue("18080147050".equals(mongoTemplate.findOne(query, AccountDocument.class).getAccountmobile()));
    }
    
    @Test
    public void deleteTest() {
    	//准备
		AccountDocument user1 = new AccountDocument();
		user1.setCreatedate(new Date());
		user1.setIssigneddelete(false);
		user1.setLabel("测试用户");
		mongoTemplate.insert(user1);
		deleteList.add(user1.getId());
    	
		//测试
		Query query = new Query(Criteria.where("_id").is(user1.getId()));
		mongoTemplate.remove(query, AccountDocument.class);
		
		//验证
        Assert.assertTrue(mongoTemplate.findOne(query, AccountDocument.class)==null);
    }
}


baseDaoImpl(接口略):

/**
 * Dao实现
 * @author 
 *
 * @param <T>
 */
@Repository
public class BaseDaoImpl<T extends BaseDocument> implements  BaseDao<T> {

	@Autowired
    protected MongoTemplate mongoTemplate;

    public T add(T entity) {
    	if(entity.getIssigneddelete()==null){
    		entity.setIssigneddelete(false);
    	}
    	entity.setCreatedate(new Date());
        mongoTemplate.insert(entity);
        return entity;
    }
    public T queryById(String id) {
        return mongoTemplate.findById(id, this.getEntityClass());
    }

    public List<T> queryList() {
        return mongoTemplate.findAll(this.getEntityClass());
    }

    public List<T> queryList(Query query) {
        return mongoTemplate.find(query, this.getEntityClass());
    }

    public T queryFirst(Query query) {
        return mongoTemplate.findOne(query, this.getEntityClass());
    }

    public Page<T> queryPage(Page<T> page, Query query) {
        //如果没有条件 则所有全部
        query=query==null?new Query(Criteria.where("_id").exists(true)):query;
        long count = this.queryCount(query);
        // 总数
        page.setTotalCount((int) count);
        int currentPage = page.getCurrentPage();
        int pageSize = page.getPageSize();
        query.skip((currentPage - 1) * pageSize).limit(pageSize);
        List<T> rows = this.queryList(query);
        page.build(rows);
        return page;
    }

    public long queryCount(Query query) {
        return mongoTemplate.count(query, this.getEntityClass());
    }

    public WriteResult update(Query query, Update update) {
        if (update==null) {
            return null;
        }
        return mongoTemplate.updateMulti(query, update, this.getEntityClass());
    }

    public T updateOne(Query query, Update update) {
        if (update==null) {
            return null;
        }
        return mongoTemplate.findAndModify(query, update, this.getEntityClass());
    }

    public WriteResult update(T entity) {
        Field[] fields = entity.getClass().getSuperclass().getDeclaredFields();
        if (fields == null || fields.length <= 0) {
            return null;
        }
        Field idField = null;
        // 查找ID的field
        for (Field field : fields) {
            if (field.getName() != null
                    && "id".equals(field.getName().toLowerCase())) {
                idField = field;
                break;
            }
        }
        if (idField == null) {
            return null;
        }
        idField.setAccessible(true);
        String id=null;
        try {
            id = (String) idField.get(entity);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        if (id == null || "".equals(id.trim()))
            return null;
        // 根据ID更新
        Query query = new Query(Criteria.where("_id").is(id));
        
        
        fields = entity.getClass().getDeclaredFields();
        Update update = new Update();
        for (Field field : fields) {
            field.setAccessible(true);
            try {
                Object value = field.get(entity);
                if (value != null) {
                    if ("id".equals(field.getName().toLowerCase())){
                        continue;
                    } else {
                        update = update.set(field.getName(), value);
                    }
                }
            } catch (Exception e) {
               continue;
            }
        }
        return mongoTemplate.updateFirst(query, update, getEntityClass());
    }

    public void deleteObjectByLogic(T t) {
    	mongoTemplate.updateMulti(new Query(Criteria.where("_id").is(t.getId())), Update.update("issigneddelete", true).set("deletedate", new Date()), this.getEntityClass());
    }
    
    public void deleteByLogic(Query query) {
    	mongoTemplate.updateMulti(query, Update.update("issigneddelete", true).set("deletedate", new Date()), this.getEntityClass());
    }
    
    public void deleteObjectByPhysics(T t) {
    	mongoTemplate.remove(new Query(Criteria.where("_id").is(t.getId())), this.getEntityClass());
    }
    
    public void deleteByPhysics(Query query) {
    	mongoTemplate.remove(query, this.getEntityClass());
    }
    /**
     * 获得泛型类
     */
    @SuppressWarnings("unchecked")
	private Class<T> getEntityClass() {
    	Type genType = getClass().getGenericSuperclass();
        if (genType instanceof ParameterizedType) {
        	Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
            if(params!=null&¶ms.length>0){
            	return (Class<T>) params[0];
            }
        }
        return null;
    }
}


Page.java

public class Page<T> implements Serializable {
	private static final long serialVersionUID = 5760097915453738435L;
	public static final int DEFAULT_PAGE_SIZE = 10;
	/**
	 * 每页显示个数
	 */
	private int pageSize;
	/**
	 * 当前页数
	 */
	private int currentPage;
	/**
	 * 总页数
	 */
	private int totalPage;
	/**
	 * 总记录数
	 */
	private int totalCount;
	/**
	 * 结果列表
	 */
	private List<T> rows;
	
	public Page(){
		 this.currentPage = 1;
	     this.pageSize = DEFAULT_PAGE_SIZE;
	}
	public Page(int currentPage,int pageSize){
		this.currentPage=currentPage<=0?1:currentPage;
		this.pageSize=pageSize<=0?1:pageSize;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}
	public int getTotalPage() {
		return totalPage;
	}
	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}
	public int getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	/**
	 * 设置结果 及总页数
	 * @param list
	 */
	 public void build(List<T> rows) {  
	        this.setRows(rows);  
	        int count =  this.getTotalCount();  
	        int divisor = count / this.getPageSize();  
	        int remainder = count % this.getPageSize();  
	        this.setTotalPage(remainder == 0 ? divisor == 0 ? 1 : divisor : divisor + 1);  
	    }
	public List<T> getRows() {
		return rows;
	}
	public void setRows(List<T> rows) {
		this.rows = rows;
	}  
}


AccountDao.java

@Repository
public class AccountDao extends BaseDaoImpl<AccountDocument>{
}


编写测试类进行测试

BaseDaoImplTest.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class BaseDaoImplTest{
	@Autowired
	private AccountDao userDao;
	@Autowired
	private MongoTemplate mongoTemplate;
	private static List<String> deleteList;

	@Before
	public void beforeTest() {
		deleteList=new ArrayList<>();
	}
	
	@After
	public void afterTest() {
		for (String id : deleteList) {
			mongoTemplate.remove(new Query(Criteria.where("_id").is(id)), "accountDocument");
		}
	}
	
	
	@Test
	public void addTest() {
		//准备
		AccountDocument user = new AccountDocument();
		user.setAccountmobile("18080147050");
		user.setAccountpassword("654321");
		
		//测试
		userDao.add(user);
		
		//记录删除
		deleteList.add(user.getId());
				
		//验证
		Assert.assertNotNull(user);
	}

	@Test
	public void findTest() {
		//准备
		AccountDocument user = new AccountDocument();
		user.setAccountmobile("18080147050");
		userDao.add(user);
		deleteList.add(user.getId());
		
		//测试
		Query query = new Query(Criteria.where("_id").is(user.getId()));
		user = userDao.queryFirst(query);
		
		//验证
		Assert.assertTrue(user!=null);
	}

	@Test
	public void updateTest() {
		//准备
		AccountDocument user = new AccountDocument();
		user.setAccountmobile("18080147050");
		userDao.add(user);
		deleteList.add(user.getId());
		
		//测试
		user.setAccountsex("man");
		user.setAccountmobile("18080147050");
		userDao.update(user);
		
		//验证
		user = userDao.queryFirst(new Query(Criteria.where("_id").is(user.getId())));
		Assert.assertTrue(user!= null && "man".equals(user.getAccountsex()));
	}

	@Test
	public void deleteByLogicTest() {
		//准备
		AccountDocument user = new AccountDocument();
		user.setAccountmobile("18080147050");
		userDao.add(user);
		deleteList.add(user.getId());
		
		//测试
		Query query = new Query(Criteria.where("_id").is(user.getId()));
		userDao.deleteByLogic(query);
		
		//验证
		user = userDao.queryFirst(query);
		Assert.assertTrue(user.getIssigneddelete()&&user.getDeletedate()!=null);
	}
	
	@Test
	public void deleteByPhysics() {
		//准备
		AccountDocument user = new AccountDocument();
		user.setAccountmobile("18080147050");
		userDao.add(user);
		deleteList.add(user.getId());
		
		//测试
		Query query = new Query(Criteria.where("_id").is(user.getId()));
		userDao.deleteByPhysics(query);
		
		//验证
		user = userDao.queryFirst(query);
		Assert.assertTrue(user==null);
	}
	@Test
	public void deleteObjectByLogic() {
		//准备
		AccountDocument user = new AccountDocument();
		user.setAccountmobile("18080147050");
		userDao.add(user);
		deleteList.add(user.getId());
		
		//测试
		userDao.deleteObjectByLogic(user);
		
		//验证
		Query query = new Query(Criteria.where("_id").is(user.getId()));
		user = userDao.queryFirst(query);
		Assert.assertTrue(user.getIssigneddelete()&&user.getDeletedate()!=null);
	}
	@Test
	public void deleteObjectByPhysics() {
		//准备
		AccountDocument user = new AccountDocument();
		user.setAccountmobile("18080147050");
		userDao.add(user);
		deleteList.add(user.getId());
		
		//测试
		userDao.deleteObjectByPhysics(user);
		
		//验证
		Query query = new Query(Criteria.where("_id").is(user.getId()));
		user = userDao.queryFirst(query);
		Assert.assertTrue(user==null);
	}
}


`<artifactId>spring-boot-starter-data-mongodb</artifactId>` 是Maven项目的一个依赖标签,用于引入Spring Boot的MongoDB集 Spring Boot的Starter是Spring Boot项目中的一种轻量级工具,它是通过一组预先配置好的依赖来简化应用的初始设置。Spring Boot Starter的主要目的是为了降低新项目的搭建复杂性,特别是对于那些常用的库和框架,如数据库连接(如Mybatis-spring-boot-starter),它可以帮助开发者快速集成MyBatis到Spring Boot项目中,而无需手动配置太多细节。:随着项目的成长,新手可以根据需要添加或移除Starter,保持代码结构清晰,便于维护。 阅读详情

相关推荐

Score Matching(得分匹配)

Score Matching(得分匹配)是一种统计学习方法,用于估计概率密度函数的梯度(即得分函数),而无需知道密度函数的归一化常数。这种方法由Hyvärinen在2005年提出,主要用于无监督学习,特别是在密度估计和生成模型中。

weixin_39699362的博客 2167

生产问题(二)MongoDb链接失效

线上MongoDB出现了如下图所示的报错,服务端链接失败,查询资料得知Linux会销毁服务器上五分钟未使用的Socket通信链接。

m0_69270256的博客 2万+

高分创新点!Mamba+CNN结合,发顶会首选!

研究摘要 近期视觉领域涌现CNN与Mamba的融合架构,通过双分支设计互补优势。ConvMamba结合CNN的局部特征提取与Mamba的全局建模能力,在ImageNet分类任务中实现90.2%准确率,推理速度提升1.8倍。医学图像方向,PGM-UNet引入提示引导残差Mamba模块,结合多尺度空洞卷积与KANs,显著提升分割精度;遥感领域CM-UNet通过CSMamba块与多尺度注意力聚合模块,有效捕捉长距离依赖。这些工作表明,跨模态轻量化融合与注意力优化是未来重要方向。

m0_73122726的博客 1013

mongodb连接配置实践

之前百度,google了很多,发现并没有介绍mongodb生产环境如何配置的文章, 当时想参考下都不行, 所以写篇文章,大家可以一块讨论下. 1. MongoClientOptions中的连接池配置: 配置如下: connectionPoolSettings = ConnectionPoolSettings.builder() .minSize(getMinConnectionsPerH

做的过程自我总结 1886

nvidia-container-toolkit 国内镜像源安装

nvidia-container-toolkit 国内镜像源安装

湫然的博客 1万+

【AI智能体】Codex + Seedance2.5 制作AI视频实战操作详解

【AI智能体】Codex + Seedance2.5 制作AI视频实战操作详解

congge_study的博客 3795

Mongodb的简单介绍和使用

1.简介:引用官方文档的一句话 MongoDB is a document database with the scalability and flexibility that you want with the querying and indexing that you need 也就是说mongoDB 是可扩展的、灵活的、支持索引的文档数据库。 2.创建用户 ...

weixin_42739473的博客 326

Flutter SDK的删除与重装:一步步教你如何轻松搞定

在Flutter开发过程中,我们可能会遇到一些需要重新安装Flutter SDK的情况,例如升级Flutter版本、解决依赖冲突等。本文将详细介绍如何删除并重新安装Flutter SDK,让你轻松应对各种问题。

理论都是虚的,代码才是王道。 2247

SpringBoot中使用MongoDB的连接池配置

在SpringBoot中,我们可以通过引入 spring-boot-starter-data-mongodb 依赖来实现spring-data-mongodb 的自动配置。但是,默认情况下,该依赖并没有像使用MySQL或者Redis那样为我们提供连接池配置的功能。因此,我们需要自行重写 MongoDbFactory,实现MongoDB客户端连接的参数配置扩展。需要说明的是,MongoDB的客户端本...

pengjunlee的博客 9万+

Oracle EBS R12 AR 标准发票 核心表结构

​ Oracle EBS R12 AR 标准发票 核心表结构 聚焦手动标准发票 (Standard Invoice),按头→行→分配→税→收款计划→会计分录→历史分层,标注主键、外键、关键字段、业务含义,同时说明表间关联关系,适配开发 / 运维 / 数据核对场景。 一、主数据层(发票头 + 行,核心业务表) 1. RA_CUSTOMER_TRX_ALL 【发票头表】 作用:存储整张发票头部信息,一张发票对应一条记录,AR 发票主表。 主键:CUSTOMER_TRX_ID (唯一 ID,系统内部键) 业

金牌架构师 282

43、FMCW雷达高度计仿真

本文介绍了FMCW雷达高度计的波形级建模与仿真过程,重点模拟了着陆和倾斜两种飞行场景以评估其性能。通过结合高程数据和飞行轨迹构建雷达场景,使用自定义信号处理器分析IQ样本并估计高度。结果表明,该高度计在多数情况下满足性能要求,但也存在误差较大的点,提出了地面检测算法优化的潜在方向。

neovim7hacker的博客 135

MongoDb连接池源码追踪

1. 先来看构建MongoClient使用的参数 MongoClientOptions.Builder optionsBuilder = builder() .applicationName(applicationName) .maxConnectionIdleTime(config.getMaxConnectionIdleTime() == 0 ? MAX_CONNECTION_IDLE_T

八荒六合唯我独尊 7133

PCL——KITTI数据集.bin文件转.pcd并可视化【2025最新版】

kitti数据集中的bin格式点云主要存储的字段为:`x`、`y`、`z`、`intensity`,对应于PCL中的PointXYZI。因此,只需将bin中的属性信息读取出来放入`PointXYZI`即可。本文给出简单易用的实现代码。博客长期更新,本文最近更新时间为:2025年1月11日。

点云侠的博客 3956

mongoDb入门并整合springboot

总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84413032的博客 819

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

直接裂开!京东二面被问SpringBoot整合MongoDB,我不会啊

(img-5jD0XTED-1713348518015)](img-jWRTbQGv-1713348518014)]#mongodb配置。

2401_84102892的博客 479

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MongoDB - 用Node.js连接MongoDB:从安装驱动到CRUD实战

摘要:本文详细介绍如何使用Node.js连接MongoDB数据库,从环境配置到完整的CRUD操作实战。内容包括本地MongoDB安装、Node.js项目初始化、官方驱动安装与连接池管理,并通过用户管理系统案例演示增删改查功能(含错误处理)。文章强调最佳实践,如单例模式连接、环境变量管理敏感信息,并提供Java(Spring Data MongoDB)的等效代码示例以便对比学习。适合全栈开发者系统学习Node.js与MongoDB的集成开发。 关键词:Node.js, MongoDB, CRUD, 数据库连接

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MongoDB - MongoDB与Redis结合:缓存+持久化的双保险方案

本文介绍MongoDB与Redis结合的"缓存+持久化"双保险架构方案,详细分析四种缓存策略(Cache-Aside、Read-Through等)的适用场景与实现方式,并提供Java代码示例。文章重点解决缓存穿透、击穿、雪崩三大难题,通过Mermaid架构图展示数据流转过程,帮助开发者构建高并发、低延迟的健壮系统。针对不同业务场景给出选型建议,是兼顾性能与可靠性的实用参考方案。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

全网首发,鹅厂内部Spring Boot核心手册终于开源了

第九部分讲解Spring 5推出的新的非阻塞框架WebFlux,介绍非阻塞编程的技巧,通过它可以构建非阻塞的网站。

2401_84048149的博客 1009

(七)从 “非结构化数据难存储” 到 “MongoDB 灵活赋能”——MongoDB 实战进阶指南

摘要 本文分享了Java开发者从MySQL转向MongoDB处理非结构化数据的实战经验。针对日志、富文本等非结构化数据在MySQL中存储的痛点,详细介绍了MongoDB的核心优势、基础概念(对比MySQL)及Spring Boot整合配置。通过实例展示MongoDB灵活的文档存储方式,并提供新手可直接复用的依赖配置和YAML文件模板,帮助开发者快速掌握MongoDB基础,解决非结构化数据处理难题。

修行者Java的博客 484

高考后成长APP全栈开发指南:从目标管理到社区推荐系统

在移动应用开发领域,构建一个集目标管理、资源聚合与社区互动于一体的平台,是许多全栈开发者面临的典型挑战。其技术核心在于如何将非结构化的用户需求,通过系统架构设计转化为可执行的功能模块。从原理上看,这通常涉及前后端分离、多端适配、数据建模与算法推荐等关键技术。这类应用的技术价值在于,它不仅是代码的堆砌,更是对用户行为逻辑的工程化实现,能有效解决信息过载与学习动力缺失等痛点。在应用场景上,尤其适合教育科技、个人成长及内容社区类产品。本文以一款面向高考后学生的规划APP为例,深入剖析其系统架构,涵盖从用户系统、任

weixin_34268753的博客 326

面试再问Spring?这份价值百万的的SpringBoot全栈笔记 看完直接怼他

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。本文已被。

2401_84688466的博客 914

阿里大佬倾情力荐:Java全线成长宝典,理论到实战

深入Tomcat底层:理解Tomcat启动流程+Tomcat配置详解+HTTP请求解析与处理流程+Tomcat核心组件认识+Tomcat类加载机制及源码解析+Tomcat中异步Servlet实现源码分析+Tomcat BIO实现源码解读+Tomcat NIO实现源码解读+Tomcat集群与会话复制方案+Tomcat性能调优+JVM参数优化+Tomcat集群+Tomcat安全。SpringCloud Netflix:什么是微服务?

2401_83329402的博客 715

Spring MVC实现文件上传,MongoDB数据分布不均的解决方案

开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。(img-ZUgpNjxW-1710841651360)](img-Pq55iqrC-1710841651360)](img-Dt6wbed3-1710841651361)](img-eJTWfrZe-1710841651361)]java连接mysql的驱动坐标。mybatis依赖的坐标。

m0_60667406的博客 360

Spring框架核心技术解析

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》、(架构篇)、作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

AIHacksCash的博客 852

Springboot计算机毕业设计成长档案管理平台jf6j5(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

项目功能:学生,课程技能,技能竞赛,成长档案,档案管理员。

atongmudangdang的博客 843

Spring boot与Spring cloud 是什么关系?,2024年最新mongodb实战

2 如果你之前还用过ssm框架,那还会发现,在Spring boot框架开发业务时,不需要冗余地写太多的xml文件,而可以用简单的注解来开发业务。3 但是,用Spring boot开发出来的项目,顶多属于单机版,不能应对高并发。比如在一个项目里,引入再多的优化机制,未必能让这个项目或业务模块应对高并发的挑战,一般单机版的spring boot,能应对1000tps左右的并发量就不错了。而且,单机版的spring boot,无法有效地管理服务,也无法引入限流熔断等高并发业务点。

2401_84138785的博客 408
上一篇: 解决Spring MVC中get请求参数乱码的一种不改tomcat配置解决方法
lk-eternal
博客等级 码龄11年 5粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值