01-使用JDBC开发的缺点
2021/8/8 23:37:21
本文主要是介绍01-使用JDBC开发的缺点,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、简述JDBC开发存在的缺点
--需求: 从数据库当中查询所有的用户信息,将用户信息封装为用户对象,然后将用户对象放到List集合中 --编写JDBC代码 准备javabean:User --JDBC开发的缺点: *缺点一:重复代码太多,降低开发效率(比较繁琐,有些代码没有必要重复)例如下面对查询结果集的处理代码 while (rs.next()){ ... //从结果集中获取数据 --//下面的四行代码反复调用同一个方法:rs.getString("仅仅是这不同"); int id = rs.getInt("id"); String loginName = rs.getString("loginName"); String loginPwd = rs.getString("loginPwd"); String realName = rs.getString("realName"); //将上面零散的数据封装到一个user对象中(即封装成javabean) //将javabean放到容器userList集合中 User user = new User(); //--下面这四行也是反复调用同一类型方法:user.setXxx(); user.setId(id); user.setLoginName(loginName); user.setLoginPwd(loginPwd); user.setRealName(realName); userList.add(user); ... } --上面的代码反复的从结果集中取数据,反复调用对象中给属性赋值的方法,实际开发中数据库中字段数超过30个都是很 --常见的,上面重复的调用方法就会巨繁琐,那么这些操作我们完全可以用反射机制替代 --而MyBatis框架就是别人提前写好的java代码,在mybatis框架中封装了JDBC代码 --其底层使用了反射机制,帮我们自动创建java对象,自动给java对象的属性赋值,以上代码在mybatis中就不需要写了 * 缺点二: 在JDBC开发中sql语句是编写在java程序中的,sql语句不支持配置。 当SQL语句后期需要调优时,SQL语句被修改的概率是很高的。 在Java程序中编写SQL语句,后期修改,就得修改Java源代码,这就导致代码需要重新编译,项目需要重新部署等操作。 修改源代码违背了开闭原则:OCP 在互联网分布式架构的项目中,并发量大,系统需要不断优化,各 方面的优化就有一方面是SQL语句的优化,SQL语句的优化是很重要的。
2、通过例子测试查询结果放进java对象
创建一个名为a-jdbc-test的普通java项目,导入MySQL数据库驱动,编写一个测试类JDBCTest01.java,然后在主要新建一个entity包存放实体类,实体类用于创建所查询数据对应的实体类对象,用该对象封装查询到的数据
JDBCTest01.java代码如下:
package com.mybatis.jdbc.test; import com.mybatis.jdbc.entity.User; import java.sql.*; import java.util.ArrayList; import java.util.List; public class JDBCTest01 { public static void main(String[] args) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; List<User> userList = new ArrayList(); try { // Class.forName("com.mysql.jdbc.Driver"); // conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysqlstudy?useSSH=false","root","rong195302"); // String sql = "select id,loginName,loginPwd,realName from t_user"; ps = conn.prepareStatement(sql); // rs = ps.executeQuery(); // while (rs.next()){ //从结果集中获取数据 int id = rs.getInt("id"); String loginName = rs.getString("loginName"); String loginPwd = rs.getString("loginPwd"); String realName = rs.getString("realName"); //将上面零散的数据封装到一个user对象中(即封装成javabean) //将javabean放到容器userList集合中 User user = new User(); user.setId(id); user.setLoginName(loginName); user.setLoginPwd(loginPwd); user.setRealName(realName); userList.add(user); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); } finally { if (rs != null) { try { rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (ps != null) { try { ps.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } //拿着List集合去做展示(MVC中的View) for (User user: userList) { System.out.println(user); } } }
实体类User.java如下
package com.mybatis.jdbc.entity; public class User { int id; String loginName; String loginPwd; String realName; public User() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getLoginPwd() { return loginPwd; } public void setLoginPwd(String loginPwd) { this.loginPwd = loginPwd; } public String getRealName() { return realName; } public void setRealName(String realName) { this.realName = realName; } @Override public String toString() { return "User{" + "id=" + id + ", loginName='" + loginName + '\'' + ", loginPwd='" + loginPwd + '\'' + ", realName='" + realName + '\'' + '}'; } }
这篇关于01-使用JDBC开发的缺点的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享