Spring使用原生JDBC

Spring使用原生JDBC

为加深对Spring解耦的理解,本次实验学习用Spring连接JDBC

一、POM配置文件

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>fanghao</groupId>
    <artifactId>myspring</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>myspring</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <!--Spring Context-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.9-rc</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.5.RELEASE</version>
        </dependency>

    </dependencies>
</project>

二、用户类

Customer.java

package newHello.customer;


public class Customer {
    private String name;
    private int age;

    public Customer(String name, int age) {
        this.name = name;
        this.age = age;

    }

    @Override
    public String toString() {
        return "Customer{" +
                "name=" + name +
                ", age=" + age +
                '}';
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

三、用户DAO接口

CustomerDAO.java

package newHello.customer;

/**
 * DAO(Data Access Object)数据存取对象
 */
public interface CustomerDAO {
    void insert(Customer customer);

    Customer findByCustomerId(int custId);
}

四、用户DAO接口实现类

package newHello.customer;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JdbcCustomerDAO implements CustomerDAO {
    private DataSource dataSource;

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    /**
     * 使用prepareStatement拼接SQL
     * @param customer 获取输入对象的属性
     */
    public void insert(Customer customer) {
        String sql = "insert into CUSTOMER " +
                "(NAME, AGE) VALUES(?, ?)";
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, customer.getName());
            ps.setInt(2, customer.getAge());
            ps.executeUpdate();
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (conn != null)
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
        }
    }

    public Customer findByCustomerId(int custId) {
        String sql = "select * from CUSTOMER where CUST_ID = ?";
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, custId);
            Customer customer = null;
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                customer = new Customer(
                        rs.getString("NAME"),
                        rs.getInt("Age")
                );
            }
            rs.close();
            ps.close();
            return customer;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
}

五、资源文件

资源文件主要做配置,管理java bean

➜  resources tree .
.
├── Spring-Customer.xml
├── Spring-Datasource.xml
└── Spring-Module.xml

0 directories, 3 files

5.1 Spring-Customer.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <!--配置用户接口的实现类JdbcCustomerDAO-->
    <bean id="customerDAO" class="newHello.customer.JdbcCustomerDAO">
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>

5.2 Spring-Datasource.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <!--配置数据库驱动-->
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="root" />
        <property name="password" value="mysql123" />
    </bean>

</beans>

5.3 Spring-Module.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <!--管理要导入的XML配置文件-->
    <import resource="Spring-Datasource.xml" />
    <import resource="Spring-Customer.xml" />
</beans>

六、应用启动程序

App.java

package newHello.customer;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        // 根据XML配置文件生成应用上下文
        ApplicationContext context =
                new ClassPathXmlApplicationContext("Spring-Module.xml");


        // 读取customerDAO的JavaBean,转型为customerDAO
        CustomerDAO customerDAO = (CustomerDAO) context.getBean("customerDAO");

        // 用封装好DAO进行类似ORM的操作
        customerDAO.insert(new Customer("Jack", 21));
        customerDAO.insert(new Customer("Tom", 24));
        customerDAO.insert(new Customer("Jane", 25));

        Customer customer = customerDAO.findByCustomerId(2);
        System.out.println(customer);
    }
}

七、运行结果

Customer{name=Tom, age=24}
posted @ 2018-04-09 23:57  潇雨危栏  阅读(360)  评论(0编辑  收藏  举报