Skip to content

ijson-projects/ai-mongo-support

Repository files navigation

AI MongoDB Support

License Java Gradle MongoDB Spring

🚀 一个强大且易用的 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 jar

📦 快速开始

1. 添加依赖

Gradle 方式:

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>

2. 配置 MongoDB 连接

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

3. Spring 配置

在 Spring 配置文件中添加:

<bean id="mongoDataStoreFactory" 
      class="com.ijson.mongo.support.MongoDataStoreFactory" 
      p:configName="mongo-config"/>

4. 创建实体类

@Entity(value = "users", noClassnameStored = true)
@Data
@EqualsAndHashCode(callSuper = false)
public class User extends BaseEntity {
    private String username;
    private String email;
    private Integer age;
}

5. 实现 DAO 层

@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();
    }
}

6. 实现 Service 层

@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();

📋 配置选项

MongoDB 连接配置

配置项 说明 默认值 示例
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

📊 性能优化建议

  1. 连接池配置:根据应用负载调整连接池大小
  2. 索引优化:为常用查询字段创建索引
  3. 批量操作:使用批量插入和更新减少网络开销
  4. 分页查询:避免一次性加载大量数据

🔍 故障排除

常见问题

Q: 连接超时怎么办? A: 检查 mongo.connectTimeoutmongo.socketTimeout 配置,确保网络连接正常。

Q: 实体类映射失败? A: 确保实体类在 mongo.mapPackage 指定的包路径下,并正确使用 @Entity 注解。

Q: 查询性能慢? A: 检查是否为查询字段创建了索引,考虑使用分页查询。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

📄 许可证

本项目采用 Apache License 2.0 许可证。

About

AI MongoDB Support is a Java wrapper library based on MongoDB, providing simplified implementation of data access layer and business service layer. This component relies on the Spring framework and is designed specifically for MongoDB non relational databases.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages