问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ssh框架的底层技术是什么呀?是不是jsp/servlet/javabean,jdbc的升级呢

发布网友 发布时间:2022-05-01 23:39

我来回答

2个回答

懂视网 时间:2022-05-02 04:00

: commons-logging-1.1.3.jar

      缺少日志的jar文件报错:java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

  2)用法:

    1.对象属性的拷贝

      BeanUtils.copyProperty(admin, "userName", "jack");

      BeanUtils.setProperty(admin, "age", 18);

    2.对象的拷贝

      BeanUtils.copyProperties(newAdmin, admin);

    3.map数据拷到javaBean中      

      【注意:map中的key要与javabean的属性名称一致】

      BeanUtils.populate(adminMap, map);

  3)例子:

技术分享
public class App {

 //1. 对javabean的基本操作
 @Test
 public void test1() throws Exception {
 
 // a. 基本操作
 Admin admin = new Admin();
// admin.setUserName("Jack");
// admin.setPwd("999");
 
 // b. BeanUtils组件实现对象属性的拷贝
 BeanUtils.copyProperty(admin, "userName", "jack");
 BeanUtils.setProperty(admin, "age", 18);
 
 // 总结1: 对于基本数据类型,会自动进行类型转换!
 
 
 // c. 对象的拷贝
 Admin newAdmin = new Admin();
 BeanUtils.copyProperties(newAdmin, admin);
 
 // d. map数据,拷贝到对象中
 Admin adminMap = new Admin();
 Map<String,Object> map = new HashMap<String,Object>();
 map.put("userName", "Jerry");
 map.put("age", 29);
 // 注意:map中的key要与javabean的属性名称一致
 BeanUtils.populate(adminMap, map);
 
 // 测试
 System.out.println(adminMap.getUserName());
 System.out.println(adminMap.getAge());
 }
 
 
 //2. 自定义日期类型转换器
 @Test
 public void test2() throws Exception {
 // 模拟表单数据
 String name = "jack";
 String age = "20";
 String birth = " ";
 
 // 对象
 Admin admin = new Admin();
 
 // 注册日期类型转换器:1, 自定义的方式
 ConvertUtils.register(new Converter() {
  // 转换的内部实现方法,需要重写
  @Override
  public Object convert(Class type, Object value) {
  
  // 判断
  if (type != Date.class) {
   return null;
  }
  if (value == null || "".equals(value.toString().trim())) {
   return null;
  }
  
  
  try {
   // 字符串转换为日期
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   return sdf.parse(value.toString());
  } catch (ParseException e) {
   throw new RuntimeException(e);
  }
  }
 },Date.class);
 
 
 
 // 把表单提交的数据,封装到对象中
 BeanUtils.copyProperty(admin, "userName", name);
 BeanUtils.copyProperty(admin, "age", age);
 BeanUtils.copyProperty(admin, "birth", birth);
 
 //------ 测试------
 System.out.println(admin);
 }
 
 //2. 使用提供的日期类型转换器工具类
 @Test
 public void test3() throws Exception {
 // 模拟表单数据
 String name = "jack";
 String age = "20";
 String birth = null;
 
 // 对象
 Admin admin = new Admin();
 
 // 注册日期类型转换器:2, 使用组件提供的转换器工具类
 ConvertUtils.register(new DateLocaleConverter(), Date.class);
  
 // 把表单提交的数据,封装到对象中
 BeanUtils.copyProperty(admin, "userName", name);
 BeanUtils.copyProperty(admin, "age", age);
 BeanUtils.copyProperty(admin, "birth", birth);
 
 //------ 测试------
 System.out.println(admin);
 }
}
View Code

    注意:拷贝对象属性时,对于一般类型会自动转类型,但是遇到特殊类型,如日期类型需要自己定义日期转换器

       注册日期类型转换器:ConvertUtils.register(new DateLocaleConverter(), Date.class);

                 自定义方式:

技术分享
// 注册日期类型转换器:1, 自定义的方式
 ConvertUtils.register(new Converter() {
  // 转换的内部实现方法,需要重写
  @Override
  public Object convert(Class type, Object value) {
  
  // 判断
  if (type != Date.class) {
   return null;
  }
  if (value == null || "".equals(value.toString().trim())) {
   return null;
  }
  
  
  try {
   // 字符串转换为日期
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   return sdf.parse(value.toString());
  } catch (ParseException e) {
   throw new RuntimeException(e);
  }
  }
 },Date.class);
View Code

2.元数据

   1)在jdbc中获得数据库的定义,例如:数据库,表,列的定义,就用到元数据

   2)在jdbc中可以用的:数据库元数据,参数元数据,结果集元数据(。。。MetaData)

      1.获得数据库元数据:conn.getMetaData();

      2.参数元数据:pstmt=conn.prepareStsatement(sql);

             pstmt.getParameterMetaData();

      3.结果集元数据:rs = pstmt.executeQuery();

              rs_metaData = rs.getMetaData();

              可以通过结果集元数据获得列的名称

例子:

技术分享
//1. 数据库元数据
 @Test
 public void testDB() throws Exception {
 // 获取连接
 Connection conn = JdbcUtil.getConnection();
 // 获取数据库元数据
 DatabaseMetaData metaData = conn.getMetaData();// alt + shift + L 快速获取方法返回值
 
 System.out.println(metaData.getUserName());
 System.out.println(metaData.getURL());
 System.out.println(metaData.getDatabaseProductName());
 }
 
 //2. 参数元数据
 @Test
 public void testParams() throws Exception {
 // 获取连接
 Connection conn = JdbcUtil.getConnection();
 // SQL
 String sql = "select * from dept where deptid=? and deptName=?";
 // Object[] values = {"tom","888"};
 
 PreparedStatement pstmt = conn.prepareStatement(sql);
 // 参数元数据
 ParameterMetaData p_metaDate = pstmt.getParameterMetaData();
 // 获取参数的个数
 int count = p_metaDate.getParameterCount();
 
 
 // 测试
 System.out.println(count);
 }
 
 // 3. 结果集元数据
 @Test
 public void testRs() throws Exception {
 String sql = "select * from dept ";
 
 // 获取连接
 Connection conn = JdbcUtil.getConnection();
 PreparedStatement pstmt = conn.prepareStatement(sql);
 ResultSet rs = pstmt.executeQuery();
 // 得到结果集元数据(目标:通过结果集元数据,得到列的名称)
 ResultSetMetaData rs_metaData = rs.getMetaData();
 
 // 迭代每一行结果
 while (rs.next()) {
  // 1. 获取列的个数
  int count = rs_metaData.getColumnCount();
  // 2. 遍历,获取每一列的列的名称
  for (int i=0; i<count; i++) {
  // 得到列的名称
  String columnName = rs_metaData.getColumnName(i + 1);
  // 获取每一行的每一列的值
  Object columnValue = rs.getObject(columnName);
  // 测试
  System.out.print(columnName + "=" + columnValue + ",");
  }
  System.out.println();
 }
 
 }
View Code

 

3.DbUtils组件

  1)Apache组织提供的开源JDBC工具类,对jdbc进行了简单的封装,引入jar文件 : commons-dbutils-1.6.jar

  2)使用:

     DbUtil关闭资源、加载驱动

     核心工具类:QueryRunner,对数据库的操作都是通过他来对结果数据进行封装,处理数据

     操作更新:update(conn,sql,param);//执行更新带一个占位符的sql

          update(conn ,sql,...param);//执行更新带多个占位符的sql

            batch(conn,sql,params);批处理

         查询:query(conn,sql,ResultSetHander<T> rsh,Object...params);这个对查询结果封装为自定义的T类型

       DbUtil组件中提供了一些封装结果的对象就不需要自己去自定义封装结果了

          BeanHandler:查询返回一个单一对象;BeanListhandler:查询返回list集合,集合元素是指定的对象

          ArrayHander:结果集第一行,封装为对象数据Object[]

          ArrayListHander:结果集每一行封装为Object[]数组,再添加到list集合中去

          ScalarHandler:放回结果集的第一行第一列

          MapHandler:查询返回结果的第一条记录

查询封装结果集例子:

技术分享
// 一、查询, 自定义结果集封装数据
 @Test
 public void testQuery() throws Exception {
 String sql = "select * from admin where id=?";
 // 获取连接
 conn = JdbcUtil.getConnection();
 // 创建DbUtils核心工具类对象
 QueryRunner qr = new QueryRunner();
 // 查询
 Admin admin = qr.query(conn, sql, new ResultSetHandler<Admin>() {

  // 如何封装一个Admin对象
  public Admin handle(ResultSet rs) throws SQLException {
  if (rs.next()) {
   Admin admin = new Admin();
   admin.setId(rs.getInt("id"));
   admin.setUserName(rs.getString("userName"));
   admin.setPwd(rs.getString("pwd"));
   return admin;
  }
  return null;
  }

 }, 29);

 // 测试
 System.out.println(admin);
 // 关闭
 conn.close();

 }
 
 // 二、查询, 使用组件提供的结果集对象封装数据
 
 // 1)BeanHandler: 查询返回单个对象
 @Test
 public void testQueryOne() throws Exception {
 String sql = "select * from admin where id=?";
 // 获取连接
 conn = JdbcUtil.getConnection();
 // 创建DbUtils核心工具类对象
 QueryRunner qr = new QueryRunner();
 // 查询返回单个对象
 Admin admin = qr.query(conn, sql, new BeanHandler<Admin>(Admin.class), 29);
 
 System.out.println(admin);
 conn.close();
 }
 
 // 2)BeanListHandler: 查询返回list集合,集合元素是指定的对象
 @Test
 public void testQueryMany() throws Exception {
 String sql = "select * from admin";
 conn = JdbcUtil.getConnection();
 QueryRunner qr = new QueryRunner();
 // 查询全部数据
 List<Admin> list = qr.query(conn, sql, new BeanListHandler<Admin>(Admin.class));
 
 System.out.println(list);
 conn.close();
 }
 @Test
// 3) ArrayHandler, 查询返回结果记录的第一行,封装对对象数组, 即返回:Object[]
// 4) ArrayListHandler, 把查询的每一行都封装为对象数组,再添加到list集合中
// 5) ScalarHandler 查询返回结果记录的第一行的第一列 (在聚合函数统计的时候用)
// 6) MapHandler 查询返回结果的第一条记录封装为map
 public void testArray() throws Exception {
 String sql = "select * from admin";
 conn = JdbcUtil.getConnection();
 QueryRunner qr = new QueryRunner();
 // 查询
 //Object[] obj = qr.query(conn, sql, new ArrayHandler());
 //List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
 //Long num = qr.query(conn, sql, new ScalarHandler<Long>());
 Map<String, Object> map = qr.query(conn,sql, new MapHandler());
 
 conn.close();
 }
View Code

 更新例子

技术分享
// 1. 更新
 @Test
 public void testUpdate() throws Exception {
 String sql = "delete from admin where id=?";
 // 连接对象
 conn = JdbcUtil.getConnection();

 // 创建DbUtils核心工具类对象
 QueryRunner qr = new QueryRunner();
 qr.update(conn, sql, 26);

 // 关闭
 DbUtils.close(conn);
 }

 // 2. 批处理
 @Test
 public void testBatch() throws Exception {
 String sql = "insert into admin (userName, pwd) values(?,?)";
 conn = JdbcUtil.getConnection();
 QueryRunner qr = new QueryRunner();
 // 批量删除
 qr.batch(conn, sql, new Object[][]{ {"jack1","888"},{"jack2","999"} });
 
 // 关闭
 conn.close();
 }
View Code

 

          

jdbc升级

标签:工具   快速   exec   自动   聚合函数   convert   term   geturl   pre   

热心网友 时间:2022-05-02 01:08

struts2
其实就是对前台传来的request
response
等进行封装
之后遍历调用各种*,最后返回到页面
Hibernate
就是对对象关系的处理,对很多sql语句进行了封装
spring
是利用反射
代理等对对象进行注入,使用切面
这三个框架底层都运用了反射的技术
至于说是不是servlet,javabean,jdbc的升级,片面理解的话也可以这么说吧
因为servlet处理请求
struts也是
javabean,jdbc处理数据持久层
hibernate也是
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
使命召唤9打不开,每次都出现这个情况,怎么弄啊 使命召唤9无法进入关卡 百度知道百度知道的作用 梦见在水里走什么预兆 梦见光脚走路是什么兆头 西装如何穿搭才有高级感? 西装怎样搭配才能穿出又飒又优雅的气势? 西装如何搭配才能穿出优雅成熟的气质? 我考了两次科目三路考,很不辛没能通过,我想放弃了,纠结?学车很辛苦... 我考过不了科目三 造纸术距今有多少年的历史怎么算 关于纸的发展历史 中国造纸有多久历史了 造纸术最早是起源于什么时候? 中国造纸术从古到今的演_变历程 造纸的发展史 造纸术距今有多少年的历史 青岛市北连云港路街道办事处在那? 北京路街道的北京路街道办领导成员 北京路街道的北京路街道办机构设置 郑州市祭城路街道办事处的行政沿革 谁知道闵行区各街道办事处的通讯地址? 中华路街道办事处的介绍 南昌市上海路街道办事处在哪里? 湖南省长沙市的54个街道办事处的名称明细是什么? 人民路街道办事处的辖区简介 海淀区有哪些街道办事处? 人民路街道办事处的介绍 西安市有多少个街道办事处? 上海街道办事处是怎么划分的?哪条路属于哪个办事处? 三极管中IE IB IC指的是什么? 电气中1l和1le有什么区别 交流接触器ie 是额定电流吗? 断路器为Ie=1250A,Id=80kA,Ir=31.5kA,4s什么意思 电脑鼠标频繁卡顿! 中文里,最难的字是什么字,难写或难读的 字典上最难写的字是啥? 最难的21个汉字 中文最难写的几个字 为什么苹果7plus没有SOS 汉字中笔画最多最难写最复杂的是哪个字? ? 像数健康采用的红外热成像技术原理是什么? 苹果7 怎么设置紧急 为什么iPhone7(版本10.2)没有SOS紧急联络 世界上最难写的字是什么?怎么写? 中国字典中最难写的是什么字? iPhone 7更新到iOS10.2后没有出现SOS功能,怎么回事? 现代汉语词典中最难的汉字是什么 中国汉字中最难打 笔画最多.字典里没有的是哪个字? 苹果手机sos紧急联络怎么打开呢?