精心整理了最新的面试资料和简历模板,有需要的可以自行获取
点击前往百度网盘获取
点击前往夸克网盘获取
一、环境准备
- JDK 17+
- Maven 3.8+
- Spring Boot 3.2+
- ArangoDB 3.11+(本地安装或Docker运行)
Docker启动ArangoDB
docker run -d --name arangodb \
-p 8529:8529 \
-e ARANGO_ROOT_PASSWORD=rootpassword \
arangodb:latest
二、创建Spring Boot项目
- 使用start.spring.io创建项目
- 添加依赖:
- Spring Web
- Lombok
三、添加ArangoDB依赖
<!-- pom.xml -->
<dependency>
<groupId>com.arangodb</groupId>
<artifactId>arangodb-spring-data</artifactId>
<version>3.8.0</version>
</dependency>
四、配置ArangoDB连接
# application.yml
arangodb:
host: 127.0.0.1
port: 8529
user: root
password: rootpassword
database: spring_db
创建配置类:
@Configuration
@EnableArangoRepositories(basePackages = "com.example.repository")
public class ArangoConfig {
@Value("${arangodb.host}")
private String host;
@Value("${arangodb.port}")
private int port;
@Value("${arangodb.user}")
private String user;
@Value("${arangodb.password}")
private String password;
@Value("${arangodb.database}")
private String database;
@Bean
public ArangoDB.Builder arangoBuilder() {
return new ArangoDB.Builder()
.host(host, port)
.user(user)
.password(password);
}
@Bean
public ArangoDatabase arangoDatabase() {
return arangoBuilder().build().db(database);
}
}
五、创建实体类
@Document("users")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@Id
private String id;
@ArangoId
private String arangoId;
private String name;
private String email;
private Integer age;
}
六、创建Repository接口
public interface UserRepository extends ArangoRepository<User, String> {
// 自定义查询方法
@Query("FOR u IN users FILTER u.age >= @0 RETURN u")
List<User> findByAgeGreaterThanEqual(int age);
}
七、实现Service层
@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
public User createUser(User user) {
return userRepository.save(user);
}
public List<User> getAllUsers() {
return (List<User>) userRepository.findAll();
}
public List<User> getUsersByAge(int age) {
return userRepository.findByAgeGreaterThanEqual(age);
}
}
八、创建REST控制器
@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
return ResponseEntity.ok(userService.createUser(user));
}
@GetMapping
public ResponseEntity<List<User>> getAllUsers() {
return ResponseEntity.ok(userService.getAllUsers());
}
@GetMapping("/age/{age}")
public ResponseEntity<List<User>> getUsersByAge(@PathVariable int age) {
return ResponseEntity.ok(userService.getUsersByAge(age));
}
}
九、测试验证
- 启动Spring Boot应用
- 使用Postman测试:
- POST
/api/users
{ "name": "John Doe", "email": "john@example.com", "age": 28 }
- GET
/api/users
查看所有用户 - GET
/api/users/age/25
查询年龄≥25的用户
- POST
十、高级查询示例
// 在Repository中添加
@Query("FOR u IN users FILTER u.name == @name RETURN u")
List<User> findByName(@Param("name") String name);
// 复杂查询示例
@Query("FOR u IN users FILTER u.age >= @minAge AND u.age <= @maxAge RETURN u")
List<User> findByAgeRange(@Param("minAge") int minAge,
@Param("maxAge") int maxAge);
十一、事务管理
@Autowired
private ArangoDatabase arangoDatabase;
public void transactionalOperation() {
arangoDatabase.transaction(
"users",
Collections.emptyMap(),
trx -> {
User user1 = new User("Alice", "alice@example.com", 30);
User user2 = new User("Bob", "bob@example.com", 25);
trx.collection("users").insertDocument(user1);
trx.collection("users").insertDocument(user2);
return null;
},
Void.class
);
}
十二、常见问题
- 连接失败:检查防火墙设置和ArangoDB日志
- 版本兼容性:确保ArangoDB服务端与Java驱动版本匹配
- AQL语法错误:使用ArangoDB Web界面(http://localhost:8529)调试查询