整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Java | 詳解 Java連接MySQL、編寫JdbcUtils工具類、使用數據庫連接池、使用JavaTemplate

          一、連接mysql數據庫 1、啟動 MySQL

          以管理員身份打開 cmd 命令行,輸入 net start mysql

          mysql數據庫工具_mysql數據庫工具軟件_mysql數據庫設計工具

          2、MySQL 創建表

          創建一張 user 表,有id、name、三個字段。

          3、導入jar包

          (1) 創建新項目,在項目下創建lib包,用于存放所需要的jar包

          mysql數據庫設計工具_mysql數據庫工具軟件_mysql數據庫工具

          (2) 拷貝 mysql 驅動包mysql--j-8.0.31.jar 到 lib 目錄下。

          右鍵jar包,點擊 添加為庫。

          mysql數據庫工具_mysql數據庫工具軟件_mysql數據庫設計工具

          添加后 jar 包旁出現一個小三角,可以點開查看里面的內容,此時導入成功。

          mysql數據庫工具_mysql數據庫設計工具_mysql數據庫工具軟件

          mysql 驅動 jar 包下載:

          官網:

          CSDN:mysql--j-8.0.31-Java文檔類資源-CSDN文庫

          4、創建類 Demo01.java 5、注冊驅動

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

          6、獲取數據庫連接對象

          private static final String URL = "jdbc:mysql://localhost:3306/db1";
          private static final String USER = "root";
          private static final String PASSWORD = "root";
          ... ...
          Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);

          Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?user=root&password=root");

          Properties p = new Properties();
          p.setProperty("user","root");
          p.setProperty("password","root")
          Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", p);

          【注意】需要填寫3個參數,分別是數據庫連接URL、用戶名、密碼,需要填寫你自己的。

          其中URL的構成:

          jdbc:mysql:// localhost:3306  /     db1
             協議         IP地址   端口  要連接的數據庫名稱

          7、獲取執行SQL語句的對象

          Statement stat = conn.createStatement();

          8、執行SQL語句 增刪改:

          stat.executeUpdate("insert into user value(1,'admin','root')");
          stat.executeUpdate("update user set name = 'sunny' where id = 1");
          stat.executeUpdate("delete from user where id = 1");

          查:

          ResultSet rs = stat.executeQuery("select * from user");
          while (rs.next()){
              int id = rs.getInt("id");
              String name = rs.getString("name");
              String password = rs.getString("password");
              System.out.println("id="+id+",name="+name+",password="+password);
          }

          方法解析:

          9、釋放連接

          rs.close();
          stat.close();
          conn.close();

          完整代碼:

          import java.sql.Connection;
          import java.sql.DriverManager;
          import java.sql.ResultSet;
          import java.sql.Statement;
          public class Demo01 {
              private static final String URL = "jdbc:mysql://localhost:3306/db1";
              private static final String USER = "root";
              private static final String PASSWORD = "root";
              public static void main(String[] args) throws Exception {
                  // 注冊驅動
                  Class.forName("com.mysql.cj.jdbc.Driver");
                  // 獲取數據庫連接對象
                  // 方法1
                  Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
                  // 方法2
                  /*Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1?user=root&password=root");*/
                  // 方法3
                  /*
                  Properties p = new Properties();
                  p.setProperty("user","root");
                  p.setProperty("password","root")
                  Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", p);
                  */
                  // 獲取執行SQL語句的對象
                  Statement stat = conn.createStatement();
                  // 執行SQL語句
                  stat.executeUpdate("insert into user value(1,'admin','root')");
                  stat.executeUpdate("update user set name = 'sunny' where id = 1");
                  stat.executeUpdate("delete from user where id = 1");
                  ResultSet rs = stat.executeQuery("select * from user");
                  while (rs.next()) {
                      int id = rs.getInt("id");
                      String name = rs.getString("name");
                      String password = rs.getString("password");
                      System.out.println("id=" + id + ",name=" + name + ",password=" + password);
                  }
                  // 釋放連接
                  rs.close();
                  stat.close();
                  conn.close();
              }
          }
          

          二、編寫使用工具類

          觀察上面的代碼我們可以發現,除了執行SQL的語句有所不同外,其他代碼的格式基本上都是固定的。我們可以編寫一個工具類,提供 獲取數據庫連接對象、關閉數據庫相關資源 等相關方法。

          1、編寫工具類 .java

          創建 Utils 文件夾,將代碼相關的工具類都放到里面。編寫.java,代碼首先運行靜態代碼塊類的語句,獲得數據庫連接對象。

          import java.sql.*;
          public class JdbcUtils {
              private static final String driver = "com.mysql.cj.jdbc.Driver";
              private static final String url = "jdbc:mysql://localhost:3306/db1";
              private static final String name = "root";
              private static final String password = "root";
              private static final Connection conn;
              
              static {
                  try {
                      Class.forName(driver);
                      conn = DriverManager.getConnection(url, name, password);
                  } catch (ClassNotFoundException | SQLException e) {
                      throw new RuntimeException(e);
                  }
              }
              /**
               * 獲取數據庫連接對象
               * @return 數據庫連接對象
               */
              public static Connection getConnect() {
                  return conn;
              }
              /**
               * 關閉數據庫相關資源
               * @param conn 數據庫連接對象
               * @param ps sql語句執行對象
               * @param rs 查詢結果集
               */
              public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
                  try {
                      if (conn != null) conn.close();
                      if (ps != null) ps.close();
                      if (rs != null) rs.close();
                  } catch (SQLException e) {
                      throw new RuntimeException(e);
                  }
              }
              /**
               * 關閉數據庫相關資源
               * @param conn 數據庫連接對象
               * @param ps sql語句執行對象
               */
              public static void close(Connection conn, PreparedStatement ps) {
                  close(conn, ps, null);
              }
              /**
               * 關閉數據庫相關資源
               * @param conn 數據庫連接對象
               * @param rs 查詢結果集
               */
              public static void close(Connection conn, ResultSet rs) {
                  close(conn, null, rs);
              }
          }
          

          2、解耦代碼

          分析工具類,可以發現關于數據庫連接的相關參數,如 driver、url、user、 等均寫在代碼中,程序的耦合性較高。可以將變量寫在 .文件中,程序通過讀取文件的方式獲得相關信息。

          首先創建 jdbc. 資源包,以 “ 鍵=值 ” 的形式寫入相關參數。

          mysql數據庫設計工具_mysql數據庫工具_mysql數據庫工具軟件

          jdbc.

          driver=com.mysql.cj.jdbc.Driver
          url=jdbc:mysql://localhost:3306/db1
          name=root
          password=root

          .java

          import java.io.IOException;
          import java.sql.*;
          import java.util.Properties;
          public class JdbcUtils {
              private static final String driver;
              private static final String url;
              private static final String name;
              private static final String password;
              static {
                  try {
                      Properties p = new Properties();
                      p.load(JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
                      driver = p.getProperty("driver");
                      url = p.getProperty("url");
                      name = p.getProperty("name");
                      password = p.getProperty("password");
                      Class.forName(driver);
                  } catch (ClassNotFoundException | IOException e) {
                      throw new RuntimeException(e);
                  }
              }
              /**
               * 獲取數據庫連接對象
               * @return 數據庫連接對象
               * @throws Exception 獲取失敗
               */
              public static Connection getConnect() throws Exception {
                  return DriverManager.getConnection(url, name, password);
              }
              /**
               * 關閉數據庫相關資源
               * @param conn 數據庫連接對象
               * @param ps sql語句執行對象
               * @param rs 查詢結果集
               */
              public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
                  try {
                      if (conn != null) conn.close();
                      if (ps != null) ps.close();
                      if (rs != null) rs.close();
                  } catch (SQLException e) {
                      throw new RuntimeException(e);
                  }
              }
              /**
               * 關閉數據庫相關資源
               * @param conn 數據庫連接對象
               * @param ps sql語句執行對象
               */
              public static void close(Connection conn, PreparedStatement ps) {
                  close(conn, ps, null);
              }
              /**
               * 關閉數據庫相關資源
               * @param conn 數據庫連接對象
               * @param rs 查詢結果集
               */
              public static void close(Connection conn, ResultSet rs) {
                  close(conn, null, rs);
              }
          }
          

          3、使用工具類

          import Utils.JdbcUtils;
          import java.sql.Connection;
          import java.sql.ResultSet;
          import java.sql.Statement;
          public class JdbcUtilsDemo {
              public static void main(String[] args) throws Exception {
                  query();
              }
              public static void query() throws Exception {
                  Connection conn = JdbcUtils.getConnect();
                  Statement stat = conn.createStatement();
                  ResultSet rs = stat.executeQuery("select * from user");
                  while (rs.next()) {
                      int id = rs.getInt("id");
                      String name = rs.getString("name");
                      String password = rs.getString("password");
                      System.out.println("id=" + id + ",name=" + name + ",password=" + password);
                  }
                  JdbcUtils.close(conn, rs);
              }
          }
          

          三、使用數據庫連接池

          數據庫連接池是存儲數據庫連接對象的容器,你可以想象成一個已經提前 裝好數個連接對象的池子。當你需要 連接對象 時,可以直接從池子獲取,用完歸還即可。這樣當程序在運行的時候,不用自己去創建數據庫連接對象,從而提高了運行效率。常用的JDBC連接池有C3P0、Druid。

          1、簡單的數據庫連接池

          編寫一個簡陋的 數據庫連接池,用于理解原理。

          import Utils.JdbcUtils;
          import java.sql.Connection;
          import java.util.LinkedList;
          public class SimpleConnectPool {
              private static LinkedList pool = new LinkedList<>();
              static {
                  try {
                      for (int i = 1; i <= 5; i++) {
                          // 獲取數據庫連接對象
                          Connection conn = JdbcUtils.getConnect();
                          // 將連接對象放到 pool 中
                          pool.add(conn);
                      }
                  } catch (Exception e) {
                      System.out.println("數據庫連接池初始化失敗!");
                  }
              }
              // 提供 獲取數據庫連接對象 的方法(pool刪除)
              public static synchronized Connection getConnect(){
                  if(pool.size() > 0){
          

          mysql數據庫工具軟件_mysql數據庫設計工具_mysql數據庫工具

          return pool.removeFirst(); } throw new RuntimeException("數據庫連接池中 對象已用完"); } // 提供 歸還數據庫連接對象 的方法(pool添加) public static void close(Connection conn){ pool.addLast(conn); } }

          使用該連接池

          import java.sql.Connection;
          public class SimpleConnectPoolDemo {
              public static void main(String[] args) {
                  for (int i = 1; i <= 6; i++) {
                      Connection conn = SimpleConnectPool.getConnect();
                      System.out.printf("第" + i + "次獲取:" + conn+"\n");
                      if (i == 3) {
                          SimpleConnectPool.close(conn);
                          System.out.printf("第" + i + "次歸還:" + conn+"\n");
                      }
                  }
              }
          }
          

          2、使用 C3P0 數據庫連接池

          步驟:

          (1)導入jar包。導入方式和mysql驅動包的導入一樣,注意這次除了要導入一個jar包外,還需要導入一個 xml 配置文件,即如下2個文件。

          mysql數據庫工具軟件_mysql數據庫工具_mysql數據庫設計工具

          C3P0下載:c3p0-0.9.5.2-Java文檔類資源-CSDN文庫

          (2)編寫 c3p0-config.xml 配置文件。打開 c3p0-config.xml ,將里面與數據庫連接相關的4個參數修改為自己的。C3P0會根據這個配置文件中的參數連接你的mysql數據庫。

          【注意】該配置文件需放在 src 目錄下。

          
          
            
              com.mysql.cj.jdbc.Driver
              jdbc:mysql://localhost:3306/db1
              root
              root
              
              5
              10
              3000
            
             
            
          

          (3)創建 類,編寫相關代碼。

          import com.mchange.v2.c3p0.ComboPooledDataSource;
          import javax.sql.DataSource;
          import java.sql.Connection;
          import java.sql.SQLException;
          public class C3P0Demo1 {
              public static void main(String[] args) throws SQLException {
                  // 創建數據庫連接池對象
                  DataSource dataSource = new ComboPooledDataSource();
                  // 獲取數據庫連接對象
                  Connection conn = dataSource.getConnection();
                  System.out.println(conn);
                  // 歸還連接
                  conn.close();
              }
          }

          (4)你也可以不編寫 c3p0-config.xml 配置文件,直接在代碼中設置數據庫連接相關參數。創建 類,編寫相關代碼。

          import com.mchange.v2.c3p0.ComboPooledDataSource;
          import java.beans.PropertyVetoException;
          import java.sql.Connection;
          import java.sql.SQLException;
          public class C3P0Demo2 {
              public static void main(String[] args) throws PropertyVetoException, SQLException {
                  // 創建數據庫連接池對象
                  ComboPooledDataSource dataSource = new ComboPooledDataSource();
                  // 配置參數信息
                  dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
                  dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/db1");
                  dataSource.setUser("root");
                  dataSource.setPassword("root");
                  // 獲取數據庫連接對象
                  Connection conn = dataSource.getConnection();
                  System.out.println(conn);
                  // 歸還連接
                  conn.close();
              }
          }

          3、使用 Druid 數據庫連接池

          (1)導入jar包。導入方式和mysql驅動包的導入一樣,注意這次除了要導入一個jar包外,還需要導入一個 配置文件,即如下2個文件。

          mysql數據庫工具_mysql數據庫設計工具_mysql數據庫工具軟件

          Druid下載:druid-1.0.9-Java文檔類資源-CSDN文庫

          (2)編寫 druid. 配置文件。打開 druid. ,將里面與數據庫連接相關的參數修改為自己的。Druid會根據這個配置文件中的參數連接你的mysql數據庫。

          【注意】該配置文件需放在 src 目錄下。

          driverClassName=com.mysql.cj.jdbc.Driver
          url=jdbc:mysql://localhost:3306/db1
          username=root
          password=root
          initialSize=5
          maxActive=10
          maxWait=3000
          filters=stat
          timeBetweenEvictionRunsMillis=60000
          minEvictableIdleTimeMillis=300000
          validationQuery=SELECT 1
          testWhileIdle=true
          testOnBorrow=false
          testOnReturn=false
          poolPreparedStatements=false
          maxPoolPreparedStatementPerConnectionSize=200

          (3)創建 類,編寫相關代碼。

          import com.alibaba.druid.pool.DruidDataSourceFactory;
          import javax.sql.DataSource;
          import java.sql.Connection;
          import java.util.Properties;
          public class DruidDemo1 {
              public static void main(String[] args) throws Exception {
                  // 創建數據庫連接池對象
                  Properties p = new Properties();
                  p.load(DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties"));
                  DataSource dataSource = DruidDataSourceFactory.createDataSource(p);
                  // 獲取數據庫連接對象
                  Connection conn = dataSource.getConnection();
                  System.out.println(conn);
                  // 歸還連接
                  conn.close();
              }
          }
          

          (4)同樣的,你也可以不編寫 druid. 配置文件,直接在代碼中設置數據庫連接相關參數。創建 類,編寫相關代碼。

          import com.alibaba.druid.pool.DruidDataSource;
          import java.sql.Connection;
          public class DruidDemo2 {
              public static void main(String[] args) throws Exception {
                  // 創建數據庫連接池對象
                  DruidDataSource dataSource = new DruidDataSource();
                  // 配置參數信息
                  dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
                  dataSource.setUrl("jdbc:mysql://localhost:3306/db1");
                  dataSource.setUsername("root");
                  dataSource.setPassword("root");
                  // 獲取數據庫連接對象
                  Connection conn = dataSource.getConnection();
                  System.out.println(conn);
                  // 歸還連接
                  conn.close();
              }
          }

          4、編寫 Druid 工具類

          當然,你可以像上面的 一樣編寫 Druid 的工具類。工具類代碼放在Utils 目錄下。我這里使用的是編寫配置文件的方式,配置文件不用改變。

          package Utils;
          import com.alibaba.druid.pool.DruidDataSourceFactory;
          import javax.sql.DataSource;
          import java.sql.Connection;
          import java.sql.PreparedStatement;
          import java.sql.ResultSet;
          import java.sql.SQLException;
          import java.util.Properties;
          public class DruidUtils {
              public static DataSource dataSource;
              static {
                  try {
                      Properties p = new Properties();
                      p.load(DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
                      dataSource = DruidDataSourceFactory.createDataSource(p);
                  } catch (Exception e) {
                      throw new RuntimeException(e);
                  }
              }
              // 獲取數據庫連接池對象的方法
              public static DataSource getDataSource() {
                  return dataSource;
              }
              // 獲取數據庫連接對象的方法
              public static Connection getConnection() throws Exception {
                  return dataSource.getConnection();
              }
              // 歸還數據庫連接對象的方法
              public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
                  try {
                      // 歸還數據庫連接對象
                      if (conn != null) conn.close();
                      // 釋放sql語句執行對象
                      if (ps != null) ps.close();
                      // 釋放查詢結果集
                      if (rs != null) rs.close();
                  } catch (SQLException e) {
                      throw new RuntimeException(e);
                  }
              }
          }
          

          使用:

          package Pool;
          import Utils.DruidUtils;
          import java.sql.Connection;
          import java.sql.PreparedStatement;
          import java.sql.ResultSet;
          public class DruidUtilsDemo3 {
              public static void main(String[] args) throws Exception {
                  // 獲取數據庫連接對象
                  Connection conn = DruidUtils.getConnection();
                  // 獲取執行sql語句執行對象
                  PreparedStatement ps = conn.prepareStatement("select * from user");
                  // 執行sql語句,獲得結果集
                  ResultSet rs = ps.executeQuery();
                  // 解析結果集
                  while (rs.next()) {
                      int id = rs.getInt("id");
                      String name = rs.getString("name");
                      String password = rs.getString("password");
                      System.out.println("id=" + id + ",name=" + name + ",password=" + password);
                  }
                  // 歸還連接,釋放sql語句執行對象、結果集
                  DruidUtils.close(conn,ps,rs);
              }
          }

          四、使用

          是由Spring框架對JDBC進行封裝的基于ORM思想的工具類,他可以幫助我們簡化代碼。

          1.ORM 對象關系映射思想(Object Mapping)

          以我們瀏覽網站為例,當我們向網站的服務器發送請求(例如登錄操作),服務器會收到我們請求相關的信息(例如登錄的用戶名、密碼)。ORM的思想是先將這些信息封裝到一個名為user的類中,這個類中的字段比如id,name,等,會和數據庫中表的列名一一對應。通過JDBC的解封裝、反射等技術,將數據傳遞給數據庫以及返回給服務器。

          mysql數據庫設計工具_mysql數據庫工具_mysql數據庫工具軟件

          2、簡單使用

          (1)導入jar包。需要導入5個包,包名如下:

          mysql數據庫工具_mysql數據庫設計工具_mysql數據庫工具軟件

          下載:-Java文檔類資源-CSDN文庫

          (2)創建 User 類,類中的字段 和 你的數據庫里面的表 一一對應。這段代碼推薦使用工具自動生成,盡量不要自己寫。

          public class User {
              private int id;
              private String name;
              private String password;
              public User() {
              }
              public User(int id, String name, String password) {
                  this.id = id;
                  this.name = name;
                  this.password = password;
              }
              public void setId(int id) {
                  this.id = id;
              }
              public void setName(String name) {
                  this.name = name;
              }
              public void setPassword(String password) {
                  this.password = password;
              }
              public int getId() {
                  return id;
              }
              public String getName() {
                  return name;
              }
              public String getPassword() {
                  return password;
              }
              @Override
              public String toString() {
                  return "User{" + "id=" + id + ", name='" + name + '\'' + ", password='" + password + '\'' + '}';
              }
          }
          

          【注意】不要忘記無參構造!不要忘記漏了setXXX()、getXXX()方法!

          (3)創建 類,編寫相關代碼

          (4)創建數據庫連接池對象(C3P0或者Druid)

          C3P0:

          DataSource dataSource = new ComboPooledDataSource();

          Druid:

          Properties p = new Properties();
          p.load(JdbcTemplateDemo.class.getClassLoader().getResourceAsStream("druid.properties"));
          DataSource dataSource = DruidDataSourceFactory.createDataSource(p);

          (5)創建對象,將數據庫連接池對象封裝到對象

          方式1:通過的有參構造賦值

          mysql數據庫工具軟件_mysql數據庫設計工具_mysql數據庫工具

          JdbcTemplate jt = new JdbcTemplate(dataSource);

          方式2:通過的方法賦值

          JdbcTemplate jt = new JdbcTemplate();
          jt.setDataSource(dataSource);

          (6)執行 sql 語句

          增刪改:

          User user = new User(1,"admin","1234");
          jt.update("insert into user value (?,?,?)",user.getId(),user.getName(),user.getPassword());
          jt.update("update user set name = ? where id = ?", user.getName(), user.getId());
          jt.update("delete from user where id = ?", user.getId());

          查:

          int id = 1; // 僅為簡單示范
          User user = jt.queryForObject("select * from user where id = ?",new BeanPropertyRowMapper<>(User.class),id);
          System.out.println(user);

          List users = jt.query("select * from user", new BeanPropertyRowMapper<>(User.class));
          for (User a : users) System.out.println(a);

          int id = 1; // 僅為簡單示范
          String name = jt.queryForObject("select name from user where id = ?", String.class, id);
          System.out.println(name);

          int count = jt.queryForObject("select count(*) from user",int.class);
          System.out.println(count);

          (7)所有代碼:

          import com.mchange.v2.c3p0.ComboPooledDataSource;
          import org.springframework.jdbc.core.BeanPropertyRowMapper;
          import org.springframework.jdbc.core.JdbcTemplate;
          import javax.sql.DataSource;
          import java.util.List;
          public class JdbcTemplateDemo {
              public static void main(String[] args) throws Exception {
                  // 1.創建數據庫連接池對象
                  /* C3P0 */
                  DataSource dataSource = new ComboPooledDataSource();
                  /* Druid */
                  /*
                  Properties p = new Properties();
                  p.load(JdbcTemplateDemo.class.getClassLoader().getResourceAsStream("druid.properties"));
                  DataSource dataSource = DruidDataSourceFactory.createDataSource(p);
                  */
                  // 2.創建 JdbcTemplate 對象,將數據庫連接池封裝到 JdbcTemplate 對象
                  /* 方法一 : 提供有參構造賦值 */
                  // JdbcTemplate jt = new JdbcTemplate(dataSource);
                  /* 方法二 : 通過setDataSource賦值 */
                  JdbcTemplate jt = new JdbcTemplate();
                  jt.setDataSource(dataSource);
                  // 3.執行 sql 語句
                  /* 增刪改 */
                  User user1 = new User(1,"admin","1234");  // 僅為簡單示范
                  jt.update("insert into user value (?,?,?)", user1.getId(), user1.getName(),user1.getPassword());
                  jt.update("update user set name = ? where id = ?", user1.getName(), user1.getId());
                  jt.update("delete from user where id = ?", user1.getId());
                  /* 查 */
                  // 查詢一條數據
                  int id = 1; // 僅為簡單示范
                  User user2 = jt.queryForObject("select * from user where id = ?",new BeanPropertyRowMapper<>(User.class),id);
                  System.out.println(user2);
                  // 查詢多條記錄
                  List users = jt.query("select * from user", new BeanPropertyRowMapper<>(User.class));
                  for (User a : users) System.out.println(a);
                  // 查詢一個數據 : 查詢 id=1 的 name 值
                  String name = jt.queryForObject("select name from user where id = ?", String.class, 1);
                  System.out.println(name);
                  // 查詢一個數據 : 查詢表中有多少條記錄
                  int count = jt.queryForObject("select count(*) from user",int.class);
                  System.out.println(count);
              }
          }

          public class User {
              private int id;
              private String name;
              private String password;
              public User() {
              }
              public User(int id, String name, String password) {
                  this.id = id;
                  this.name = name;
                  this.password = password;
              }
              public void setId(int id) {
                  this.id = id;
              }
              public void setName(String name) {
                  this.name = name;
              }
              public void setPassword(String password) {
                  this.password = password;
              }
              public int getId() {
                  return id;
              }
              public String getName() {
                  return name;
              }
              public String getPassword() {
                  return password;
              }
              @Override
              public String toString() {
                  return "User{" + "id=" + id + ", name='" + name + '\'' + ", password='" + password + '\'' + '}';
              }
          }

          3、實際項目中的使用

          項目結構:

          mysql數據庫工具_mysql數據庫設計工具_mysql數據庫工具軟件

          mysql數據庫設計工具_mysql數據庫工具軟件_mysql數據庫工具

          (1)UserDao類

          import java.util.List;
          public interface UserDao {
              // 添加用戶
              void add(User user);
              // 修改用戶
              void update(User user);
              // 刪除用戶
              void delete(int id);
              // 查詢所有
              List findAll();
              // 查詢一條數據
              User findById(int id);
          }

          (2)類

          import Utils.DruidUtils;
          import org.springframework.jdbc.core.BeanPropertyRowMapper;
          import org.springframework.jdbc.core.JdbcTemplate;
          import java.util.List;
          public class UserDaoImpl implements UserDao {
              // 創建 JdbcTemplate 對象
              private final JdbcTemplate jt = new JdbcTemplate(DruidUtils.getDataSource());
              @Override
              public void add(User user) {
                  jt.update("insert into user values(?,?,?)", user.getId(), user.getName(), user.getPassword());
              }
              @Override
              public void update(User user) {
                  jt.update("update user set name = ?,password = ? where id = ?", user.getName(), user.getPassword(), user.getId());
              }
              @Override
              public void delete(int id) {
                  jt.update("delete from user where id = ?", id);
              }
              @Override
              public List findAll() {
                  List users = jt.query("select * from user", new BeanPropertyRowMapper<>(User.class));
                  return users;
              }
              @Override
              public User findById(int id) {
                  User user = jt.queryForObject("select * from user where id = ?", new BeanPropertyRowMapper<>(User.class), id);
                  return user;
              }
          }

          (3)User 類

          import java.io.Serializable;
          public class User implements Serializable {
              private int id;
              private String name;
              private String password;
              public User() {
              }
              public User(int id, String name, String password) {
                  this.id = id;
                  this.name = name;
                  this.password = password;
              }
              public void setId(int id) {
                  this.id = id;
              }
              public void setName(String name) {
                  this.name = name;
              }
              public void setPassword(String password) {
                  this.password = password;
              }
              public int getId() {
                  return id;
              }
              public String getName() {
                  return name;
              }
              public String getPassword() {
                  return password;
              }
              @Override
              public String toString() {
                  return "User{" + "id=" + id + ", name='" + name + '\'' + ", password='" + password + '\'' + '}';
              }
          }
          

          (4) 類

          import com.alibaba.druid.pool.DruidDataSourceFactory;
          import javax.sql.DataSource;
          import java.sql.Connection;
          import java.sql.PreparedStatement;
          import java.sql.ResultSet;
          import java.sql.SQLException;
          import java.util.Properties;
          public class DruidUtils {
              public static DataSource dataSource;
              static {
                  try {
                      Properties p = new Properties();
                      p.load(DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
                      dataSource = DruidDataSourceFactory.createDataSource(p);
                  } catch (Exception e) {
                      throw new RuntimeException(e);
                  }
              }
              // 獲取數據庫連接池對象的方法
              public static DataSource getDataSource() {
                  return dataSource;
              }
              // 獲取數據庫連接對象的方法
              public static Connection getConnection() throws Exception {
                  return dataSource.getConnection();
              }
              // 歸還數據庫連接對象的方法
              public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
                  try {
                      // 歸還數據庫連接對象
                      if (conn != null) conn.close();
                      // 釋放sql語句執行對象
                      if (ps != null) ps.close();
                      // 釋放查詢結果集
                      if (rs != null) rs.close();
                  } catch (SQLException e) {
                      throw new RuntimeException(e);
                  }
              }
          }
          

          (5) 類

          import org.junit.Test;
          import java.util.List;
          public class UserTest {
              // 創建 Dao 對象
              private final UserDao userDao = new UserDaoImpl();
              @Test
              public void add() {
                  User user = new User(1, "ketty", "eee");
                  userDao.add(user);
              }
              @Test
              public void update() {
                  User user = new User(1, "hello", "root");
                  userDao.update(user);
              }
              @Test
              public void delete() {
                  userDao.delete(1);
              }
              @Test
              public void findAll() {
                  List users = userDao.findAll();
                  for (User a : users) {
                      System.out.println(a);
                  }
              }
              @Test
              public void findById() {
                  User user = userDao.findById(1);
                  System.out.println(user);
              }

          類中使用了 JUnit 的 @Test ,以便更快進行測試。你也可以在main方法中進行測試。


          主站蜘蛛池模板: 免费看一区二区三区四区| 精品亚洲AV无码一区二区三区 | 精品无码一区二区三区水蜜桃| 日韩人妻无码一区二区三区综合部| 免费无码VA一区二区三区| 一区二区日韩国产精品| 国产午夜精品一区二区三区极品 | 国产一区二区精品| 免费萌白酱国产一区二区| 78成人精品电影在线播放日韩精品电影一区亚洲 | 一本岛一区在线观看不卡| 无码中文字幕乱码一区| 中文字幕在线看视频一区二区三区| 亚洲中文字幕丝袜制服一区 | 国产伦精品一区二区三区四区 | 一区二区三区视频在线观看| 合区精品久久久中文字幕一区 | 亚洲国产综合无码一区二区二三区| 狠狠色综合一区二区| 亚洲国产综合精品中文第一区| 中文字幕一区二区三| 亚洲国产精品一区二区第四页| 成人精品一区二区三区电影| 精品国产a∨无码一区二区三区| 久久久精品人妻一区亚美研究所 | 日本一区二区三区爆乳| 91秒拍国产福利一区| 亚洲福利视频一区二区三区| 午夜福利一区二区三区在线观看| 国产午夜精品一区二区三区小说| 美女视频黄a视频全免费网站一区 美女免费视频一区二区 | 婷婷亚洲综合一区二区| 好吊妞视频一区二区| 成人精品一区二区三区校园激情| 久久精品无码一区二区三区免费| 亚洲综合一区无码精品| 少妇一夜三次一区二区| 在线视频精品一区| 国产在线观看91精品一区| 精品乱人伦一区二区| 中文无码AV一区二区三区|