一、直接利用 JDBC 进行数据库编程
虽然有 Spring 和 MyBatis 等数据持久化的利器在手,但还是有必要去了解下传统的 JDBC 开发方式。无论哪种框架,其本质都是在传统的 JDBC 方式上进行了封装。
package JdbcTest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JdbcTest { public static void main(String[] args) { EmployeeModel employee = null; Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://192.168.52.129:3306/employees?serverTimezone=UTC", "root", "Root123#"); ps =con.prepareStatement("select emp_no,first_name,last_name from employees where emp_no = ?"); ps.setInt(1, 10001); rs = ps.executeQuery(); while(rs.next()) { employee = new EmployeeModel(); employee.setEmpNo(rs.getInt(1)); employee.setFirstName(rs.getString(2)); employee.setLastName(rs.getString(3)); } } catch (ClassNotFoundException e) { System.out.println("class not found"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(!(rs == null) && !rs.isClosed()) { rs.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(!(ps == null) && ps.isClosed()) { ps.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(con !=null && !con.isClosed()) { con.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println(employee); } }
这段代码的恼人的地方在于数据库资源的使用和销毁,这些代码被大串的 try-catch 语句包裹。Spring 则为我们进行了一次包装,将这些烦人的 try-catch 语句交给 Spring 去处理。
二、为 Spring 创建第三方数据库连接池
Spring 本身也有自己的数据类,但是过于简单,在绝大多数的项目中,我们都希望能够用数据连接池的方式去管理连接。常用的第三方连接池是 DBCP2。
在配置 DBCP2 之前,现在 properties 文件里存好数据库连接所需的信息:
database.driver = com.mysql.cj.jdbc.Driver database.url = jdbc:mysql://192.168.52.129:3306/employees?serverTimezone=UTC database.username = root database.password = Root123# database.maxtotal = 255 database.maxidle = 3 database.maxwaitmillis = 10000
maxtoal 值最大连接数,maxidle 为最大等待连接数量(超出这个数量的连接资源会被释放),maxwaitmillis 为最大等待毫秒数
然后再 spring-cfg.xml 里引入该 peoperties 文件并且建立一个连接池对象:
<bean id = "dataSource" class = "org.apache.commons.dbcp2.BasicDataSource"> <property name = "driverClassName" value = "${database.driver}"/> <property name="url" value="${database.url}"/> <property name="username" value="${database.username}"/> <property name="password" value="${database.password}"/> <property name="maxTotal" value="${database.maxtotal}"/> <property name="maxIdle" value="${database.maxidle}"/> <property name="maxWaitMillis" value="${database.maxwaitmillis}"/> </bean>
而包装传统 jdbc 的 Spring 的类为 JdbcTemple ,我们也配置下:
<bean id="jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate"> <property name = "dataSource" ref = "dataSource"/> </bean>
然后使用 JdbcTemplate 来完成上面的获取 employee 信息的功能:
原文地址:https://www.cnblogs.com/JiKio/p/9742092.html
时间: 2024-10-25 05:27:52