当前位置: 首页 > news >正文

北京网站设计与制作嵌入式软件开发教程

北京网站设计与制作,嵌入式软件开发教程,近期军事新闻热点事件,课程网站建设ppt模板下载在我的博客应用程序中#xff0c;您可以查看任何用户的个人资料#xff0c;例如#xff0c;我的个人资料页面将为http://www.jiwhiz.com/profile/user1#xff0c;“user1”是我在系统中的用户ID。 在MongoDB中#xff0c;每个文档对象都会有一个唯一的标识符#xff0c;… 在我的博客应用程序中您可以查看任何用户的个人资料例如我的个人资料页面将为http://www.jiwhiz.com/profile/user1“user1”是我在系统中的用户ID。 在MongoDB中每个文档对象都会有一个唯一的标识符通常我们将其存储为String因此我有一个BaseEntity类 Document SuppressWarnings(serial) public abstract class BaseEntity implements Serializable {Idprivate String id; … } 但是系统生成的ID通常很长我想在UserAccount类中生成自己的userId Document(collection UserAccount) public class UserAccount extends BaseEntity implements SocialUserDetails {Indexedprivate String userId;private UserRoleType[] roles;private String email;private String displayName;private String imageUrl;private String webSite; ... } 生成的userId非常简单只是带有序列号的user例如我是第一个用户因此我的userId是User1下一个已注册的用户将是User2依此类推。 MongoDB的序列号生成器为我提供唯一的序列号。 该操作将返回当前序列号并增加数据库中的序列号。 在MongoDB中命令findAndModify自动修改并返回单个文档。 因此我们可以使用此命令来查询序列号并通过$ inc函数对其进行增加。 首先我们创建一个Counter类来存储用于不同目的的序列号例如userId SuppressWarnings(serial) Document(collection Counter) public class Counter extends BaseEntity{private String name;private long sequence;... } 由于我们将以特殊方式使用计数器因此无需存储库。 我只是使用以下方法创建CounterService来返回下一个用户ID public interface CounterService {long getNextUserIdSequence(); } 该实现将使用findAndModify来获取下一个序列 public class CounterServiceImpl implements CounterService {public static final String USER_ID_SEQUENCE_NAME user_id;private final MongoTemplate mongoTemplate;Injectpublic CounterServiceImpl(MongoTemplate mongoTemplate){this.mongoTemplate mongoTemplate;}Overridepublic long getNextUserIdSequence() {return increaseCounter(USER_ID_SEQUENCE_NAME);}private long increaseCounter(String counterName){Query query new Query(Criteria.where(name).is(counterName));Update update new Update().inc(sequence, 1);Counter counter mongoTemplate.findAndModify(query, update, Counter.class); // return old Counter objectreturn counter.getSequence();} } 使用这种方法您可以根据需要添加任意数量的序列只需为其命名即可。 例如您可以记录对您的网站的访问因此可以添加一个类似logVisit()的方法该方法increaseCounter()使用诸如“ visit_num”之类的名称来调用私有方法logVisit() 。 在此示例中我们不将Spring Data Repository用于Counter文档而是直接使用MongoTemplate 。 从我的MongoConfig类扩展了AbstractMongoConfiguration 该类暴露了MongoTemplate bean我们可以轻松地将MongoTemplate注入其他配置bean中例如CounterService Configuration class MainAppConfig { ...Beanpublic CounterService counterService(MongoTemplate mongoTemplate) {return new CounterServiceImpl(mongoTemplate);} ... } 在任何环境中开始运行您的应用之前您必须首先设置一个Counter文档。 只需在MongoDB Shell中键入以下脚本 db.Counter.insert({ name : user_id, sequence : 1}) 好的这些是准备用户ID序列生成器的步骤。 但是当我们要将新用户添加到系统中时如何使用它呢 现在变得非常容易。 我们将具有一个AccountService 它具有createUserAccount方法用于在用户首次登录时创建一个新的UserAccount 。 public interface AccountService extends SocialUserDetailsService, UserDetailsService, UserIdExtractor {UserAccount findByUserId(String userId);ListUserAccount getAllUsers();ListUserSocialConnection getConnectionsByUserId(String userId);UserAccount createUserAccount(ConnectionData data); } 在我们的实现类AccountServiceImpl 我们可以使用CounterService 请参见下面的突出显示的代码 public class AccountServiceImpl implements AccountService {private final UserAccountRepository accountRepository;private final UserSocialConnectionRepository userSocialConnectionRepository;private final CounterService counterService;Injectpublic AccountServiceImpl(UserAccountRepository accountRepository, UserSocialConnectionRepository userSocialConnectionRepository, CounterService counterService) {this.accountRepository accountRepository;this.userSocialConnectionRepository userSocialConnectionRepository;this.counterService counterService;}Overridepublic UserAccount findByUserId(String userId) {return accountRepository.findByUserId(userId);}Overridepublic ListUserAccount getAllUsers() {return accountRepository.findAll();}Overridepublic ListUserSocialConnection getConnectionsByUserId(String userId){return this.userSocialConnectionRepository.findByUserId(userId);}Overridepublic UserAccount createUserAccount(ConnectionData data) {UserAccount account new UserAccount();account.setUserId(user this.counterService.getNextUserIdSequence());account.setDisplayName(data.getDisplayName());account.setImageUrl(data.getImageUrl());account.setRoles(new UserRoleType[] { UserRoleType.ROLE_USER });this.accountRepository.save(account);return account;}Overridepublic SocialUserDetails loadUserByUserId(String userId) throws UsernameNotFoundException, DataAccessException {UserAccount account findByUserId(userId);if (account null) {throw new UsernameNotFoundException(Cannot find user by userId userId);}return account;}Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {return loadUserByUserId(username);}Overridepublic String extractUserId(Authentication authentication) {if (authentication instanceof SocialAuthenticationToken) {SocialAuthenticationToken token (SocialAuthenticationToken) authentication;if (token.getPrincipal() instanceof SocialUserDetails) {return ((SocialUserDetails) token.getPrincipal()).getUserId();}}return null;}} Java配置代码将它们结合在一起以用于AccountService Configuration class MainAppConfig { ...Beanpublic AccountService accountService(MongoTemplate mongoTemplate, UserAccountRepository accountRepository,UserSocialConnectionRepository userSocialConnectionRepository) {AccountServiceImpl service new AccountServiceImpl(accountRepository, userSocialConnectionRepository,counterService(mongoTemplate));return service;} ... } 我们什么时候调用AccountService.createUserAccount() 在用户首次尝试登录时系统找不到现有的UserAccount 因此将调用插入MongoUsersConnectionRepository的ConnectionSignUp bean。 有关其他与Spring社交相关的代码请参阅我的上一篇文章 。因此ConnectionSignUp会将ConnectionData传递给AccountService.createUserAccount() public class AutoConnectionSignUp implements ConnectionSignUp{private final AccountService accountService;Injectpublic AutoConnectionSignUp(AccountService accountService){this.accountService accountService;}public String execute(Connection? connection) {ConnectionData data connection.createData();UserAccount account this.accountService.createUserAccount(data);return account.getUserId();} } 我对Spring Data MongoDB的经验非常积极。 它在提供基本的CRUD功能以及丰富的查询功能方面非常强大并且您无需编写任何实现代码。 如果必须使用MongoDB的特殊命令则MongoTemplate足够灵活可以满足您的要求。 参考 MongoDB在Jiwhiz博客上从我们的JCG合作伙伴 Yuan Ji 添加一个CounterWithSpring数据 。 翻译自: https://www.javacodegeeks.com/2013/03/mongodb-add-a-counter-with-spring-data.html
http://www.pierceye.com/news/39003/

相关文章:

  • 青海企业网站建设wordpress怎么加速权限不够
  • 阿里云网站 模板建设百度怎么投广告
  • 网站关键词快速排名有代做医学统计图的网站吗
  • 网站建公司生存惠州网站搭建怎么做
  • eclipse模仿网站开发源代码国外用tornado做的网站
  • 东莞建设网站流程织梦网站迁移
  • 自助建站网站平台微信做模板下载网站有哪些
  • 自己创建网站怎么做电商陕西网站开发企业
  • 网站带支付源码网站建设方案文库
  • 怎么关注网站 在手机上成都网站建设名录
  • 分享到wordpress十堰seo优化哪家公司好
  • 天津哪里有做网站的公司网站开发需求预算
  • 建设项目竣工环保验收公示网站王野天 演员
  • 龙华做网站的wordpress标签生成
  • 辽宁省建设工程信息网官网新网站入口官方微信商家小程序收费吗
  • 怎样自己开网站赚钱wordpress微信登录的插件
  • ppt 如何做网站交互式php 网站缓存文件
  • 网站建设论文百度云盘我想承包小工程
  • 网站推广的正确方式在线培训系统
  • 网站建设试题及答案学电商需要多少钱
  • 免费建站的平台asp网站建设 文献综述
  • 学建设网站去哪里学怎么快速推广自己的产品
  • 安徽建站费用phpstudy 安装wordpress
  • 深圳做网站有哪些做网站就上凡科建设
  • 外贸推广网站建设个人网站做导航网站
  • 网站建设结构四川建设行业网站有哪些
  • 合肥建设网站哪家好东莞公司网站做优化
  • 家用电脑如何做网站服务器建立网站流程图
  • php网站作业模版网站建设v杏信zhousi69
  • 网站备案需要年检吗网站备案名称更换