跳到主要内容

注解方式

在接口的方法上通过使用 dbVisitor 提供的注解来定义 ElasticSearch 命令,这些方法充当数据库访问的媒介,从而避免复杂的操作代码。

提示

对于 核心 API 提供的注解 方式除了除 @Call 注解不支持之外,其它所有注解都可以在 ElasticSearch 数据源上正常使用。

1. 定义对象
@Table("user_info")
public class UserInfo {
@Column(value = "uid", primary = true)
private String uid;
@Column("name")
private String name;
... // 省略 getter/setter 方法
}
2. 定义 Mapper 接口
@SimpleMapper()
public interface UserInfoMapper {
// 生成命令:POST /user_info/_doc ...
@Insert("POST /user_info/_doc { \"uid\": #{info.uid}, \"name\": #{info.name} }")
int saveUser(@Param("info") UserInfo info);

// 生成命令:POST /user_info/_search ...
@Query("POST /user_info/_search { \"query\": { \"term\": { \"uid\": #{uid} } } }")
UserInfo loadUser(@Param("uid") String uid);

// 生成命令:POST /user_info/_delete_by_query ...
@Delete("POST /user_info/_delete_by_query { \"query\": { \"term\": { \"uid\": #{uid} } } }")
int deleteUser(@Param("uid") String uid);
}
3. 创建通用 Mapper
// 1,创建 Configuration
Configuration config = new Configuration();

// 2,创建 Session
Session session = config.newSession(dataSource);
或者
Session session = config.newSession(connection);

// 3,创建 Mapper
UserInfoMapper mapper = session.createMapper(UserInfoMapper.class);

映射 ObjectId

MongoDB 的 _id 字段通常是 ObjectId 类型,而在 Java 对象中我们通常使用 String 类型。

1. 定义对象
@Table("user_info")
public class UserInfo {
// 声明 _id 字段,并配置 whereValueTemplate 用于 Lambda/BaseMapper 自动生成查询条件
@Column(value = "_id", primary = true, keyType = KeyType.Auto, whereValueTemplate = "ObjectId(?)")
private String id;

@Column("name")
private String name;
...
}
2. Mapper 定义
@SimpleMapper()
public interface UserInfoMapper {
// 在 @Query 中使用 ObjectId(#{id}) 语法进行查询
@Query("test.user_info.find({_id: ObjectId(#{id})})")
UserInfo loadById(@Param("id") String id);
}

分页查询

在 Mapper 方法中添加 Page 参数即可实现分页查询。

Mapper 定义
@SimpleMapper()
public interface UserInfoMapper {
@Query("test.user_info.find({name: #{name}})")
List<UserInfo> queryByName(@Param("name") String name, Page page);
}
调用分页
Page page = new PageObject();
page.setPageSize(10);
page.setPageNumber(0);

List<UserInfo> list = mapper.queryByName("mali", page);

// 翻页
page.nextPage();
list = mapper.queryByName("mali", page);