Jelajahi Sumber

jdbc 代码

fanjialong 6 jam lalu
induk
melakukan
911e002c09
34 mengubah file dengan 1205 tambahan dan 0 penghapusan
  1. 29 0
      jdbc-advance-demo/.gitignore
  2. 8 0
      jdbc-advance-demo/.idea/.gitignore
  3. 8 0
      jdbc-advance-demo/.idea/compiler.xml
  4. 8 0
      jdbc-advance-demo/.idea/inspectionProfiles/Project_Default.xml
  5. 10 0
      jdbc-advance-demo/.idea/libraries/lib.xml
  6. 6 0
      jdbc-advance-demo/.idea/misc.xml
  7. 8 0
      jdbc-advance-demo/.idea/modules.xml
  8. 6 0
      jdbc-advance-demo/.idea/vcs.xml
  9. 13 0
      jdbc-advance-demo/jdbc-advance-demo.iml
  10. TEMPAT SAMPAH
      jdbc-advance-demo/lib/druid-1.0.9.jar
  11. TEMPAT SAMPAH
      jdbc-advance-demo/lib/hamcrest-core-1.3.jar
  12. TEMPAT SAMPAH
      jdbc-advance-demo/lib/junit-4.13.jar
  13. TEMPAT SAMPAH
      jdbc-advance-demo/lib/lombok-1.18.30.jar
  14. TEMPAT SAMPAH
      jdbc-advance-demo/lib/mysql-connector-java-5.1.48.jar
  15. 4 0
      jdbc-advance-demo/resources/db.properties
  16. 13 0
      jdbc-advance-demo/src/com/sf/dao/AccountDAO.java
  17. 28 0
      jdbc-advance-demo/src/com/sf/dao/EmpDAO.java
  18. 61 0
      jdbc-advance-demo/src/com/sf/dao/ProductDAO.java
  19. 36 0
      jdbc-advance-demo/src/com/sf/dao/StudentDAO.java
  20. 59 0
      jdbc-advance-demo/src/com/sf/dao/impl/AccountDAOImpl.java
  21. 135 0
      jdbc-advance-demo/src/com/sf/dao/impl/EmpDAOImpl.java
  22. 195 0
      jdbc-advance-demo/src/com/sf/dao/impl/ProductDAOImpl.java
  23. 158 0
      jdbc-advance-demo/src/com/sf/dao/impl/StudentDAOImpl.java
  24. 17 0
      jdbc-advance-demo/src/com/sf/domain/Account.java
  25. 14 0
      jdbc-advance-demo/src/com/sf/domain/Dept.java
  26. 22 0
      jdbc-advance-demo/src/com/sf/domain/Emp.java
  27. 22 0
      jdbc-advance-demo/src/com/sf/domain/Product.java
  28. 16 0
      jdbc-advance-demo/src/com/sf/domain/Student.java
  29. 16 0
      jdbc-advance-demo/src/com/sf/test/AccountTest.java
  30. 35 0
      jdbc-advance-demo/src/com/sf/test/DruidTest.java
  31. 36 0
      jdbc-advance-demo/src/com/sf/test/EmpTest.java
  32. 86 0
      jdbc-advance-demo/src/com/sf/test/ProductTest.java
  33. 85 0
      jdbc-advance-demo/src/com/sf/test/StudentJDBCTest.java
  34. 71 0
      jdbc-advance-demo/src/com/sf/util/JDBCUtil.java

+ 29 - 0
jdbc-advance-demo/.gitignore

@@ -0,0 +1,29 @@
+### IntelliJ IDEA ###
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store

+ 8 - 0
jdbc-advance-demo/.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml

+ 8 - 0
jdbc-advance-demo/.idea/compiler.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile default="true" name="Default" enabled="true" />
+    </annotationProcessing>
+  </component>
+</project>

+ 8 - 0
jdbc-advance-demo/.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,8 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="AutoCloseableResource" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,java.lang.ClassLoader,getResourceAsStream" />
+    </inspection_tool>
+  </profile>
+</component>

+ 10 - 0
jdbc-advance-demo/.idea/libraries/lib.xml

@@ -0,0 +1,10 @@
+<component name="libraryTable">
+  <library name="lib">
+    <CLASSES>
+      <root url="file://$PROJECT_DIR$/lib" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+    <jarDirectory url="file://$PROJECT_DIR$/lib" recursive="false" />
+  </library>
+</component>

+ 6 - 0
jdbc-advance-demo/.idea/misc.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 8 - 0
jdbc-advance-demo/.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/jdbc-advance-demo.iml" filepath="$PROJECT_DIR$/jdbc-advance-demo.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
jdbc-advance-demo/.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>

+ 13 - 0
jdbc-advance-demo/jdbc-advance-demo.iml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="lib" level="project" />
+  </component>
+</module>

TEMPAT SAMPAH
jdbc-advance-demo/lib/druid-1.0.9.jar


TEMPAT SAMPAH
jdbc-advance-demo/lib/hamcrest-core-1.3.jar


TEMPAT SAMPAH
jdbc-advance-demo/lib/junit-4.13.jar


TEMPAT SAMPAH
jdbc-advance-demo/lib/lombok-1.18.30.jar


TEMPAT SAMPAH
jdbc-advance-demo/lib/mysql-connector-java-5.1.48.jar


+ 4 - 0
jdbc-advance-demo/resources/db.properties

@@ -0,0 +1,4 @@
+driverClassName=com.mysql.jdbc.Driver
+url=jdbc:mysql:///jdbc_demo
+username=root
+password=admin

+ 13 - 0
jdbc-advance-demo/src/com/sf/dao/AccountDAO.java

@@ -0,0 +1,13 @@
+package com.sf.dao;
+
+import java.math.BigDecimal;
+
+public interface AccountDAO {
+    /**
+     *
+     * @param fromName   转账来源的名称
+     * @param toName     转给谁
+     * @param money      转账金额
+     */
+    void trans(String fromName, String toName, BigDecimal money);
+}

+ 28 - 0
jdbc-advance-demo/src/com/sf/dao/EmpDAO.java

@@ -0,0 +1,28 @@
+package com.sf.dao;
+
+import com.sf.domain.Emp;
+
+import java.util.List;
+
+public interface EmpDAO {
+
+    /**
+     * 查询薪资在800 - 1500 的emp员工信息
+     * List<Emp> 方法名(BigDemail min,BigDecmail max);
+     */
+    List<Emp> queryEmpsByMaxAndMin(Double max,Double min);
+
+    /**
+     * 查询员工的信息和 部门的信息(注意这个涉及到连表查询)
+     * Emp 中包含一个字段叫dept, 查询完以后需要封装emp 的基本信息和emp 中的dept 的信息
+     * List<Emp> 方法名(无参数);
+     */
+    List<Emp> selectList();
+
+    /**
+     *  查询名字中包含A 的员工信息 并且进行分页
+     *
+     *  List<Emp> 方法名(String key,Integer curretnPage ,Integer pageSize);
+     */
+    List<Emp> queryEmpsByKey(String key,Integer currentPage,Integer pageSize);
+}

+ 61 - 0
jdbc-advance-demo/src/com/sf/dao/ProductDAO.java

@@ -0,0 +1,61 @@
+package com.sf.dao;
+
+import com.sf.domain.Product;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public interface ProductDAO {
+    /**
+     * 新增商品
+     */
+    void insert(Product product);
+
+
+    /**
+     * 更新商品
+     */
+    void update(Product product);
+
+
+    /**
+     * 根据id 删除
+     */
+    void delete(Long id);
+
+    /**
+     * 根据id 查询单个商品信息
+     */
+    Product get(Long id);
+
+
+    /**
+     * 查询所有商品
+     */
+    List<Product> list();
+
+
+    /**
+     * 按照零售价进行降序,查询商品salePrice价格大于80
+     * List<Product> 方法名(BigDecmail price);
+     */
+    List<Product> queryProductsByPrice(BigDecimal price);
+
+    /**
+     * 查询薪资在800 - 1500 的emp员工信息
+     * List<Emp> 方法名(BigDemail min,BigDecmail max);
+     */
+
+    /**
+     * 查询员工的信息和 部门的信息(注意这个涉及到连表查询)
+     * Emp 中包含一个字段叫dept, 查询完以后需要封装emp 的基本信息和emp 中的dept 的信息
+     * List<Emp> 方法名(无参数);
+     */
+
+    /**
+     *  查询名字中包含A 的员工信息 并且进行分页
+     *  List<Emp> 方法名(String name,Integer curretnPage ,Integer pageSize);
+     */
+}
+
+

+ 36 - 0
jdbc-advance-demo/src/com/sf/dao/StudentDAO.java

@@ -0,0 +1,36 @@
+package com.sf.dao;
+
+
+import com.sf.domain.Student;
+
+import java.util.List;
+
+public interface StudentDAO {
+    /**
+     * 新增学生方法
+     */
+    void save(Student student);
+
+
+    /**
+     * 更新学生方法
+     * @param student
+     */
+    void update(Student student);
+
+    /**
+     * 根据id 删除
+     */
+    void delete(Long id);
+
+    /**
+     * 根据id 查询单个学生信息
+     */
+    Student get(Long id);
+
+
+    /**
+     * 查询数据库当中所有的学生信息
+     */
+    List<Student> list();
+}

+ 59 - 0
jdbc-advance-demo/src/com/sf/dao/impl/AccountDAOImpl.java

@@ -0,0 +1,59 @@
+package com.sf.dao.impl;
+
+import com.sf.dao.AccountDAO;
+import com.sf.util.JDBCUtil;
+
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class AccountDAOImpl implements AccountDAO {
+    @Override
+    public void trans(String fromName, String toName, BigDecimal money) {
+        // 1 判断转账人的账户钱是否充足
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        try {
+            // 设置受手动提交事务
+            conn.setAutoCommit(false);
+            // 直接查询账户余额信息 20000   自己if 判断 money  > 20000
+            preparedStatement = conn.prepareStatement("select * from account where name=? and balance >= ?");
+            preparedStatement.setString(1,fromName);
+            preparedStatement.setBigDecimal(2,money);
+            // 执行sql
+            resultSet = preparedStatement.executeQuery();
+            if(!resultSet.next()){
+                System.out.println("账户余额不足");
+                return;
+            }
+            // 2 如果充足减少钱
+            preparedStatement = conn.prepareStatement("update account set balance = balance - ? where name=?");
+            preparedStatement.setBigDecimal(1,money);
+            preparedStatement.setString(2,fromName);
+            preparedStatement.executeUpdate();
+            // 网络终端 或者其他原因
+            int i = 1/0;
+            // 3 给收款人加钱
+            preparedStatement = conn.prepareStatement("update account set balance = balance + ? where name=?");
+            preparedStatement.setBigDecimal(1,money);
+            preparedStatement.setString(2,toName);
+            preparedStatement.executeUpdate();
+            // 提交事务
+            conn.commit();
+        } catch (SQLException e) {
+            // 回滚事务
+            try {
+                conn.rollback();
+            } catch (SQLException ex) {
+                throw new RuntimeException(ex);
+            }
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(conn,preparedStatement,resultSet);
+        }
+
+    }
+}

+ 135 - 0
jdbc-advance-demo/src/com/sf/dao/impl/EmpDAOImpl.java

@@ -0,0 +1,135 @@
+package com.sf.dao.impl;
+
+import com.sf.dao.EmpDAO;
+import com.sf.domain.Dept;
+import com.sf.domain.Emp;
+import com.sf.domain.Product;
+import com.sf.util.JDBCUtil;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+
+public class EmpDAOImpl implements EmpDAO {
+    @Override
+    public List<Emp> queryEmpsByMaxAndMin(Double max, Double min) {
+        //1 加载驱动
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建预编译语句对象
+            preparedStatement = connection.
+                    prepareStatement("select * from emp where sal between ? and ?");
+            preparedStatement.setDouble(1,min);
+            preparedStatement.setDouble(2,max);
+            //4 执行sql
+            resultSet = preparedStatement.executeQuery();
+            List<Emp> list = new ArrayList<>();
+            // 判断查询是否有结果   next()
+            while (resultSet.next()){
+                Emp emp = new Emp();
+                emp.setComm(resultSet.getDouble("comm"));
+                emp.setEmpno(resultSet.getLong("empno"));
+                emp.setJob(resultSet.getString("job"));
+//                emp.setDeptno(resultSet.getLong("deptno"));
+                emp.setEname(resultSet.getString("ename"));
+                emp.setMgr(resultSet.getLong("mgr"));
+                emp.setSal(resultSet.getDouble("sal"));
+                emp.setHiredate(resultSet.getDate("hiredate"));
+                list.add(emp);
+            }
+            return list;
+            //5 释放资源
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,preparedStatement,resultSet);
+        }
+    }
+
+    @Override
+    public List<Emp> selectList() {
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建预编译语句对象
+            preparedStatement = connection.
+                    prepareStatement("select e.* ,d.dname ,d.deptno ,d.loc " +
+                            "from emp e join dept d on (e.deptno = d.deptno)");
+            //4 执行sql
+            resultSet = preparedStatement.executeQuery();
+            List<Emp> list = new ArrayList<>();
+            // 判断查询是否有结果   next()
+            while (resultSet.next()){
+                Emp emp = new Emp();
+                emp.setComm(resultSet.getDouble("comm"));
+                emp.setEmpno(resultSet.getLong("empno"));
+                emp.setJob(resultSet.getString("job"));
+//                emp.setDeptno(resultSet.getLong("deptno"));
+                emp.setEname(resultSet.getString("ename"));
+                emp.setMgr(resultSet.getLong("mgr"));
+                emp.setSal(resultSet.getDouble("sal"));
+                emp.setHiredate(resultSet.getDate("hiredate"));
+
+                // 设置部门信息
+                Dept dept = new Dept();
+                dept.setDname(resultSet.getString("dname"));
+                dept.setLoc(resultSet.getString("loc"));
+                dept.setDeptno(resultSet.getLong("deptno"));
+                // 把部门设置到emp 当中
+                emp.setDept(dept);
+                list.add(emp);
+            }
+            return list;
+            //5 释放资源
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,preparedStatement,resultSet);
+        }
+    }
+
+    @Override
+    public List<Emp> queryEmpsByKey(String key, Integer currentPage, Integer pageSize) {
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建预编译语句对象
+            preparedStatement = connection.
+                    prepareStatement("select * from emp where ename like ? limit ?,?");
+            preparedStatement.setString(1,"%"+key+"%");
+            preparedStatement.setInt(2,(currentPage-1)* pageSize);
+            preparedStatement.setInt(3,pageSize);
+            //4 执行sql
+            resultSet = preparedStatement.executeQuery();
+            List<Emp> list = new ArrayList<>();
+            // 判断查询是否有结果   next()
+            while (resultSet.next()){
+                Emp emp = new Emp();
+                emp.setComm(resultSet.getDouble("comm"));
+                emp.setEmpno(resultSet.getLong("empno"));
+                emp.setJob(resultSet.getString("job"));
+//                emp.setDeptno(resultSet.getLong("deptno"));
+                emp.setEname(resultSet.getString("ename"));
+                emp.setMgr(resultSet.getLong("mgr"));
+                emp.setSal(resultSet.getDouble("sal"));
+                emp.setHiredate(resultSet.getDate("hiredate"));
+                list.add(emp);
+            }
+            return list;
+            //5 释放资源
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,preparedStatement,resultSet);
+        }
+    }
+}

+ 195 - 0
jdbc-advance-demo/src/com/sf/dao/impl/ProductDAOImpl.java

@@ -0,0 +1,195 @@
+package com.sf.dao.impl;
+
+import com.sf.dao.ProductDAO;
+import com.sf.domain.Product;
+import com.sf.util.JDBCUtil;
+
+import java.math.BigDecimal;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProductDAOImpl implements ProductDAO {
+    @Override
+    public void insert(Product product) {
+        //1 加载驱动
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建预编译语句对象
+             preparedStatement = connection.prepareStatement("insert into product " +
+                    "(productName,dir_id,salePrice,supplier,brand,cutoff,costPrice) values(?,?,?,?,?,?,?)");
+            preparedStatement.setString(1,product.getProductName());
+            preparedStatement.setLong(2,product.getDir_id());
+            preparedStatement.setBigDecimal(3,product.getSalePrice());
+            preparedStatement.setString(4,product.getSupplier());
+            preparedStatement.setString(5,product.getBrand());
+            preparedStatement.setDouble(6,product.getCutoff());
+            preparedStatement.setBigDecimal(7,product.getCostPrice());
+            //4 执行sql
+            preparedStatement.executeUpdate();
+            //5 释放资源
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,preparedStatement,null);
+        }
+
+    }
+
+    @Override
+    public void update(Product product) {
+        //1 加载驱动
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建预编译语句对象
+            preparedStatement = connection.prepareStatement("update product " +
+                    "set productName=?,dir_id=?,salePrice=?,supplier=?,brand=?,cutoff=?,costPrice=? where id=?");
+            preparedStatement.setString(1,product.getProductName());
+            preparedStatement.setLong(2,product.getDir_id());
+            preparedStatement.setBigDecimal(3,product.getSalePrice());
+            preparedStatement.setString(4,product.getSupplier());
+            preparedStatement.setString(5,product.getBrand());
+            preparedStatement.setDouble(6,product.getCutoff());
+            preparedStatement.setBigDecimal(7,product.getCostPrice());
+            preparedStatement.setLong(8,product.getId());
+            //4 执行sql
+            preparedStatement.executeUpdate();
+            //5 释放资源
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,preparedStatement,null);
+        }
+    }
+
+    @Override
+    public void delete(Long id) {
+        //1 加载驱动
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建预编译语句对象
+            preparedStatement = connection.prepareStatement("delete from product where id = ?");
+            preparedStatement.setLong(1,id);
+            //4 执行sql
+            preparedStatement.executeUpdate();
+            //5 释放资源
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,preparedStatement,null);
+        }
+    }
+
+    @Override
+    public Product get(Long id) {
+        //1 加载驱动
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建预编译语句对象
+            preparedStatement = connection.prepareStatement("select * from product where id = ?");
+            preparedStatement.setLong(1,id);
+            //4 执行sql
+             resultSet = preparedStatement.executeQuery();
+            // 判断查询是否有结果   next()
+            if(resultSet.next()){
+                Product product = new Product();
+                product.setId(resultSet.getLong("id"));
+                product.setProductName(resultSet.getString("productName"));
+                product.setDir_id(resultSet.getLong("dir_id"));
+                product.setSalePrice(resultSet.getBigDecimal("salePrice"));
+                product.setSupplier(resultSet.getString("supplier"));
+                product.setBrand(resultSet.getString("brand"));
+                product.setCutoff(resultSet.getDouble("cutoff"));
+                product.setCostPrice(resultSet.getBigDecimal("costPrice"));
+                return product;
+            }
+            return null;
+            //5 释放资源
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,preparedStatement,resultSet);
+        }
+    }
+
+    @Override
+    public List<Product> list() {
+        //1 加载驱动
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建预编译语句对象
+            preparedStatement = connection.prepareStatement("select * from product ");
+            //4 执行sql
+            resultSet = preparedStatement.executeQuery();
+            List<Product> list = new ArrayList<>();
+            // 判断查询是否有结果   next()
+            while (resultSet.next()){
+                Product product = new Product();
+                product.setId(resultSet.getLong("id"));
+                product.setProductName(resultSet.getString("productName"));
+                product.setDir_id(resultSet.getLong("dir_id"));
+                product.setSalePrice(resultSet.getBigDecimal("salePrice"));
+                product.setSupplier(resultSet.getString("supplier"));
+                product.setBrand(resultSet.getString("brand"));
+                product.setCutoff(resultSet.getDouble("cutoff"));
+                product.setCostPrice(resultSet.getBigDecimal("costPrice"));
+                list.add(product);
+            }
+            return list;
+            //5 释放资源
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,preparedStatement,resultSet);
+        }
+    }
+
+    @Override
+    public List<Product> queryProductsByPrice(BigDecimal price) {
+        //1 加载驱动
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建预编译语句对象
+            preparedStatement = connection.
+                    prepareStatement("select * from product where salePrice>? order by salePrice desc");
+            preparedStatement.setBigDecimal(1,price);
+            //4 执行sql
+            resultSet = preparedStatement.executeQuery();
+            List<Product> list = new ArrayList<>();
+            // 判断查询是否有结果   next()
+            while (resultSet.next()){
+                Product product = new Product();
+                product.setId(resultSet.getLong("id"));
+                product.setProductName(resultSet.getString("productName"));
+                product.setDir_id(resultSet.getLong("dir_id"));
+                product.setSalePrice(resultSet.getBigDecimal("salePrice"));
+                product.setSupplier(resultSet.getString("supplier"));
+                product.setBrand(resultSet.getString("brand"));
+                product.setCutoff(resultSet.getDouble("cutoff"));
+                product.setCostPrice(resultSet.getBigDecimal("costPrice"));
+                list.add(product);
+            }
+            return list;
+            //5 释放资源
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,preparedStatement,resultSet);
+        }
+    }
+}

+ 158 - 0
jdbc-advance-demo/src/com/sf/dao/impl/StudentDAOImpl.java

@@ -0,0 +1,158 @@
+package com.sf.dao.impl;
+
+
+import com.sf.dao.StudentDAO;
+import com.sf.domain.Student;
+import com.sf.util.JDBCUtil;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * JDBC 对于DAO 层实现类
+ */
+public class StudentDAOImpl implements StudentDAO {
+    @Override
+    public void save(Student student) {
+        //1 加载驱动
+        Connection connection = null;
+        PreparedStatement statement = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建语句对象
+//            statement = connection.createStatement();
+            statement = connection.prepareStatement("insert into t_student (name,age,email) values(?,?,?)");
+            statement.setString(1,student.getName());
+            statement.setInt(2,student.getAge());
+            statement.setString(3,student.getEmail());
+            //4 执行sql 语句
+            // statement   拼接字符串  可能会产生sql 注入问题
+            // li -si
+            statement.executeUpdate();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,statement,null);
+        }
+    }
+
+
+    @Override
+    public void update(Student student) {
+        //1 加载驱动
+        Connection connection = null;
+        PreparedStatement statement = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建语句对象
+//            statement = connection.createStatement();
+            statement = connection.prepareStatement("update t_student set name=?,age=?,email=? where id=?");
+            statement.setString(1,student.getName());
+            statement.setInt(2,student.getAge());
+            statement.setString(3,student.getEmail());
+            statement.setLong(4,student.getId());
+            //4 执行sql 语句
+            // statement   拼接字符串  可能会产生sql 注入问题
+            // li -si
+            statement.executeUpdate();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,statement,null);
+        }
+    }
+
+
+    @Override
+    public void delete(Long id) {
+        //1 加载驱动
+        Connection connection = null;
+        PreparedStatement statement = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建语句对象
+//            statement = connection.createStatement();
+            statement = connection.prepareStatement("delete from t_student where id=?");
+            statement.setLong(1,id);
+            //4 执行sql 语句
+            // statement   拼接字符串  可能会产生sql 注入问题
+            // li -si
+            statement.executeUpdate();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,statement,null);
+        }
+    }
+
+    @Override
+    public Student get(Long id) {
+        Connection connection = null;
+        PreparedStatement statement = null;
+        ResultSet resultSet = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建语句对象
+//            statement = connection.createStatement();
+            statement = connection.prepareStatement("select * from t_student where id=?");
+            statement.setLong(1,id);
+            //4 执行sql 语句
+            // statement   拼接字符串  可能会产生sql 注入问题
+            // li -si
+             resultSet = statement.executeQuery();
+            // resultSet 结果集, 从数据库当中查询数据都在resultSet 中
+            // 利用.next 判断是否查询到了数据.如果next为true 表示有数据 false 表示没有数据
+            if(resultSet.next()){
+                // 有数据,创建出来一个Student 对象 , 把数据库当中数据设置到student 对象当中
+                Student student = new Student();
+                student.setId(resultSet.getLong("id"));
+                student.setName(resultSet.getString("name"));
+                student.setEmail(resultSet.getString("email"));
+                student.setAge(resultSet.getInt("id"));
+                return student;
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,statement,resultSet);
+        }
+        return null;
+    }
+
+    @Override
+    public List<Student> list() {
+        Connection connection = null;
+        PreparedStatement statement = null;
+        ResultSet resultSet = null;
+        try {
+            connection = JDBCUtil.getConn();
+            //3 创建语句对象
+//            statement = connection.createStatement();
+            statement = connection.prepareStatement("select * from t_student ");
+            //4 执行sql 语句
+            // statement   拼接字符串  可能会产生sql 注入问题
+            // li -si
+            resultSet = statement.executeQuery();
+            List<Student> list = new ArrayList<>();
+            // resultSet 结果集, 从数据库当中查询数据都在resultSet 中
+            // 利用.next 判断是否查询到了数据.如果next为true 表示有数据 false 表示没有数据
+            while (resultSet.next()){
+                // 有数据,创建出来一个Student 对象 , 把数据库当中数据设置到student 对象当中
+                Student student = new Student();
+                student.setId(resultSet.getLong("id"));
+                student.setName(resultSet.getString("name"));
+                student.setEmail(resultSet.getString("email"));
+                student.setAge(resultSet.getInt("id"));
+                // 把学生信息添加到集合当中
+                list.add(student);
+            }
+            return list;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(connection,statement,resultSet);
+        }
+    }
+
+}

+ 17 - 0
jdbc-advance-demo/src/com/sf/domain/Account.java

@@ -0,0 +1,17 @@
+package com.sf.domain;
+
+import lombok.*;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class Account {
+    private Long id;
+    private String name;
+    private BigDecimal balance;
+
+}

+ 14 - 0
jdbc-advance-demo/src/com/sf/domain/Dept.java

@@ -0,0 +1,14 @@
+package com.sf.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Dept {
+    private Long deptno;
+    private String dname;
+    private String loc;
+}

+ 22 - 0
jdbc-advance-demo/src/com/sf/domain/Emp.java

@@ -0,0 +1,22 @@
+package com.sf.domain;
+
+import lombok.*;
+
+import java.util.Date;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class Emp {
+    private Long empno;
+    private String ename;
+    private String job;
+    private Long mgr;
+    private Date hiredate;
+    private Double sal;
+    private Double comm;
+    // deptno  dname  loc
+    private Dept dept;
+}

+ 22 - 0
jdbc-advance-demo/src/com/sf/domain/Product.java

@@ -0,0 +1,22 @@
+package com.sf.domain;
+
+import lombok.*;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class Product {
+    private Long id;
+    private String productName;
+    private Long dir_id;
+    private BigDecimal salePrice;
+    private String supplier;
+    private String brand;
+    private Double cutoff;
+    private BigDecimal costPrice;
+
+}

+ 16 - 0
jdbc-advance-demo/src/com/sf/domain/Student.java

@@ -0,0 +1,16 @@
+package com.sf.domain;
+
+import lombok.*;
+
+@Getter
+@Setter
+@ToString
+@AllArgsConstructor
+@NoArgsConstructor
+public class Student {
+    private Long id;
+    private String name;
+    private Integer age;
+    private String email;
+
+}

+ 16 - 0
jdbc-advance-demo/src/com/sf/test/AccountTest.java

@@ -0,0 +1,16 @@
+package com.sf.test;
+
+import com.sf.dao.AccountDAO;
+import com.sf.dao.impl.AccountDAOImpl;
+import org.junit.Test;
+
+import java.math.BigDecimal;
+
+public class AccountTest {
+
+    @Test
+    public void test(){
+        AccountDAO accountDAO = new AccountDAOImpl();
+        accountDAO.trans("zhangsan","lisi",new BigDecimal("1000"));
+    }
+}

+ 35 - 0
jdbc-advance-demo/src/com/sf/test/DruidTest.java

@@ -0,0 +1,35 @@
+package com.sf.test;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.pool.DruidDataSourceFactory;
+import org.junit.Test;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.SQLException;
+import java.util.Properties;
+
+public class DruidTest {
+
+    @Test
+    public void test() throws Exception {
+        InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
+        Properties properties = new Properties();
+        properties.load(inputStream);
+        //1 创建出来一个德鲁伊练级吃
+//        DruidDataSource dataSource = new DruidDataSource();
+        //2 设置连接四要素
+//        dataSource.setDriverClassName(properties.getProperty("driverClassName"));
+//        dataSource.setUsername(properties.getProperty("username"));
+//        dataSource.setPassword(properties.getProperty("password"));
+//        dataSource.setUrl(properties.getProperty("url"));
+        // 使用工具类去创建德鲁伊连接池
+        DruidDataSource dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
+        //3 设置初始化连接个数
+        dataSource.setInitialSize(5);
+        //4 从连接池中获取连接对象
+        System.out.println(dataSource.getConnection());
+    }
+
+}

+ 36 - 0
jdbc-advance-demo/src/com/sf/test/EmpTest.java

@@ -0,0 +1,36 @@
+package com.sf.test;
+
+import com.sf.dao.EmpDAO;
+import com.sf.dao.impl.EmpDAOImpl;
+import com.sf.domain.Emp;
+import org.junit.Test;
+
+import java.util.List;
+
+public class EmpTest {
+    @Test
+    public void test(){
+        EmpDAO empDAO = new EmpDAOImpl();
+        List<Emp> emps = empDAO.queryEmpsByMaxAndMin(1400.0, 800.0);
+        for (Emp emp : emps) {
+            System.out.println(emp);
+        }
+    }
+
+    @Test
+    public void test1(){
+        EmpDAO empDAO = new EmpDAOImpl();
+        for (Emp emp : empDAO.selectList()) {
+            System.out.println(emp);
+        }
+    }
+
+    @Test
+    public void test2(){
+        EmpDAO empDAO = new EmpDAOImpl();
+        List<Emp> emps = empDAO.queryEmpsByKey("A", 1, 3);
+        for (Emp emp : emps) {
+            System.out.println(emp);
+        }
+    }
+}

+ 86 - 0
jdbc-advance-demo/src/com/sf/test/ProductTest.java

@@ -0,0 +1,86 @@
+package com.sf.test;
+
+import com.sf.dao.ProductDAO;
+import com.sf.dao.impl.ProductDAOImpl;
+import com.sf.domain.Product;
+import com.sf.util.JDBCUtil;
+import org.junit.Test;
+
+import java.math.BigDecimal;
+import java.sql.*;
+import java.util.List;
+import java.util.Scanner;
+
+public class ProductTest {
+
+    @Test
+    public void testInsert(){
+        ProductDAO productDAO = new ProductDAOImpl();
+        Product product =
+                new Product(null,"ceshi",1L,new BigDecimal("10"),"测试","测试",0.1,new BigDecimal("10"));
+        productDAO.insert(product);
+    }
+
+    @Test
+    public void testUpdate(){
+        ProductDAO productDAO = new ProductDAOImpl();
+        Product product =
+                new Product(21L,"ceshi123",2L,new BigDecimal("100"),"测试","测试",0.1,new BigDecimal("10"));
+        productDAO.update(product);
+    }
+
+    @Test
+    public void testDelete(){
+        ProductDAO productDAO = new ProductDAOImpl();
+        productDAO.delete(21L);
+    }
+
+    @Test
+    public void testGet(){
+        ProductDAO productDAO = new ProductDAOImpl();
+        System.out.println(productDAO.get(1L));
+    }
+    @Test
+    public void testList(){
+        ProductDAO productDAO = new ProductDAOImpl();
+        for (Product product : productDAO.list()) {
+            System.out.println(product);
+        }
+    }
+
+    public static void main(String[] args) throws SQLException {
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请录入账号");
+        // next() 如果遇到空格   nextLine();
+        String username = scanner.nextLine();
+        System.out.println("请输入密码");
+        String password = scanner.nextLine();
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        // statement 有sql 注入问题
+//        String sql = "select * from t_user where name='"+username+"' and password='"+password+"'";
+        PreparedStatement statement = conn.prepareStatement("select * from t_user where name=? and password=?");
+        statement.setString(1,username);
+        statement.setString(2,password);
+        ResultSet resultSet = statement.executeQuery();
+        if(resultSet.next()){
+            System.out.println("登录成功");
+        }else{
+            System.out.println("登录失败");
+        }
+        // 关闭资源
+        conn.close();
+        statement.close();
+        resultSet.close();
+
+    }
+
+    @Test
+    public void test1(){
+        ProductDAO productDAO = new ProductDAOImpl();
+        List<Product> products = productDAO.queryProductsByPrice(new BigDecimal("300"));
+        for (Product product : products) {
+            System.out.println(product);
+        }
+    }
+}

+ 85 - 0
jdbc-advance-demo/src/com/sf/test/StudentJDBCTest.java

@@ -0,0 +1,85 @@
+package com.sf.test;
+
+import com.sf.dao.StudentDAO;
+import com.sf.dao.impl.StudentDAOImpl;
+import com.sf.domain.Student;
+import org.junit.Test;
+
+import java.sql.*;
+import java.util.Scanner;
+
+public class StudentJDBCTest {
+
+
+    @Test
+    public void test(){
+        System.out.println("注册");
+        // 插入一个学生
+        Student s= new Student(null,"zhangsan",10,"123@qq.com");
+        StudentDAO studentDAO = new StudentDAOImpl();
+        studentDAO.save(s);
+        System.out.println("注册后逻辑");
+    }
+
+
+    @Test
+    public void test1(){
+        System.out.println("批量处理");
+        // 插入一个学生
+        Student s= new Student(null,"zhangsan123",20,"123@qq.com");
+        StudentDAO studentDAO = new StudentDAOImpl();
+        studentDAO.save(s);
+        System.out.println("批量处理后逻辑");
+    }
+
+
+    @Test
+    public void test2(){
+        Student student = new Student(5L,"fanjialong123",20,"234@qq.com");
+        StudentDAO studentDAO = new StudentDAOImpl();
+        studentDAO.update(student);
+    }
+
+    @Test
+    public void test3(){
+        StudentDAO studentDAO = new StudentDAOImpl();
+        studentDAO.delete(5L);
+    }
+
+    @Test
+    public void test4(){
+        StudentDAO studentDAO = new StudentDAOImpl();
+        System.out.println(studentDAO.get(6L));
+    }
+
+
+    @Test
+    public void test5(){
+        StudentDAO studentDAO = new StudentDAOImpl();
+        for (Student student : studentDAO.list()) {
+            System.out.println(student);
+        }
+    }
+
+    @Test
+    public void test6() throws ClassNotFoundException, SQLException {
+    }
+
+    public static void main(String[] args) throws Exception {
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请录入账号");
+        String username = scanner.nextLine();
+        System.out.println("请录入密码");
+        String password = scanner.nextLine();
+
+        Class.forName("com.mysql.jdbc.Driver");
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbc_demo", "root", "admin");
+        PreparedStatement statement = connection.prepareStatement("select * from t_user where name=? and password=?");
+        statement.setString(1,username);
+        statement.setString(2,password);
+        ResultSet resultSet = statement.executeQuery();
+        if(resultSet.next()){
+            System.out.println("有数据");
+        }
+    }
+}

+ 71 - 0
jdbc-advance-demo/src/com/sf/util/JDBCUtil.java

@@ -0,0 +1,71 @@
+package com.sf.util;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.pool.DruidDataSourceFactory;
+
+import javax.sql.DataSource;
+import java.io.InputStream;
+import java.sql.*;
+import java.util.Properties;
+
+public class JDBCUtil {
+    static Properties properties = new Properties();
+    static DruidDataSource dataSource = null;
+    /**
+     * 静态代码块他只在类加载的时候执行一次  后续就不会执行正好符合我们要求
+     */
+    static {
+        // 加载驱动的这个操作其实只需要执行一次就可以了
+        try {
+            InputStream inputStream = Thread.currentThread().
+                    getContextClassLoader().
+                    getResourceAsStream("db.properties");
+            properties.load(inputStream);
+
+            /// 创建连接池
+            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    /**
+     * 获取连接对象方法
+     */
+    public static Connection getConn(){
+        try {
+            //2 获取连接对象
+            Connection connection = dataSource.getConnection();
+            return connection;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    /**
+     * 关闭资源
+     * @param connection
+     * @param preparedStatement
+     */
+    public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){
+        if(connection!=null){
+            try {
+                connection.close();
+            } catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        if(preparedStatement!=null){
+            try {
+                preparedStatement.close();
+            } catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        if(resultSet!=null){
+            try {
+                resultSet.close();
+            } catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+}