本篇文章基于https://www.bilibili.com/video/av47952931?p=1这个视频总结理解写成
一般的jdbc的代码如下:
// 1.注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// 2.获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/eesy","root","1234");
// 这些都是可以放在配置文件中解耦合的
// 3.获取操作数据库的预处理对象
PreparedStatement pstm = conn.prepareStatement("select * from account");
// 4.执行SQL,得到结果集
ResultSet rs = pstm.executeQuery();
// 5.遍历结果集
while(rs.next()){
System.out.println(rs.getString("name"));
}
rs.close();
pstm.close();
conn.close();
过程是:
拿到驱动,然后获取数据库的连接地址(包括用户名和密码),再用连接地址编写sql语句作为预处理对象,然后执行预处理对象获得结果
但是这个耦合太高了
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
可以将上面这行代码改成下面的
// 此时这里只是依赖于一个字符串而不是一个具体的对象,减少了一些耦合;
Class.forName("com.mysql.jdbc.Driver");
这里引出,耦合是什么,又如何解决呢
程序的耦合:
耦合是指程序间的依赖关系
包括:类之间的依赖;方法间的依赖
解耦:降低程序间的依赖关系
实际开发中应该做到: 编译期不依赖,运行期才依赖
解耦的思路:
第一步:使用反射来创建对象,而避免使用new关键字
第二步:通过读取配置文件来获取要创建对象全限定类名
上面的代码改了之后,其实还是依赖于com.mysql.jdbc.Driver的,如果没有一样会报错,但截然不同的是,没改之前是直接报错,改了之后是编译时才报错。
这也是解耦合的一直方法,当然 Class.forName("com.mysql.jdbc.Driver");也不是尽善尽美,后面还会有更好的方法