我搜索了一下,发现用redis存取三级联动的内容很少,所以就自己写了一份。
这里使用单机版的redis进行数据的存取的,后台用了springmvc,前台用的bootstrap,代码准备的比较全,所以有点多,望众知:
配置文件 applicationContext-redis.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!--将redis对象交给spring容器管理-->
<!--注册单机版的redis,创建jedisPool,需要通过构造方法注入port和host-->
<!--连接redis的单机版-->
<!--注册单机版的实现类-->
<bean id="jedisClientPool" class="com.buba.witkey.redis.impl.JedisClientPool">
<property name="jedisPool" ref="jedisPool"/>
</bean>
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg name="host" value="192.168.43.185" />
<constructor-arg name="port" value="7111"/>
</bean>
<!--单机和集群只能有一个存在-->
</beans>
创建如下目录结构:
JedisClient:
package com.buba.witkey.redis;
public interface JedisClient {
String set(String key, String value);
String get(String key);
Boolean exists(String key);
Long expire(String key, int seconds);
Long ttl(String key);
Long incr(String key);
Long hset(String key, String field, String value);
String hget(String key, String field);
Long hdel(String key, String... field);
}
JedisClientCluster:
package com.buba.witkey.redis.impl;
import com.buba.witkey.redis.JedisClient;
import redis.clients.jedis.JedisCluster;
import javax.annotation.Resource;
public class JedisClientCluster implements JedisClient {
@Resource
private JedisCluster jedisCluster;
public JedisCluster getJedisCluster() {
return jedisCluster;
}
public void setJedisCluster(JedisCluster jedisCluster) {
this.jedisCluster = jedisCluster;
}
@Override
public String set(String key, String value) {
return jedisCluster.set(key, value);
}
@Override
public String get(String key) {
return jedisCluster.get(key);
}
@Override
public Boolean exists(String key) {
return jedisCluster.exists(key);
}
@Override
public Long expire(String key, int seconds) {
return jedisCluster.expire(key, seconds);
}
@Override
public Long ttl(String key) {
return jedisCluster.ttl(key);
}
@Override
public Long incr(String key) {
return jedisCluster.incr(key);
}
@Override
public Long hset(String key, String field, String value) {
return jedisCluster.hset(key, field, value);
}
@Override
public String hget(String key, String field) {
return jedisCluster.hget(key, field);
}
@Override
public Long hdel(String key, String... field) {
return jedisCluster.hdel(key, field);
}
}
JedisClientPool:
package com.buba.witkey.redis.impl;
import com.buba.witkey.redis.JedisClient;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import javax.annotation.Resource;
public class JedisClientPool implements JedisClient {
@Resource
private JedisPool jedisPool;
public JedisPool getJedisPool() {
return jedisPool;
}
public void setJedisPool(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
@Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String result = jedis.set(key,value);
jedis.close();
return result;
}
@Override
public String get(String key) {
return null;
}
@Override
public Boolean exists(String key) {
return null;
}
@Override
public Long expire(String key, int seconds) {
return null;
}
@Override
public Long ttl(String key) {
return null;
}
@Override
public Long incr(String key) {
return null;
}
@Override
public Long hset(String key, String field, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(key,field,value);
jedis.close();
return result;
}
@Override
public String hget(String key, String field) {
Jedis jedis = jedisPool.getResource();
String result = jedis.hget(key,field);
jedis.close();
return result;
}
@Override
public Long hdel(String key, String... field) {
return null;
}
}
后台代码实现:
UserCompleteServiceImpl:
package com.buba.witkey.serviceImpl;
import com.alibaba.fastjson.JSONObject;
import com.buba.witkey.mapper.UserCompleteMapper;
import com.buba.witkey.pojo.Area;
import com.buba.witkey.pojo.City;
import com.buba.witkey.pojo.Province;
import com.buba.witkey.pojo.UserComplete;
import com.buba.witkey.redis.JedisClient;
import com.buba.witkey.service.UserCompleteService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserCompleteServiceImpl implements UserCompleteService {
@Resource
private UserCompleteMapper userCompleteMapper;
@Resource
private JedisClient jedisClient;
@Override
public List<Province> queryProvince() {
String province = jedisClient.get("province");
List<Province> list1 = null;
if(province!=null&&!province.equals("")){
list1=JSONObject.parseArray(province,Province.class);
return list1;
}
list1 = userCompleteMapper.queryProvince();
String s = JSONObject.toJSONString(list1);
jedisClient.set("province",s);
return list1;
}
@Override
public List<City> queryCity(String provinceid) {
List<City> list2 = null;
String ci = jedisClient.hget("city",provinceid);
if(ci!=null&&!ci.equals("")){
list2 = JSONObject.parseArray(ci, City.class);
return list2;
}
list2 = userCompleteMapper.queryCity(provinceid);
jedisClient.hset("city",provinceid,JSONObject.toJSONString(list2));
return list2;
}
@Override
public List<Area> queryArea(String cityid) {
List<Area> list3 = null;
String s = jedisClient.hget("area",cityid);
if(s!=null&&!s.equals("")){
list3 = JSONObject.parseArray(s, Area.class);
return list3;
}
list3 = userCompleteMapper.queryArea(cityid);
jedisClient.hset("area",cityid,JSONObject.toJSONString(list3));
return list3;
}
}
userCompleteMapper.xml:
<select id="queryProvince" resultType="com.buba.witkey.pojo.Province">
select provinceid,province from hat_province;
</select>
<select id="queryCity" resultType="com.buba.witkey.pojo.City">
select cityid,city from hat_city where father=#{provinceid}
</select>
<select id="queryArea" resultType="com.buba.witkey.pojo.Area">
select areaid,area from hat_area where father=#{cityid};
</select>
UserCompleteController:
@RequestMapping("/queryProvince")
@ResponseBody
public List<Province> queryProvince(){
List<Province> list1 = userCompleteService.queryProvince();
return list1;
}
@RequestMapping("/queryCity")
@ResponseBody
public List<City> queryCity(String provinceid){
List<City> list2 = userCompleteService.queryCity(provinceid);
return list2;
}
@RequestMapping("/queryArea")
@ResponseBody
public List<Area> queryArea(String cityid){
List<Area> list3 = userCompleteService.queryArea(cityid);
return list3;
}
前台代码:
html:
<div class="row">
<div class="col-xs-2">
<label class="control-label">所在地:</label>
</div>
<div class="col-xs-5 updateP1">
<input type="hidden" name="provinceName">
<select style="width:130px" id="province" name="provinceCode" onchange="getCity()">
</select>
<input type="hidden" name="cityName">
<select style="width:130px" id="city" name="cityCode" onchange="getArea()">
</select>
<input type="hidden" name="areaName">
<select style=" width:130px" id="area" name="areaCode">
</select>
</div>
</div>
js:
$(function(){
$.ajax({
url:"${pageContext.request.contextPath }/corporation/queryProvince",
dataType:"json",
type:"post",
data:"",
success:function(data){
var provinceid="";
var province="";
$(data).each(function(a,b){
if(b.provinceid){
provinceid=b.provinceid;
}
if(b.province){
province=b.province;
}
$("#province").append("<option value='"+provinceid+"'>"+province+"</option>");
})
}
})
})
function getCity(){
var provinceid=$("#province option:selected").val();
$.ajax({
url:"${pageContext.request.contextPath }/corporation/queryCity",
dataType:"json",
type:"post",
data:{"provinceid":provinceid},
success:function(data){
$("#city").html("<option></option>");
$("#area").html("<option></option>");
var cityid="";
var city="";
$(data).each(function(a,b){
if(b.cityid){
cityid=b.cityid;
}
if(b.city){
city=b.city;
}
$("#city").append("<option value='"+cityid+"'>"+city+"</option>");
});
}
});
}
function getArea(){
var cityid=$("#city option:selected").val();
$.ajax({
url:"${pageContext.request.contextPath }/corporation/queryArea",
dataType:"json",
type:"post",
data:{"cityid":cityid},
success:function(data){
$("#area").html("<option></option>");
var areaid="";
var area="";
$(data).each(function(a,b){
if(b.areaid){
areaid=b.areaid;
}
if(b.area){
area=b.area;
}
$("#area").append("<option value='"+areaid+"'>"+area+"</option>");
});
}
})
}
over!