本次东软实训的第一个项目,主要是一个企业工资发放系统,因为项目已经结束,把项目中遇到的技术整理一下,以防以后遇到类似的情况,具体代码请到码云中去参考。
本次的实训项目使用了一个SpringBoot框架,其中使用了手动控制SpringMVC操作。
@Configuration @EnableWebMvc public class SpringMVCConfig extends WebMvcConfigurerAdapter { @Bean public InternalResourceViewResolver viewResolver(){ InternalResourceViewResolver resolver=new InternalResourceViewResolver(); resolver.setPrefix("/"); resolver.setSuffix(".html"); resolver.setViewClass(JstlView.class); return resolver; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:static/"); registry.addResourceHandler("/css/**").addResourceLocations("classpath:css/"); registry.addResourceHandler("/js/**").addResourceLocations("classpath:js/"); registry.addResourceHandler("/images/**").addResourceLocations("classpath:images/"); registry.addResourceHandler("/error/**").addResourceLocations("classpath:error/"); } @Bean public LoginInterceptor loginInterceptor(){ return new LoginInterceptor(); } @Bean public PowerInteceptor powerInteceptor(){ return new PowerInteceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor()).addPathPatterns("*").excludePathPatterns(""). excludePathPatterns("/test*").excludePathPatterns("/view*"). excludePathPatterns("/user/userLogin").excludePathPatterns("/user/getSysManageLoginCode"). excludePathPatterns("/user/checkimagecode"); registry.addInterceptor(powerInteceptor()).addPathPatterns("*").excludePathPatterns(""). excludePathPatterns("/test*").excludePathPatterns("/view*"). excludePathPatterns("/user/userLogin").excludePathPatterns("/user/getSysManageLoginCode"). excludePathPatterns("/user/checkimagecode"); super.addInterceptors(registry); } }
这里是使用了SpringMVC手动管理的操作,首先使用@EnableWebMvc 这个注解代表手动控制或者是使用上面的继承关系,上面代码可以看出,本项目使用拦截操作,和静态资源处理。
配置redis操作:
# REDIS (RedisProperties) # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=127.0.0.1 # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0 # 连接超时时间(毫秒) spring.redis.timeout=0
上面是SpringBoot中配置文件中使用的redis配置
@Configuration @EnableCaching @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 600) public class RedisConfig extends CachingConfigurerSupport { @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); } }; } @SuppressWarnings("rawtypes") @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager rcm = new RedisCacheManager(redisTemplate); //设置缓存过期时间 rcm.setDefaultExpiration(60*30); return rcm; } @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
上图是Redis的配置,上面的三个标签代表的配置文件,启动SpringBoot配置文件,启动Session的redis管理。
@Service public class CarderServiceimpl implements CarderService { private final int pages=5; @Autowired private CarderMapper carderMapper; @Override public int deleteByPrimaryKey(Integer cid) { return carderMapper.deleteByPrimaryKey(cid); } @Override public int insert(Carder record) { return carderMapper.insert(record); } @Override public int insertSelective(Carder record) { return carderMapper.insertSelective(record); } @Cacheable(value = "carder") @Override public Carder selectByPrimaryKey(Integer cid) { return carderMapper.selectByPrimaryKey(cid); } @Override public int updateByPrimaryKeySelective(Carder record) { return carderMapper.updateByPrimaryKeySelective(record); } @Override public int updateByPrimaryKey(Carder record) { return carderMapper.updateByPrimaryKey(record); } @Cacheable(value = "carderListAll") @Override public List<Carder> carderListAll(Integer page) { if(page==null){ page=1; } int first=pages*(page-1); return carderMapper.carderListAll(first,pages); } @Override public int getColum() { return carderMapper.getColum(); } @Override public List<Carder> carderListByDepartName(String departName) { return carderMapper.carderListByDepartName(departName); } @Override public List<Carder> carderListByDepartID(Integer cDepartmt) { return carderMapper.carderListByDepartID(cDepartmt); } @Override public List<Carder> getCerders() { return carderMapper.getCerders(); } @Override public int updateDispalyBycid(Integer cid) { return carderMapper.updateDisplayBycid(cid); } }
@Cacheable(value = "carder") @Cacheable(value = "carderListAll") 这几个标签的话主要是使用缓存记录查询除的信息。
@Autowired private StringRedisTemplate stringRedisTemplate; @Autowired private RedisTemplate redisTemplate;
除了使用上面的标签,还可以使用截图的代码,截图的代码是使用redis的list,set,hash的操作。