🚀 一个强大且易用的 Java MongoDB 封装库
English | 中文
AI MongoDB Support 是一个基于 MongoDB 的 Java 封装库,提供了简化的数据访问层和业务服务层实现。本组件依赖 Spring 框架,专为 MongoDB 非关系型数据库设计。
- 🚀 简化的 DAO 层:基于 Morphia ODM 的抽象 DAO 实现
- 🔧 灵活的配置:支持多种配置方式和连接池优化
- 📦 开箱即用:提供完整的 CRUD 操作和分页查询
- 🛡️ 异常处理:统一的异常处理机制和参数验证
- 🔄 代码生成:支持实体类和 DAO 代码自动生成
- 📊 查询优化:内置查询辅助工具和性能优化
本项目使用 Gradle 作为主要构建工具,提供现代化的构建体验。
# 构建项目
./gradlew build
# 清理构建
./gradlew clean
# 发布到本地仓库
./gradlew publishToMavenLocal
# 生成 JAR 文件
./gradlew jarGradle 方式:
implementation 'com.ijson.ai:ai-mongo-support:1.0.0-SNAPSHOT'Maven 方式:
<dependency>
<groupId>com.ijson.ai</groupId>
<artifactId>ai-mongo-support</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>在 resources/autoconf 目录下创建配置文件(如 mongo-config):
# MongoDB 服务器配置
mongo.servers=127.0.0.1:27017
mongo.dbName=your_database
mongo.mapPackage=com.yourpackage.entity
# 连接池配置(可选)
mongo.maxConnectionsPerHost=100
mongo.minConnectionsPerHost=10
mongo.connectTimeout=5000
mongo.socketTimeout=60000
mongo.maxConnectionIdleTime=300000在 Spring 配置文件中添加:
<bean id="mongoDataStoreFactory"
class="com.ijson.mongo.support.MongoDataStoreFactory"
p:configName="mongo-config"/>@Entity(value = "users", noClassnameStored = true)
@Data
@EqualsAndHashCode(callSuper = false)
public class User extends BaseEntity {
private String username;
private String email;
private Integer age;
}@Repository
public class UserDaoImpl extends AbstractDaoImpl<User, UserQuery> implements UserDao {
public List<User> findByUsername(String username) {
Query<User> query = createEnabledQuery();
query.field("username").equal(username);
return query.asList();
}
}@Service
public class UserServiceImpl extends BaseServiceImpl<User, UserQuery> implements UserService {
@Autowired
private UserDao userDao;
@Override
protected AbstractDao<User, UserQuery> getDao() {
return userDao;
}
public User createUser(String username, String email) {
User user = new User();
user.setUsername(username);
user.setEmail(email);
return create(user);
}
}PageResult<User> result = userService.findByPage(query, 1, 20);List<User> users = userService.findByIds(Arrays.asList("id1", "id2", "id3"));Query<User> query = createEnabledQuery();
query.field("age").greaterThan(18);
query.field("email").contains("@gmail.com");
List<User> adults = query.asList();| 配置项 | 说明 | 默认值 | 示例 |
|---|---|---|---|
mongo.servers |
MongoDB 服务器地址 | 无 | 127.0.0.1:27017 |
mongo.dbName |
数据库名称 | 无 | myapp |
mongo.mapPackage |
实体类包路径 | 无 | com.example.entity |
mongo.maxConnectionsPerHost |
每个主机最大连接数 | 100 | 200 |
mongo.minConnectionsPerHost |
每个主机最小连接数 | 10 | 5 |
mongo.connectTimeout |
连接超时时间(ms) | 5000 | 10000 |
mongo.socketTimeout |
Socket超时时间(ms) | 60000 | 30000 |
mongo.maxConnectionIdleTime |
连接最大空闲时间(ms) | 300000 | 600000 |
# 运行所有测试
./gradlew test
# 运行特定测试
./gradlew test --tests "com.ijson.mongo.support.test.*"
# 生成测试报告
./gradlew test jacocoTestReport- 连接池配置:根据应用负载调整连接池大小
- 索引优化:为常用查询字段创建索引
- 批量操作:使用批量插入和更新减少网络开销
- 分页查询:避免一次性加载大量数据
Q: 连接超时怎么办?
A: 检查 mongo.connectTimeout 和 mongo.socketTimeout 配置,确保网络连接正常。
Q: 实体类映射失败?
A: 确保实体类在 mongo.mapPackage 指定的包路径下,并正确使用 @Entity 注解。
Q: 查询性能慢? A: 检查是否为查询字段创建了索引,考虑使用分页查询。
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目采用 Apache License 2.0 许可证。