zoukankan      html  css  js  c++  java
  • 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}
    
  • 相关阅读:
    DNS原理入门
    软件架构入门
    熵:宇宙的终极规则
    新鲜事
    加密货币的本质
    汇编语言入门教程
    HTML & CSS
    [模板] 矩阵快速幂
    [模板] 三分
    [模板] 2-SAT 问题
  • 原文地址:https://www.cnblogs.com/fanghao/p/8764976.html
Copyright © 2011-2022 走看看