一、实现三级联动
1.首先,准备省市县的表或者自己随便创建一个就可以,然后先创建实体类(实体类上面的三个注释会单独写篇文章讲解如何实现)
2.实现dao层
public interface GoodsDao {
//查询城市---三级联动
List<City> listByCity(Integer pid);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shixiaochen.dao.GoodsDao">
<select id="listByCity" resultType="com.shixiaochen.entity.City">
select *
from m_city
where pid = #{id}
</select>
</mapper>
3.service层
public interface GoodsService {
//查询城市---三级联动
List<City> listByCity(Integer pid);
}
@Service
public class GoodsServiceImpl implements GoodsService {
@Autowired
GoodsDao dao;
@Override
public List<City> listByCity(Integer pid) {
return dao.listByCity(pid);
}
}
4.controller层
@ResponseBody
@PostMapping("listByCity")
public List<City> listByCity(Integer pid) {
//判断reids中是否有这个key
Boolean boo = template.hasKey("CITY_LIST" + pid);
if (boo) {
//redis中有
return template.opsForList().range("CITY_LIST" + pid, 0, -1);
} else {
//redis没有
//先获取
List<City> cities = service.listByCity(pid);
//再存储到redis中下次访问的时候就可以直接从redis中获取到
template.opsForList().rightPushAll("CITY_LIST" + pid, cities);
return cities;
}
}
5.jsp
二、三级联动的回显
1.做回显一般都用于做修改,我这块也是做修改(调用的根据id查询单个数据的方法)
2.其他步骤跟上面都差不都,只不过是调用的方法不一样
controller层
jsp(跟上面的一样就多了个ajax)
把文档就绪函数删掉换成同步请求
$.ajaxSettings.async = false;
这样就实现了三级联动的回显了。
三、总结
三级联动有很多写法但是核心原理都是一样的。想要实现三级联动,首先应该了解三级联动的实现的原理,他是通过先把所有的省查出来,选中的省的id作为市的查询条件,查询到的市的id作为县的查询条件,来查询县来实现的,只要把这个理清了,就不难实现了。