mongoDB的自动递增

来源:互联网 发布:java 统计访问次数 编辑:程序博客网 时间:2024/05/16 15:31

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

就可以了!

0 0
原创粉丝点击