省 市 县 三级联动
创始人
2024-02-27 20:53:04
0

大纲


 一、导入省市县数据表(t_region)

 二、引入jar包

三、导入所需util类(整体框架)

 

四、编写代码

 1、配置数据库相关信息(数据库名、用户名、密码)    config.propreties

#oracle9i
#driver=oracle.jdbc.driver.OracleDriver
#url=jdbc:oracle:thin:@localhost:1521:orcl
#user=scott
#pwd=123#sql2005
#driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
#url=jdbc:sqlserver://localhost:1433;DatabaseName=test1
#user=sa
#pwd=123#mysql
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
user=root
pwd=1234

 2、创建数据库中对应数据表(t_region)的省市县实体类,即 Region.java

package com.zking.jquery.entity;
/*** 地区实体类* @author gss**/
public class Region {private long id;//编号private long parent_id;//父级编号private long region_id;private long region_parent_id;private String region_name;//名称private Integer region_type;//类型 1省 2市 3县public long getId() {return id;}public void setId(long id) {this.id = id;}public long getParent_id() {return parent_id;}public void setParent_id(long parent_id) {this.parent_id = parent_id;}public long getRegion_id() {return region_id;}public void setRegion_id(long region_id) {this.region_id = region_id;}public long getRegion_parent_id() {return region_parent_id;}public void setRegion_parent_id(long region_parent_id) {this.region_parent_id = region_parent_id;}public String getRegion_name() {return region_name;}public void setRegion_name(String region_name) {this.region_name = region_name;}public Integer getRegion_type() {return region_type;}public void setRegion_type(Integer region_type) {this.region_type = region_type;}public Region() {super();}@Overridepublic String toString() {return "Region [id=" + id + ", parent_id=" + parent_id + ", region_id=" + region_id + ", region_parent_id="+ region_parent_id + ", region_name=" + region_name + ", region_type=" + region_type + "]";}	
}

3、 工具类  BaseDao.java

package com.zking.jquery.dao;import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import com.zking.jquery.util.DBHelper;
import com.zking.jquery.util.PageBean;public class BaseDao {public static interface CallBack{public List forEach(ResultSet rs) throws SQLException;}/*** 增删改通用方法* @param sql* @param params*/public void executeUpdate(String sql,Object[] params) {Connection conn=null;PreparedStatement stmt=null;try {conn=DBHelper.getConnection();stmt=conn.prepareStatement(sql);ParameterMetaData metadata = stmt.getParameterMetaData();for (int i = 0; i < metadata.getParameterCount(); i++) {stmt.setObject(i+1, params[i]);}int i = stmt.executeUpdate();if(i<1)throw new RuntimeException("执行失败,影响行数为0");} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}finally {DBHelper.close(conn, stmt, null);}}/*** 查询方法* @param sql* @param params*/public List executeQuery(String sql,PageBean pageBean,CallBack callBack){Connection conn=null;PreparedStatement stmt=null;ResultSet rs=null;try {conn=DBHelper.getConnection();//判断是否分页if(null!=pageBean&&pageBean.isPagination()) {//第一次查询返回总记录数String countSql=this.getCountSql(sql);stmt=conn.prepareStatement(countSql);rs=stmt.executeQuery();if(rs.next()) {Object obj=rs.getObject(1);pageBean.setTotal(Integer.parseInt(obj.toString()));}//第二次查询返回指定页码数并满足条件的分页结果集sql=this.getPagerSql(sql, pageBean);}stmt=conn.prepareStatement(sql);rs=stmt.executeQuery();//遍历结果集return callBack.forEach(rs);} catch (Exception e) {e.printStackTrace();}finally {DBHelper.close(conn, stmt, rs);}return null;}/*** 将普通SQL语句转换成查询总记录数的SQL语句* @param sql* @return*/private String getCountSql(String sql) {return "select count(1) from ("+sql+") t1";}/*** 将普通SQL语句转换成查询分页记录集的SQL语句* @param sql* @param pageBean* @return*/private String getPagerSql(String sql,PageBean pageBean) {return sql+" Limit "+pageBean.getStartIndex()+","+pageBean.getRows();}
}

4、数据操作类 RegionDao.java 继承BaseDao.java

package com.zking.jquery.dao;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import com.zking.jquery.entity.Region;
import com.zking.jquery.util.CommonUtils;
import com.zking.jquery.util.StringUtils;public class RegionDao extends BaseDao{//查询public List queryRegionLst(Region region){String sql="select id,region_id,parent_id,region_parent_id,"+ "region_name,region_type from t_region where 1=1";//判断不为空if(StringUtils.isNotBlank(region.getParent_id()+""))sql+=" and parent_id="+region.getParent_id();return super.executeQuery(sql, null, new CallBack() {@Overridepublic List forEach(ResultSet rs) throws SQLException {try {return CommonUtils.toList(rs, Region.class);} catch (Exception e) {e.printStackTrace();}return null;}});}
}

5、 工具类 CommonUtils.java

package com.zking.jquery.util;import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class CommonUtils {/*** 根据ResultSet数据集,利用反射机制动态赋值并返回List* @param rs ResultSet数据集* @param clazz 实体类对象* @return 返回List实体集合* @throws Exception*/public static  List toList(ResultSet rs,Class clazz) throws Exception{//定义实体集合List lst=new ArrayList();//获取ResultSet的metadata列信息ResultSetMetaData metaData = rs.getMetaData();//获取对象属性集合Field[] fields=clazz.getDeclaredFields();//循环ResultSetwhile(rs.next()) {//反射机制实例化T obj = clazz.newInstance();for (int i = 0; i < metaData.getColumnCount(); i++) {//获取列名String columnName=metaData.getColumnLabel(i+1).toUpperCase();for (Field field : fields) {//判断属性名与列名是否相同if(field.getName().toUpperCase().equals(columnName)) {//获取属性对应的set方法名,方法名首字母大写String methodName="set"+field.getName().substring(0, 1).toUpperCase()+field.getName().substring(1);//获取属性对应的set方法Method method = obj.getClass().getDeclaredMethod(methodName, field.getType());//设置访问权限method.setAccessible(true);//执行set方法,将数据存储到对象中的相应属性中method.invoke(obj, rs.getObject(columnName));break;}}}lst.add(obj);}return lst;}/*** 多表查询时返回结果集,利用反射机制赋值 * @param rs* @return 返回List>* @throws Exception*/public static List> toList(ResultSet rs) throws Exception{//定义实体集合List> lst=new ArrayList>();//获取ResultSet的metadata列信息	ResultSetMetaData metaData = rs.getMetaData();Map set=null;while(rs.next()) {set=new HashMap();for (int i = 0; i < metaData.getColumnCount(); i++) {String columnName=metaData.getColumnLabel(i+1);set.put(columnName, rs.getObject(columnName));}lst.add(set);}return lst;}
}

6、测试Dao类是否有误        RegionDaoTest.java

package com.zking.jquery.dao;import static org.junit.jupiter.api.Assertions.*;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import com.zking.jquery.entity.Region;class RegionDaoTest {//实例化一个dao类对象private RegionDao regionDao = new RegionDao();private Region region;@BeforeEachvoid setUp() throws Exception {region=new Region();}@Testvoid testQueryRegionLst() {//给父级编号赋值region.setParent_id(7459);//调用Dao类查询方法List lst=regionDao.queryRegionLst(region);for (Region reg: lst) {System.out.print(reg);}}
}

测试结果没有报错,可以继续下一步


 7、RegionAction.java

package com.zking.jquery.action;import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zking.jquery.dao.RegionDao;
import com.zking.jquery.entity.Region;
import com.zking.mvc.framework.Action;
import com.zking.mvc.framework.DriverModel;public class RegionAction extends Action implements DriverModel {private RegionDao regionDao=new RegionDao();private Region region=new Region();private ObjectMapper mapper=new ObjectMapper();@Overridepublic Region getModel() {return region;}@Overridepublic String execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {List lst = regionDao.queryRegionLst(region);mapper.writeValue(res.getOutputStream(), lst);return null;}
}

1、创建 address.jsp 页面。先在 js 中引入 jquery.min.js 。

 将 jquery.min.js 引入到 address.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>




省 市 县之三级联动


省市县三级联动 lxy

  

打印结果:


2、在 web.xml 中配置过滤器


Jquery_addressindex.htmlindex.htmindex.jspdefault.htmldefault.htmdefault.jspFilterEncodingcom.zking.jquery.util.EncodingFilterFilterEncoding/*ActionServletcom.zking.mvc.framework.ActionServletconfig/mvc.xmlActionServlet*.action

3、将 mvc.xml 导入到 src 根目录下  配置RegionAction



]>

                                            最终效果展示(可自行美化)

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...