MongoDB自动递增
其实很简单,就是单独建立一张表来记录最新的id值。
1.首先建立bean
@Document(collection = "tools")
public class Tools {
@Id
private String id;// mongodb id
/**
* 计数
*/
private Long seq;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Long getSeq() {
return seq;
}
public void setSeq(Long seq) {
this.seq = seq;
}
}
2.写dao
@Repository
public class ToolsDaoImpl implements ToolsDao {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public long getAutoId(String domain) {
// _id是表明
Query query = Query.query(Criteria.where("_id").is(domain));
FindAndModifyOptions options = FindAndModifyOptions.options().returnNew(true);
// 同步
Update update = new Update().inc("seq", 1);
Tools tools = mongoTemplate.findAndModify(query, update, options, Tools.class);
if (tools == null) {
return 0;
}
return tools.getSeq();
}
@Override
public void save(Tools tools) {
mongoTemplate.save(tools);
}
}
3.建立枚举
public enum AutoSeq {
USER(10000, "sys_user"),
APPOINT(100000, "appointment_info");
private final int value;
private final String name;
AutoSeq(int value, String name) {
this.value = value;
this.name = name;
}
public int value() {
return value;
}
public static AutoSeq valueOf(int value) {
for (AutoSeq e : AutoSeq.values()) {
if (e.value() == value) {
return e;
}
}
return null;
}
public String labelOf(int val) {
if (valueOf(val) != null) {
return valueOf(val).name;
}
return null;
}
@Override
public String toString() {
return this.name;
}
}
4.逻辑使用
@Override
public void insert(SysUser user) {
long seq = toolsDao.getAutoId(AutoSeq.USER.name());
if (seq > 0) {//查询自增最大的编号
user.setSeq(seq);
} else {//没有添加
Tools tools = new Tools();
tools.setId(AutoSeq.USER.name());
tools.setSeq( (long) AutoSeq.USER.value());
toolsDao.save(tools);
user.setSeq((long) AutoSeq.USER.value());
}
sysuserdao.insert(user);
}
就可以了!