Annotation Style
Hint
This article is generated by AI translation.
Define ElasticSearch commands using annotations provided by dbVisitor on interface methods. These methods act as a medium for database access, avoiding complex operation code.
Hint
For Annotations provided by Core API, except for the @Call annotation which is not supported, all other annotations can be used normally on ElasticSearch data sources.
1. Define Entity
@Table("user_info")
public class UserInfo {
@Column(value = "uid", primary = true)
private String uid;
@Column("name")
private String name;
... // getters/setters omitted
}
2. Define Mapper Interface
@SimpleMapper()
public interface UserInfoMapper {
// Generate command: POST /user_info/_doc ...
@Insert("POST /user_info/_doc { \"uid\": #{info.uid}, \"name\": #{info.name} }")
int saveUser(@Param("info") UserInfo info);
// Generate command: POST /user_info/_search ...
@Query("POST /user_info/_search { \"query\": { \"term\": { \"uid\": #{uid} } } }")
UserInfo loadUser(@Param("uid") String uid);
// Generate command: POST /user_info/_delete_by_query ...
@Delete("POST /user_info/_delete_by_query { \"query\": { \"term\": { \"uid\": #{uid} } } }")
int deleteUser(@Param("uid") String uid);
}
3. Create Common Mapper
// 1. Create Configuration
Configuration config = new Configuration();
// 2. Create Session
Session session = config.newSession(dataSource);
// or
Session session = config.newSession(connection);
// 3. Create Mapper
UserInfoMapper mapper = session.createMapper(UserInfoMapper.class);
Mapping ObjectId
MongoDB's _id field is usually of ObjectId type, while in Java objects we usually use String type.
1. Define Entity
@Table("user_info")
public class UserInfo {
// Declare _id field, and configure whereValueTemplate for Lambda/BaseMapper to automatically generate query conditions
@Column(value = "_id", primary = true, keyType = KeyType.Auto, whereValueTemplate = "ObjectId(?)")
private String id;
@Column("name")
private String name;
...
}
2. Mapper Definition
@SimpleMapper()
public interface UserInfoMapper {
// Use ObjectId(#{id}) syntax in @Query for querying
@Query("test.user_info.find({_id: ObjectId(#{id})})")
UserInfo loadById(@Param("id") String id);
}
Pagination Query
Add a Page parameter to the Mapper method to implement pagination query.
Mapper Definition
@SimpleMapper()
public interface UserInfoMapper {
@Query("test.user_info.find({name: #{name}})")
List<UserInfo> queryByName(@Param("name") String name, Page page);
}
Invoke Pagination
Page page = new PageObject();
page.setPageSize(10);
page.setPageNumber(0);
List<UserInfo> list = mapper.queryByName("mali", page);
// 翻页
page.nextPage();
list = mapper.queryByName("mali", page);