• 【Spring实战】—— 14 传统的JDBC实现的DAO插入和读取


    从这篇开始学习Spring的JDBC,为了了解Spring对于JDBC的作用,先通过JDBC传统的流程,实现一个数据库的插入读取

      从这篇你可以了解到:

      1 传统的JDBC插入和读取的过程。

      2 如何通过JDBC连接Mysql

      如何通过JDBC连接mysql

      首先看一下下面这张图:

      应用程序需要通过mysql的驱动程序,才能与数据连接。

      驱动程序下载地址:mysql-connector-java-5.1.13-bin.jar

      在设计程序的时候,应该采用接口编程的方式,这样能够减小数据操作与应用业务逻辑代码之间的耦合

     

      JDBC插入和读取过程

      使用传统的JDBC需要经过如下的几个步骤:

      1 加载驱动程序

    Class.forName("com.mysql.jdbc.Driver");

      2 创建连接

    Connection conn = (Connection) DriverManager.getConnection(url, userName,passwrod);

      3 创建执行计划

    PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement("select * from persons");

      4 执行查询获取结果

                ResultSet rs = pstmt.executeQuery();
                while (rs.next()) {
                    System.out.println("id : " + rs.getString(1) + " name : "+ rs.getString(2) + " age : " + rs.getInt(3));
                }

      5 关闭查询结果

                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }

      6 关闭执行计划

                if (pstmt != null) {
                    try {
                        pstmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }

      7 关闭连接

                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }

      按照上面的几个步骤,来看一下实现的代码:

      首先是接口部分:

    package com.spring.chap5.dao;
    
    public interface OldJdbc {
        /**
         * 插入数据
         */
        public void insertPerson(String id,String name,int age);
        /**
         * 查询所有结果
         */
        public void findAllPerson();
    }

      然后是实现部分

    package com.spring.chap5.dao;
    
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.PreparedStatement;
    
    public class OldJdbcImpl implements OldJdbc{
        
        String driver = "com.mysql.jdbc.Driver";
        String userName = "root";
        String passwrod = "123qwe";
        String url = "jdbc:mysql://localhost:3306/test";
    
        public void insertPerson(String id,String name,int age) {
            try {
                Class.forName(driver);
                Connection conn = (Connection) DriverManager.getConnection(url, userName,passwrod);
                PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement("insert into persons (id,name,age) values (?,?,?)");
                pstmt.setString(1, id);
                pstmt.setString(2, name);
                pstmt.setInt(3, age);
                pstmt.executeUpdate();
                if (pstmt != null) {
                    try {
                        pstmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        public void findAllPerson() {
            try {
                Class.forName(driver);
                Connection conn = (Connection) DriverManager.getConnection(url, userName,passwrod);
                PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement("select * from persons");
                ResultSet rs = pstmt.executeQuery();
                while (rs.next()) {
                    System.out.println("id : " + rs.getString(1) + " name : "+ rs.getString(2) + " age : " + rs.getInt(3));
                }
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (pstmt != null) {
                    try {
                        pstmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

      可以看到,光是两个简单的插入和查询,就有如此多的代码,而且大部分都是相同的过程。因此spring的模板,就派上用场了。

      测试类如下:

    public class test {
        public static void main(String[] args) {
            OldJdbc oldjdbc = new OldJdbcImpl();
            oldjdbc.insertPerson("001", "xingoo1", 20);
            oldjdbc.insertPerson("002", "xingoo2", 20);
            oldjdbc.findAllPerson();
        }
    }

      

      另外还需要一个很重要的部分,就是sql语句:

    /*
    SQLyog v4.05
    Host - 4.1.11-nt : Database - test
    *********************************************************************
    Server version : 4.1.11-nt
    */
    
    
    create database if not exists `test`;
    
    USE `test`;
    
    /*Table structure for table `test`.`persons` */
    
    drop table if exists `test`.`persons`;
    
    CREATE TABLE `persons` (
      `id` varchar(20) NOT NULL default '',
      `name` varchar(20) default NULL,
      `age` int(10) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Data for the table `test`.`persons` */
    
    insert into `test`.`persons` values ('001','xingoo1',20),('002','xingoo2',20);
  • 相关阅读:
    MySQL5.6 GTID、多线程复制
    WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
    linux下用phpize给PHP动态添加扩展
    Zabbix汉化方法
    [FTP] Pure-FTPd SSL/TLS 配置方法
    PHP 缓存扩展opcache
    sftp搭建
    nginx https使用
    iptables基本规则
    kvm虚拟机安装
  • 原文地址:https://www.cnblogs.com/xing901022/p/4269669.html
Copyright © 2020-2023  润新知