研究发现,mongodb完全可以实现自增ID,并且Morphia已经对此做了封装,并且使用起来也非常方便,只需让你的entity继承自LongIdEntity。
下面给出一段entity示例代码如下:
@EntitypublicclassUserextendsLongIdEntity{publicstaticfinalString DBNAME ="myds";publicUser(){super(MongoManager.getDatastore(DBNAME));}privateString username;privateString password;privateint age;//---get set---}
DAO类及测试代码如下:
publicclassUserDAOextendsBasicDAO<user, long="">{publicUserDAO(){super(User.class,MongoManager.getMongo(),MongoManager.getMorphia(),User.DBNAME);}publicstaticvoid main(String[] args){User user =newUser(); user.setPassword("123456"); user.setUsername("lamfire"); user.setAge(100);UserDAO dao =newUserDAO();Keykey= dao.save(user);System.out.println(user.getUsername()+" ID:"+ key.getId()); user =newUser(); user.setPassword("abc123"); user.setUsername("hayash"); user.setAge(99); key = dao.save(user);System.out.println(user.getUsername()+"ID:"+ key.getId());}}
运行结果输出为:
lamfire ID:1
hayash ID:2
实验证明,这个自增ID已经生效。并且在“myds”库下新增了表"ids",并且表里有一行记录存储了User表对应的自增ID的值,每调用一次该值就被自动加一。
下面,我们再来看看LongIdEntity干了什么事,如何实现的自增呢?里面的核心代码片段如下(关键位置我添加了注释):
String collName = ds.getCollection(getClass()).getName();Queryq= ds.find(StoredId.class,"_id", collName);//跟据表名查询UpdateOperationsuOps= ds.createUpdateOperations(StoredId.class);
uOps.inc("value");//指定了将"value"递增操作StoredId newId = ds.findAndModify(q, uOps);//执行查询并更新,该操作椐有原子性if(newId ==null){
newId =newStoredId(collName);
ds.save(newId);}
myLongId = newId.getValue();
相关推荐
1. **生成短码**(b.php):当用户提交一个长网址,服务器会生成一个唯一的短码,这个短码可以是哈希值、随机字符串或者自增ID等。同时,这个短码和对应的长网址会被存储在数据库中,以便后续查询。 2. **存储长...
本次我们将深入探讨名为"shortiki-main"的短链接生成系统的源码,了解其工作原理及实现方式。 "shortiki-main.rar"是一个压缩包文件,包含的"shortiki-main.zip"是该项目的核心源码。源码通常由各种编程语言编写,...
2. **短链接生成**:为了创建短链接,程序可能采用了哈希函数或者自增ID结合编码方式,如Base64,将数字转换为字母数字字符串。这种方法可以确保每个原始URL对应一个唯一的短链接。 3. **路由处理**:当用户访问短...
在`shortly-deploy`中,JavaScript可能采用了哈希算法(如MD5或SHA-1)将长链接转化为固定长度的字符串,然后通过某种方式(如自增ID或随机数)生成唯一的短码,将长链和短码进行映射,并保存在数据库中。...
短码通常要保证唯一性,因此可能还需要结合数据库自增ID或其他机制确保无重复。 2. **数据库设计**: - 需要一个数据库来存储长网址和对应的短码映射关系。MySQL、PostgreSQL或者NoSQL数据库如MongoDB都可以胜任,...
3. **短链接生成**:后端接收到请求后,生成唯一的短码(例如,使用哈希函数或自增ID),并将其与原始URL关联存储。 4. **响应返回**:后端将生成的短链接返回给前端,前端显示短链接,并提供复制功能。 5. **短...
另一种是使用自增ID配合随机字符串生成短链接。 4. **API设计**: - **POST /shorten**: 接收长链接,返回短链接。 - **GET /{short_link}**: 将短链接解析回长链接并重定向。 三、Python框架应用 1. **Flask**...
可以使用哈希函数或自增ID配合随机数生成器。 - **缓存策略**:为了提高性能,可以缓存最近或最常访问的短码-URL映射。 ### 7. 文件结构分析 从提供的文件名“myshortyurl-master”来看,这可能是一个Git仓库的主...