• SpringBoot下实现MongoDB字段类型转换器


    1 目的

    MongoDB Java
    String LocalDateTime

    2 实现

    • 先定义实体类
    @Data // lombok
    @Accessors(chain = true)
    @Document(collection = "UserEntity")
    public class User implements Serializable {
        @Id
        private String id;
        private String username;
        private String password;
        // java中为LocalDateTime,根据Spring Data MongoDB的介绍:
        // LocalDateTime -> MongoDB的{"date" : ISODate("2019-11-12T23:00:00.809Z")}
        private LocalDateTime birthDay;
    }
    
    • 定义Repository
    public interface UserRepository extends MongoRepository<UserEntity, String>{
    }
    
    • 定义转换器
    // Direction: Java -> MongoDB
    @WritingConverter 
    public class DateToString implements Converter<LocalDateTime, String> {
        @Override
        public String convert(LocalDateTime source) {
            return source.toString() + 'Z';
        }
    }
    
    // Direction: MongoDB -> Java
    @ReadingConverter 
    public class StringToDate implements Converter<String, LocalDateTime> {
        @Override
        public LocalDateTime convert(String source) {
            return LocalDateTime.parse(source,DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
        }
    }
    
    • 注册转换器
    @Configuration
    public class MongoConfig {
        @Bean
        public CustomConversions customConversions() {
            List<Converter<?, ?>> converterList = new ArrayList<Converter<?, ?>>();
            converterList.add(new DateToString());
            converterList.add(new StringToDate());
            return new CustomConversions(converterList);
        }
    }
    
    • 最后测试
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserDaoTest {
        @Autowired
        private UserRepository userRepository;
        
        @Test
        public void testSaveUser() {
            UserEntity user = new UserEntity();
            user.setUserName("test");
            user.setPassWord("test");
            user.setBirthDay(LocalDateTime.now());
            userRepository.saveUser(user);
        }
    }
    

    3 字符串的日期怎么区间查询?

    public interface UserRepository extends MongoRepository<UserEntity, String>{
    	List<UserEntity> findByBirthDayBetween(LocalDateTime start, LocalDateTime end);
    }
    
  • 相关阅读:
    无法将类型为“xxxx”的对象强制转换为类型“Microsoft.SharePoint.WebPartPages.WebPart”。
    [win32 api] FindWindow FindWindowEx EnumChildWindows
    WPF线程中被修改后DataGrid数据不能及时更新的问题
    Android Adapter 与 Listview
    LINQ 查询操作及进行数据转换
    匿名方法lambda表达式
    WPF知识4 依赖属性
    LINQ 入门
    WPF绑定.NET对象(二)Visifire的数据绑定
    LINQ 查询操作中的类型关系
  • 原文地址:https://www.cnblogs.com/linzhanfly/p/9578738.html
Copyright © 2020-2023  润新知