码迷,mamicode.com
首页 > 数据库 > 详细

Spring 学习其三:数据库编程

时间:2018-10-04 14:07:15      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:cfg.xml   template   []   temp   ota   basic   获取   现在   gen   

一、直接利用 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 信息的功能:

 

Spring 学习其三:数据库编程

标签:cfg.xml   template   []   temp   ota   basic   获取   现在   gen   

原文地址:https://www.cnblogs.com/JiKio/p/9742092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!