目录
1、案例环境搭建
1.1、jar包资源导入
这个案例需要用到JSON序列化,所以需要导入JSON的核心jar包,下面提供
链接:https://pan.baidu.com/s/13-ai75KjR7Ieg4c8OAEKSA
提取码:nbvc
实体类使用lombok对set/get方法以及toString方法和构造方法提供。
链接:https://pan.baidu.com/s/1s876WI6xmD-bfNcqFNAiEg
提取码:g5x9
因为这是查询数据库获取省市区的,所以需要进行连接数据库,相关jar包如下
链接:https://pan.baidu.com/s/1E7LlgOf-kch25EGBFX-PYA
提取码:9tju
导入所有需要使用的jar包,如下图
本案例使用的js为Jquery,提供Jquery-3.14
链接:https://pan.baidu.com/s/1tQ9IyvQke_tbaBDpQKLgeg
提取码:7mel
1.2、数据库准备
下面是mysql数据库中的省市区表,里面包含了中国所有的省市区名称
链接:https://pan.baidu.com/s/1quMFKFz6TlXsLbdnzJDD-Q
提取码:jzd9
Druid工具类
public class DruidUtil {
//定义成员变量 DataSource ds
private static DataSource dataSource;
static {
Properties pro = new Properties();
InputStream is = null;
try {
is = DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
dataSource= DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//获取连接
public static Connection getConnection(){
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//获取DataSource对象
public static DataSource getDataSource(){
return dataSource;
}
}
druid.properties配置文件
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/数据库名称 username=root password=你的数据库密码 # 初始化连接数量 initialSize=5 # 最大连接数 maxActive=10 # 最大等待时间 maxWait=3000
2、代码开发
2.1、实体类
实体类使用lombok工具,自动生成set/get方法
@Data
public class Province {
private int codeid;
private int parentid;
private String cityName;
}
2.2、dao层代码
public interface ProvinceDao {
//根据pid获取城市
List<Province> getCity(int pid);
}
public class ProvinceDaoImpl implements ProvinceDao {
private JdbcTemplate jdbcTemplate=new JdbcTemplate(DruidUtil.getDataSource());
@Override
public List<Province> getCity(int pid) {
try {
String sql="select * from province where parentid=?";
return jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(Province.class),pid);
} catch (DataAccessException e) {
return null;
}
}
}
2.3、service层代码
public interface ProvinceService {
//根据pid获取城市
List<Province> getCity(int pid);
}
public class ProvinceServiceImpl implements ProvinceService {
private ProvinceDao provinceDao=new ProvinceDaoImpl();
@Override
public List<Province> getCity(int pid) {
return provinceDao.getCity(pid);
}
}
2.4、web层代码
@WebServlet(urlPatterns = "/GetCityServlet")
public class GetCityServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json;charset=utf-8");
//获取页面传递过来的pid
String pid = request.getParameter("pid");
//调用service对象
ProvinceService provinceService=new ProvinceServiceImpl();
//调用getCity()方法传递pid至dao层
List<Province> list= provinceService.getCity(Integer.parseInt(pid));
//创建json核心对象
ObjectMapper objectMapper=new ObjectMapper();
//序列化dao层查询到的list集合
String value = objectMapper.writeValueAsString(list);
//返回至页面
response.getWriter().println(value);
}
}
2.5、html页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<select id="s1">
<option value="">---请选择省---</option>
</select>
<select id="s2">
<option value="">---请选择市---</option>
</select>
<select id="s3">
<option value="">---请选择县---</option>
</select>
</body>
<script src="js/jquery-3.4.1.js"></script>
<script>
//刚进入页面首先加载所有省
loadArea(0, "s1");
//市
$("#s1").change(function () {
//先清空先前的内容
$("#s2").empty();
//加上提示语
$("#s2").append("<option value=\"\">---请选择市---</option>");
//清空区县里面的内容
$("#s3").empty();
$("#s3").append("<option value=\"\">---请选择区县---</option>");
var pid= $(this).val();
loadArea(pid, "s2");
});
//区县
$("#s2").change(function () {
$("#s3").empty();
$("#s3").append("<option value=\"\">---请选择区县---</option>");
var pid= $(this).val();
loadArea(pid, "s3");
});
function loadArea(pid, sid) {
$.get("GetCityServlet", {pid: pid}, function (data) {
$(data).each(function () {
var cityName = this.cityName;
var codeid = this.codeid;
var option = $("<option value='" + codeid + "'>" + cityName + "</option>");
$("#"+sid).append(option);
});
});
}
</script>
</html>
3、效果展示