试着写一写一系列博客, 主要是记录从搭建框架, 到集成一些相关的 demo, 以便以后在项目中用到的时候可以快速拷贝代码.
计划是一步一步的集成一些技术, 比如, 拦截器的使用, easypoi 的使用 demo,Redis 的使用 demo , 利用 Redis 做缓存, 限流处理. rabbitmq 的使用 demo
文件上传 demo , 集成 shiro 的 demo, 一些工具类的收集. 等等想到什么写什么
项目结构:
- MybatisConfigurer
- @Configuration
- public class MybatisConfigurer {
- private final static String ENTITY_PACKAGE ="com.zh.demo.entity";
- private final static String MAPPER_PACKAGE ="com.zh.demo.dao";
- //Mapper 插件基础接口的完全限定名
- private final static String MAPPER_INTERFACE_REFERENCE ="com.zh.demo.core.Mapper";
- @Bean
- public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception {
- SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
- factory.setDataSource(dataSource);
- factory.setTypeAliasesPackage(ENTITY_PACKAGE);
- // 配置分页插件, 详情请查阅官方文档
- PageHelper pageHelper = new PageHelper();
- Properties properties = new Properties();
- properties.setProperty("pageSizeZero", "true");// 分页尺寸为 0 时查询所有纪录不再执行分页
- properties.setProperty("reasonable", "true");// 页码 <=0 查询第一页, 页码 >= 总页数查询最后一页
- properties.setProperty("supportMethodsArguments", "true");// 支持通过 Mapper 接口参数来传递分页参数
- pageHelper.setProperties(properties);
- // 添加插件
- factory.setPlugins(new Interceptor[] { pageHelper });
- // 添加 xml 目录
- ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
- // https://blog.csdn.net/kkdelta/article/details/5507799
- factory.setMapperLocations(resolver.getResources("classpath*:mapper/*.xml"));
- return factory.getObject();
- }
- @Bean
- public MapperScannerConfigurer mapperScannerConfigurer() {
- MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
- mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
- mapperScannerConfigurer.setBasePackage(MAPPER_PACKAGE);
- // 配置通用 Mapper, 详情请查阅官方文档
- Properties properties = new Properties();
- properties.setProperty("mappers", MAPPER_INTERFACE_REFERENCE);
- properties.setProperty("notEmpty", "false");// insert,update 是否判断字符串类型!=''即 test="str !=
- // null"表达式内是否追加 and str !=''
- properties.setProperty("IDENTITY", "MYSQL");
- mapperScannerConfigurer.setProperties(properties);
- return mapperScannerConfigurer;
- }
- }
DateConverterConfig: 全局 handler 前日期统一处理 (特别是查询的时候, 日期控件传回来的日期, 需要转换)
- @Component
- public class DateConverterConfig implements Converter<String, Date> {
- private static final List<String> formarts = new ArrayList<>(4);
- static {
- formarts.add("yyyy-MM");
- formarts.add("yyyy-MM-dd");
- formarts.add("yyyy-MM-dd HH:mm");
- formarts.add("yyyy-MM-dd HH:mm:ss");
- }
- @Override
- public Date convert(String source) {
- String value = source.trim();
- if ("".equals(value)) {
- return null;
- }
- if (source.matches("^\\d{4}-\\d{1,2}$")) {
- return parseDate(source, formarts.get(0));
- } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) {
- return parseDate(source, formarts.get(1));
- } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) {
- return parseDate(source, formarts.get(2));
- } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) {
- return parseDate(source, formarts.get(3));
- } else {
- throw new IllegalArgumentException("Invalid boolean value'" + source + "'");
- }
- }
- /**
- * 格式化日期
- * @param dateStr String 字符型日期
- * @param format String 格式
- * @return Date 日期
- */
- public Date parseDate(String dateStr, String format) {
- Date date = null;
- try {
- DateFormat dateFormat = new SimpleDateFormat(format);
- date = dateFormat.parse(dateStr);
- } catch (Exception e) {
- }
- return date;
- }
- }
来源: http://www.bubuko.com/infodetail-2850010.html