fanjialong 8 kuukautta sitten
vanhempi
commit
e337405347
22 muutettua tiedostoa jossa 1443 lisäystä ja 0 poistoa
  1. 260 0
      src/main/java/com/sf/day26/_01_jdbc/JDBTest.java
  2. 15 0
      src/main/java/com/sf/day26/_01_jdbc/domain/Student.java
  3. 5 0
      src/main/java/com/sf/day26/_01_jdbc/service/MyJDBCApi.java
  4. 12 0
      src/main/java/com/sf/day26/_01_jdbc/service/impl/MysqlApi.java
  5. 11 0
      src/main/java/com/sf/day26/_01_jdbc/service/impl/OracleApi.java
  6. 12 0
      src/main/java/com/sf/day26/_01_jdbc/service/impl/SqlServerApi.java
  7. 252 0
      src/main/java/com/sf/day27/_01_jdbc_concat/JDBCTest.java
  8. 210 0
      src/main/java/com/sf/day27/_01_jdbc_concat/JDBCTest1.java
  9. 15 0
      src/main/java/com/sf/day27/_01_jdbc_concat/domain/Integral.java
  10. 17 0
      src/main/java/com/sf/day27/_01_jdbc_concat/domain/Order.java
  11. 17 0
      src/main/java/com/sf/day27/_01_jdbc_concat/domain/Product.java
  12. 16 0
      src/main/java/com/sf/day27/_01_jdbc_concat/domain/User.java
  13. 88 0
      src/main/java/com/sf/day27/_02_dao/DAOTest.java
  14. 17 0
      src/main/java/com/sf/day27/_02_dao/dao/AccountDAO.java
  15. 10 0
      src/main/java/com/sf/day27/_02_dao/dao/OrderDAO.java
  16. 43 0
      src/main/java/com/sf/day27/_02_dao/dao/ProductDAO.java
  17. 100 0
      src/main/java/com/sf/day27/_02_dao/dao/impl/AccountDAOImpl.java
  18. 48 0
      src/main/java/com/sf/day27/_02_dao/dao/impl/OrderDAOImpl.java
  19. 244 0
      src/main/java/com/sf/day27/_02_dao/dao/impl/ProductDAOImpl.java
  20. 15 0
      src/main/java/com/sf/day27/_02_dao/domain/Account.java
  21. 18 0
      src/main/java/com/sf/day27/_02_dao/domain/Order.java
  22. 18 0
      src/main/java/com/sf/day27/_02_dao/domain/Product.java

+ 260 - 0
src/main/java/com/sf/day26/_01_jdbc/JDBTest.java

@@ -0,0 +1,260 @@
+package com.sf.day26._01_jdbc;
+
+import com.sf.day26._01_jdbc.domain.Student;
+import com.sf.day26._01_jdbc.service.MyJDBCApi;
+import com.sf.day26._01_jdbc.service.impl.OracleApi;
+import org.junit.Test;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+public class JDBTest {
+    @Test
+    public void test(){
+        MyJDBCApi myJDBCApi = new OracleApi();
+        myJDBCApi.execute();
+    }
+
+    @Test
+    public void test1() throws ClassNotFoundException, SQLException {
+        //1 加载驱动类
+        // 这个就是我们驱动对象, 我们只需要加载一下他的字节码
+        // 我们是不需要自己创建Driver 类, 我们只需要加载字节码, 他这类中他又一个静态代码块是可以帮助我们去创建Driver
+        Class.forName("com.mysql.jdbc.Driver");
+        //2 获取连接对象
+        /**
+         * 三个参数:
+         * 第一个参数: 连接数据库url 信息
+         * 第二个参数: 连接数据库账号信息
+         * 第三个参数: 连接数据库密码信息
+         */
+        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbcdemo",
+                "root",
+                "admin");
+        //3 创建执行语句对象
+        // 创建字符串写sql 语句
+        String sql = "delete from t_student where id =2";
+        //statement 就是语句对象 , 他可以帮助我们去执行sql
+        Statement statement = connection.createStatement();
+        //4 执行sql语句
+        // 在statement 当中有俩个方法 一个是execeuteUpage 执行增删改 DML  一个是executeQuery 执行DQL
+        // executeUpdate 返回值是受影响行
+        int count = statement.executeUpdate(sql);
+        System.out.println("受影响行:"+ count);
+        //5 释放资源
+        statement.close();
+        connection.close();
+    }
+
+    @Test
+    public void test2() throws ClassNotFoundException, SQLException {
+        // 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        // 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        // 创建执行语句对象
+        String sql = "insert into t_student(name,email,age) values('zhangsan','123@qq.com',10)";
+        Statement statement = connection.createStatement();
+        // 执行sql语句
+        statement.executeUpdate(sql);
+        // 关闭资源
+        statement.close();
+        connection.close();
+    }
+
+    @Test
+    public void test3() throws ClassNotFoundException, SQLException {
+        // 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        // 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        // 创建执行语句对象
+        String sql = "update t_student set name='zhangsan123' where id = 21";
+        Statement statement = connection.createStatement();
+        // 执行sql语句
+        statement.executeUpdate(sql);
+        // 关闭资源
+        statement.close();
+        connection.close();
+    }
+
+
+
+    public static void main(String[] args) throws SQLException, ClassNotFoundException {
+//        method1();
+//        method2();
+        method3();
+    }
+//    需求3 : 在控台当中输入名字, 删除指定名字的数据
+    private static void method3() throws ClassNotFoundException, SQLException {
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入要删除的id:");
+        long id = scanner.nextLong();
+        // 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        // 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        // 创建执行语句对象
+        String sql = "delete from t_student where id = "+ id;
+        Statement statement = connection.createStatement();
+        // 执行sql语句
+        statement.executeUpdate(sql);
+        // 关闭资源
+        statement.close();
+        connection.close();
+    }
+
+
+
+    //    需求2 : 在控制台当中输入用户名 , 年龄 , 邮箱 , id  , 要求修改指定id 数据
+    private static void method2() throws ClassNotFoundException, SQLException {
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入name:");
+        String name = scanner.next();
+        System.out.println("请输入邮箱:");
+        String email = scanner.next();
+        System.out.println("请输入年龄");
+        int age = scanner.nextInt();
+        System.out.println("请输入id:");
+        long id = scanner.nextLong();
+
+        //加载驱动
+        Class.forName("com.mysql.jdbc.Driver");
+        //获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        //创建SQL 语句
+        String sql ="update t_student set name='"+name+"',email='"+email+"',age="+age+" where id="+id+"";
+        Statement statement = connection.createStatement();
+        //执行sql 语句
+        statement.executeUpdate(sql);
+        //关闭资源
+        statement.close();
+        connection.close();
+
+    }
+
+    /**
+     * 需求1 : 要求在控制台当中输入用户姓名和年龄邮箱, 往mysql 当中要求插入 5 条数据
+     * 需求2 : 在控制台当中输入用户名 , 年龄 , 邮箱 , id  , 要求修改指定id 数据
+     * 需求3 : 在控台当中输入名字, 删除指定名字的数据
+     * 温馨提示: 在控制当中输出Scanner , 不能够用@Test 方法 要用main 主方法
+     */
+    private static void method1() throws ClassNotFoundException, SQLException {
+        Scanner scanner = new Scanner(System.in);
+        //加载驱动
+        Class.forName("com.mysql.jdbc.Driver");
+        // 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        // 创建要执行的sql语句
+        Statement statement = connection.createStatement();
+        for (int i = 0; i < 5; i++) {
+            System.out.println("请输入name:");
+            String name = scanner.next();
+            System.out.println("请输入邮箱:");
+            String email = scanner.next();
+            System.out.println("请输入年龄");
+            int age = scanner.nextInt();
+
+            // 创建要执行sql
+            String sql = "insert into t_student (name,email,age) values('"+name+"','"+email+"',"+age+")";
+            // 执行sql
+            statement.executeUpdate(sql);
+        }
+        // 关闭资源
+        statement.close();
+        connection.close();
+    }
+
+    // 预编译语句对象
+    // 往t_student 表当中插入t_student
+    @Test
+    public void test4() throws ClassNotFoundException, SQLException {
+        // 1加载运行
+        Class.forName("com.mysql.jdbc.Driver");
+        // 2获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        // 3创建预编译语句对象
+        String sql = "insert into t_student (name,email,age) values(?,?,?)";
+        // 创建预编译语句第对象, 然后编译解析 sql  注意现在还没有去执行sql
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        // 设置参数
+        /**
+         * 第一个参数: 要给第一个? 设置值 , 从1 开始
+         * 第二个参数: 要设置的值
+         */
+        preparedStatement.setString(1,"张三");
+        preparedStatement.setString(2,"123@qq.com");
+        preparedStatement.setInt(3,30);
+        // 4 执行sql
+        // 在去执行executeUpdate 的时候就会把? 替换成对应的值 , 然后执行sql
+        preparedStatement.executeUpdate();
+        // 5 释放资源
+        connection.close();
+        preparedStatement.close();
+    }
+
+    // 查询t_student  id为5 的数据
+
+    @Test
+    public void test5() throws ClassNotFoundException, SQLException {
+        // 1 加载驱动
+        Class.forName("com.mysql.jdbc.Driver");
+        // 2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        // 3 创建预编译语句
+        String sql = "select * from t_student where id =?";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setLong(1,5);
+        // 4 执行sql
+        ResultSet resultSet = preparedStatement.executeQuery();
+        // 这个resultSet 封装了我们返回的数据
+        // 判断如果有数据就获取数据进行封装
+        Student student = new Student();
+        if(resultSet.next()){
+            String name = resultSet.getString("name");
+            String email = resultSet.getString("email");
+            long id = resultSet.getLong("id");
+            int age = resultSet.getInt("age");
+            student = new Student(id,name,email,age);
+        }
+        // 5 释放资源
+        System.out.println(student);
+        connection.close();
+        preparedStatement.close();
+        resultSet.close();
+
+    }
+
+    // 查询出来数据库当中所有数据 返回List<Student> list
+    @Test
+    public void test6() throws ClassNotFoundException, SQLException {
+        // 1 加载驱动
+        Class.forName("com.mysql.jdbc.Driver");
+        // 2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        // 3 创建预编译sql 语句
+        String sql = "select * from t_student";
+        // 创建预编译语句
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        ResultSet resultSet = preparedStatement.executeQuery();
+        List<Student> students = new ArrayList<>();
+        while (resultSet.next()){
+            String name = resultSet.getString("name");
+            String email = resultSet.getString("email");
+            long id = resultSet.getLong("id");
+            int age = resultSet.getInt("age");
+            Student student = new Student(id,name,email,age);
+
+            students.add(student);
+        }
+        System.out.println(students);
+        // 关闭资源
+        connection.close();
+        resultSet.close();
+        preparedStatement.close();
+
+    }
+}
+

+ 15 - 0
src/main/java/com/sf/day26/_01_jdbc/domain/Student.java

@@ -0,0 +1,15 @@
+package com.sf.day26._01_jdbc.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Student {
+    private Long id;
+    private String name;
+    private String email;
+    private Integer age;
+}

+ 5 - 0
src/main/java/com/sf/day26/_01_jdbc/service/MyJDBCApi.java

@@ -0,0 +1,5 @@
+package com.sf.day26._01_jdbc.service;
+
+public interface MyJDBCApi {
+    public void execute();
+}

+ 12 - 0
src/main/java/com/sf/day26/_01_jdbc/service/impl/MysqlApi.java

@@ -0,0 +1,12 @@
+package com.sf.day26._01_jdbc.service.impl;
+
+import com.sf.day26._01_jdbc.service.MyJDBCApi;
+
+public class MysqlApi implements MyJDBCApi {
+
+
+    @Override
+    public void execute() {
+        System.out.println("mysql 实现jdbc 操作数据库");
+    }
+}

+ 11 - 0
src/main/java/com/sf/day26/_01_jdbc/service/impl/OracleApi.java

@@ -0,0 +1,11 @@
+package com.sf.day26._01_jdbc.service.impl;
+
+import com.sf.day26._01_jdbc.service.MyJDBCApi;
+
+public class OracleApi implements MyJDBCApi {
+
+    @Override
+    public void execute() {
+        System.out.println("这是oracle 实现jdbc 操作数据库");
+    }
+}

+ 12 - 0
src/main/java/com/sf/day26/_01_jdbc/service/impl/SqlServerApi.java

@@ -0,0 +1,12 @@
+package com.sf.day26._01_jdbc.service.impl;
+
+import com.sf.day26._01_jdbc.service.MyJDBCApi;
+
+public class SqlServerApi implements MyJDBCApi {
+
+
+    @Override
+    public void execute() {
+        System.out.println("这是sqlServer 实现jdbc 去操作数据库");
+    }
+}

+ 252 - 0
src/main/java/com/sf/day27/_01_jdbc_concat/JDBCTest.java

@@ -0,0 +1,252 @@
+package com.sf.day27._01_jdbc_concat;
+
+import com.sf.day27._01_jdbc_concat.domain.Integral;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+public class JDBCTest {
+
+
+    /**
+     * 使用JDBC 完成积分表新增操作
+     */
+    @Test
+    public void test() throws Exception {
+        //1 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        //2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        //3 创建语句对象
+        String sql = "insert into integral(name,age,integral) values(?,?,?)";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setString(1,"test");
+        preparedStatement.setInt(2,10);
+        preparedStatement.setInt(3,20);
+
+        //4 执行sql 语句
+        int count = preparedStatement.executeUpdate();
+        // 判断是否插入成功如果插入成功我打印插入成功如果没插入成功抛出RuntimeException
+        if(count>0){
+            System.out.println("插入成功");
+        }else{
+            throw new RuntimeException("插入失败");
+        }
+        //5 释放资源
+        connection.close();
+        preparedStatement.close();
+    }
+
+    @Test
+    public void test1() throws Exception {
+        //1 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        //2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        //3 创建语句对象
+        String sql = "delete from integral where id = ?";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setLong(1,1L);
+
+        //4 执行sql 语句
+        int count = preparedStatement.executeUpdate();
+        // 判断是否插入成功如果插入成功我打印插入成功如果没插入成功抛出RuntimeException
+        if(count>0){
+            System.out.println("插入成功");
+        }else{
+            throw new RuntimeException("插入失败");
+        }
+        //5 释放资源
+        connection.close();
+        preparedStatement.close();
+    }
+
+    @Test
+    public void test2() throws Exception {
+        //1 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        //2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        //3 创建语句对象
+        String sql = "update integral set name=?,age=?,integral=? where id = ?";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setString(1,"ssss");
+        preparedStatement.setInt(2,30);
+        preparedStatement.setInt(3,50);
+        preparedStatement.setLong(4,2);
+
+        //4 执行sql 语句
+        int count = preparedStatement.executeUpdate();
+        // 判断是否插入成功如果插入成功我打印插入成功如果没插入成功抛出RuntimeException
+        if(count>0){
+            System.out.println("插入成功");
+        }else{
+            throw new RuntimeException("插入失败");
+        }
+        //5 释放资源
+        connection.close();
+        preparedStatement.close();
+    }
+
+    // JDBC 查询单个 和查询所有
+    @Test
+    public void test3() throws Exception {
+        //1 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        //2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        //3 创建语句对象
+        String sql = "select * from integral where id = ?";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setLong(1,2L);
+
+        //4 执行sql 语句
+        ResultSet resultSet = preparedStatement.executeQuery();
+        if(resultSet.next()){
+            Integral integral = new Integral();
+            integral.setAge(resultSet.getInt("age"));
+            integral.setName(resultSet.getString("name"));
+            integral.setId(resultSet.getLong("id"));
+            integral.setIntegral(resultSet.getInt("integral"));
+            System.out.println(integral);
+        }
+        //5 释放资源
+        connection.close();
+        preparedStatement.close();
+    }
+
+
+    @Test
+    public void test4() throws Exception {
+        //1 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        //2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        //3 创建语句对象
+        String sql = "select * from integral";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+
+        //4 执行sql 语句
+        ResultSet resultSet = preparedStatement.executeQuery();
+        List<Integral> list = new ArrayList<>();
+        while (resultSet.next()){
+            Integral integral = new Integral();
+            integral.setAge(resultSet.getInt("age"));
+            integral.setName(resultSet.getString("name"));
+            integral.setId(resultSet.getLong("id"));
+            integral.setIntegral(resultSet.getInt("integral"));
+
+            list.add(integral);
+        }
+        System.out.println(list);
+        //5 释放资源
+        connection.close();
+        preparedStatement.close();
+    }
+//    要求在控制台输入2 个数据最大值和最小值, 要求JDBC 查询出来指定范围的集合
+    public static void main(String[] args) throws Exception {
+        method3();
+    }
+
+    private static void method1() throws Exception {
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("最大值:");
+        int max = scanner.nextInt();
+        System.out.println("最小值:");
+        int min = scanner.nextInt();
+
+        //1 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        //2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        //3 创建语句对象
+        String sql = "select * from integral where integral between ? and ?";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setInt(1,min);
+        preparedStatement.setInt(2,max);
+        //4 执行sql 语句
+        ResultSet resultSet = preparedStatement.executeQuery();
+        List<Integral> list = new ArrayList<>();
+        while (resultSet.next()){
+            Integral integral = new Integral();
+            integral.setAge(resultSet.getInt("age"));
+            integral.setName(resultSet.getString("name"));
+            integral.setId(resultSet.getLong("id"));
+            integral.setIntegral(resultSet.getInt("integral"));
+
+            list.add(integral);
+        }
+        System.out.println(list);
+        //5 释放资源
+        connection.close();
+        preparedStatement.close();
+
+    }
+
+//    要求按照积分进行排序, 查询出来数据集合
+
+    private static void method2() throws Exception {
+
+        //1 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        //2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        //3 创建语句对象
+        String sql = "select * from integral order by integral";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        //4 执行sql 语句
+        ResultSet resultSet = preparedStatement.executeQuery();
+        List<Integral> list = new ArrayList<>();
+        while (resultSet.next()){
+            Integral integral = new Integral();
+            integral.setAge(resultSet.getInt("age"));
+            integral.setName(resultSet.getString("name"));
+            integral.setId(resultSet.getLong("id"));
+            integral.setIntegral(resultSet.getInt("integral"));
+
+            list.add(integral);
+        }
+        System.out.println(list);
+        //5 释放资源
+        connection.close();
+        preparedStatement.close();
+
+    }
+
+//    查询名字为zhangsan 或者是lisi 或者是 王五的用户信息
+
+
+    private static void method3() throws Exception {
+
+        //1 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        //2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+        //3 创建语句对象
+        String sql = "select * from integral where name in ('zhangsan','lisi','wangwu')";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        //4 执行sql 语句
+        ResultSet resultSet = preparedStatement.executeQuery();
+        List<Integral> list = new ArrayList<>();
+        while (resultSet.next()){
+            Integral integral = new Integral();
+            integral.setAge(resultSet.getInt("age"));
+            integral.setName(resultSet.getString("name"));
+            integral.setId(resultSet.getLong("id"));
+            integral.setIntegral(resultSet.getInt("integral"));
+
+            list.add(integral);
+        }
+        System.out.println(list);
+        //5 释放资源
+        connection.close();
+        preparedStatement.close();
+
+    }
+}

+ 210 - 0
src/main/java/com/sf/day27/_01_jdbc_concat/JDBCTest1.java

@@ -0,0 +1,210 @@
+package com.sf.day27._01_jdbc_concat;
+
+import com.sf.day27._01_jdbc_concat.domain.Order;
+
+import java.math.BigDecimal;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class JDBCTest1 {
+
+    public static void main(String[] args) throws Exception {
+//        method1();
+//        method2();
+        method3();
+    }
+
+    /**
+     * 需求3 完成下单需求
+     * 要完成这个需求的前提必须要对表当中每一个什么含义必须要清楚
+     * 要求
+     *  1 在控制台输入商品id ,数量 ,操作用户id ,
+     *  2 如果库存足够可以购买,如果库存不足打印库存不足
+     *  3 判断用户余额是否足够 ,如果余额不够打印余额不足
+     *  4 如果足够商品减少库存
+     *  5 减少用户账户余额
+     *  6 在用户订单表添加数据
+     */
+    private static void method3() throws ClassNotFoundException, SQLException {
+//        1 在控制台输入商品id ,数量 ,操作用户id ,
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入商品id:");
+        long productId = scanner.nextLong();
+        System.out.println("请输入商品数量");
+        int count = scanner.nextInt();
+        System.out.println("请输入用户id");
+        long userId = scanner.nextLong();
+//        2 如果库存足够可以购买,如果库存不足打印库存不足
+        // 查询product 表
+        Class.forName("com.mysql.jdbc.Driver");
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo1", "root", "admin");
+        String sql = "select * from product where id = ?";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setLong(1,productId);
+        // 执行sql 查询结果
+        ResultSet resultSet = preparedStatement.executeQuery();
+        if(resultSet.next()){
+            // 获取库存
+            int stock = resultSet.getInt("stock");
+            if(stock>=count){
+                // 3 判断用户余额是否足够 ,如果余额不够打印余额不足
+                // 查询account 表 根据操作id 去操作id 去查询
+                String account_sql = "select * from t_account where id = ? and amount >= ?";
+                PreparedStatement acountStatement1 =connection.prepareStatement(account_sql);
+                acountStatement1.setLong(1,userId);
+                acountStatement1.setBigDecimal(2,
+                        resultSet.getBigDecimal("price").multiply(new BigDecimal(stock)));
+                ResultSet accountResultSet = acountStatement1.executeQuery();
+                if(accountResultSet.next()){
+                    System.out.println("账户余额充足");
+                    // 4 如果足够商品减少库存 product
+                    String decrSql = "update product set stock = stock - ? where id = ?";
+                    System.out.println(decrSql);
+                    PreparedStatement decrPst = connection.prepareStatement(decrSql);
+                    // 设置才减少sql 参数
+                    decrPst.setInt(1,count);
+                    decrPst.setLong(2,productId);
+                    decrPst.executeUpdate();
+                    //5 减少用户账户余额    商品价格 * 商品数量  1000 * 2 = 2000
+                    String decrAmountSQL = "update t_account set amount = amount - ? where id = ?";
+                    PreparedStatement decrAmountPst = connection.prepareStatement(decrAmountSQL);
+                    BigDecimal price = resultSet.getBigDecimal("price");
+                    decrAmountPst.setBigDecimal(1,price.multiply(new BigDecimal(count)));
+                    decrAmountPst.setLong(2,userId);
+                    decrAmountPst.executeUpdate();
+                    //6 在用户订单表添加数据   productName price      userId
+                    String productName = resultSet.getString("productName");
+                    String insertOrderSQL = "insert into t_order(productName,price,user_id) values(?,?,?)";
+                    PreparedStatement insertOrderPst = connection.prepareStatement(insertOrderSQL);
+                    insertOrderPst.setString(1,productName);
+                    insertOrderPst.setBigDecimal(2,price);
+                    insertOrderPst.setLong(3,userId);
+                    insertOrderPst.executeUpdate();
+                }else{
+                    System.out.println("账户余额不足");
+                }
+            }else{
+                System.out.println("库存不足");
+            }
+        }else{
+            System.out.println("数据数据不存在");
+        }
+
+
+        resultSet.close();
+        preparedStatement.close();
+        connection.close();
+    }
+
+    //    要求:  在控制当中输入账号和密码, 如果输入的账号和密码不正确, 要求抛出异常
+//    如果登录成功 把这个用户的订单查询出来根据用户id 查询出来这个用户订单
+    private static void method2() throws ClassNotFoundException, SQLException {
+        //1 创建Scaner 对象
+        Scanner scanner = new Scanner(System.in);
+        //2 输入用户名和密码
+        System.out.println("请输入用户名:");
+        String username = scanner.next();
+        System.out.println("请输入密码:");
+        String password = scanner.next();
+        //3 如果用户名和密码为空 抛出异常体用用户账号或者密码不能为空
+        if(username == null || password == null){
+            throw new RuntimeException("账号或者是密码不能为空");
+        }
+        //4 根据用户的账号和密码上数据库当中查询数据, 看是否存在数据, 如果不存在提醒用户账号密码错误
+        Class.forName("com.mysql.jdbc.Driver");
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo1", "root", "admin");
+        String sql = "select * from user where name=? and password = ?";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setString(1,username);
+        preparedStatement.setString(2,password);
+
+        ResultSet resultSet = preparedStatement.executeQuery();
+        if(resultSet.next()){
+            System.out.println("登录成功");
+            // 查询当前登录用户所拥有订单信息
+            // 查询t_order , 根据id 查询
+            String sql1 = "select * from t_order where user_id =?";
+            PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
+            preparedStatement1.setLong(1,resultSet.getLong("id"));
+            ResultSet resultSet1 = preparedStatement1.executeQuery();
+            // 最终我们是要一个订单结合 List<Order> list
+            List<Order> list =  new ArrayList<>();
+            // 如果用户有订单信息 就添加到集合中
+            while (resultSet1.next()){
+                Order order = new Order();
+                order.setId(resultSet1.getLong("id"));
+                order.setProductName(resultSet1.getString("productName"));
+                order.setUser_id(resultSet1.getLong("user_id"));
+                order.setPrice(resultSet1.getBigDecimal("price"));
+                list.add(order);
+            }
+            System.out.println("这是用户的订单信息:"+ list);
+        }else{
+            System.out.println("登录失败");
+        }
+    }
+
+    /**
+     * 需求: 完成注册
+     * 要求: 在控制台输入用户信息保存到数据库中
+     * 额外要求  年龄输入只能在1-80 岁, 如果超过就抛出RuntimeExcption
+     * 输入邮箱格式 比如要符合邮件格式 , 这里要利用正则表达式字符串有match方法
+     * 如果都符合在进行保存
+     */
+    private static void method1() throws Exception {
+        //1 创建Scaner对象
+        Scanner scanner = new Scanner(System.in);
+        //2 输入用户信息
+        System.out.println("请输入用户名:");
+        String name = scanner.next();
+        System.out.println("请输入邮件:");
+        String email = scanner.next();
+        System.out.println("请输入年龄:");
+        Integer age = scanner.nextInt();
+        System.out.println("请输入密码:");
+        String password = scanner.next();
+        //3 判断年龄是否符合条件
+        if(age<1 || age > 80){
+            throw new RuntimeException("非法操作");
+        }
+        //4 判断邮件是否符合条件
+        String emailRegex = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$";
+        Pattern pattern = Pattern.compile(emailRegex);
+
+        Matcher matcher = pattern.matcher(email);
+        if(!matcher.find()){
+            throw new RuntimeException("邮件格式不正确");
+        }
+        //5 使用JDBC 去把数据保存到数据库中
+        //1 加载驱动类
+        Class.forName("com.mysql.jdbc.Driver");
+        //2 获取连接对象
+        Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo1", "root", "admin");
+        //3 创建语句对象
+        String sql = "insert into user(name,age,email,password) values (?,?,?,?)";
+        PreparedStatement preparedStatement = connection.prepareStatement(sql);
+        preparedStatement.setString(1,name);
+        preparedStatement.setInt(2,age);
+        preparedStatement.setString(3,email);
+        preparedStatement.setString(4,password);
+
+        //4 执行sql 语句
+        int count = preparedStatement.executeUpdate();
+        // 判断是否插入成功如果插入成功我打印插入成功如果没插入成功抛出RuntimeException
+        if(count>0){
+            System.out.println("注册成功");
+        }else{
+            throw new RuntimeException("注册失败");
+        }
+        //5 释放资源
+        connection.close();
+        preparedStatement.close();
+    }
+
+
+
+}

+ 15 - 0
src/main/java/com/sf/day27/_01_jdbc_concat/domain/Integral.java

@@ -0,0 +1,15 @@
+package com.sf.day27._01_jdbc_concat.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Integral {
+    private Long id;
+    private String name;
+    private Integer age;
+    private Integer integral;
+}

+ 17 - 0
src/main/java/com/sf/day27/_01_jdbc_concat/domain/Order.java

@@ -0,0 +1,17 @@
+package com.sf.day27._01_jdbc_concat.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class Order {
+    private Long id;
+    private String productName;
+    private Long user_id;
+    private BigDecimal price;
+}

+ 17 - 0
src/main/java/com/sf/day27/_01_jdbc_concat/domain/Product.java

@@ -0,0 +1,17 @@
+package com.sf.day27._01_jdbc_concat.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Product {
+    private Long id;
+    private String productName;
+    private Integer stock;
+    private BigDecimal price;
+}

+ 16 - 0
src/main/java/com/sf/day27/_01_jdbc_concat/domain/User.java

@@ -0,0 +1,16 @@
+package com.sf.day27._01_jdbc_concat.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class User {
+    private Long id;
+    private String name;
+    private String email;
+    private Integer age;
+    private String password;
+}

+ 88 - 0
src/main/java/com/sf/day27/_02_dao/DAOTest.java

@@ -0,0 +1,88 @@
+package com.sf.day27._02_dao;
+
+import com.sf.day27._01_jdbc_concat.domain.Product;
+import com.sf.day27._02_dao.dao.AccountDAO;
+import com.sf.day27._02_dao.dao.OrderDAO;
+import com.sf.day27._02_dao.dao.ProductDAO;
+import com.sf.day27._02_dao.dao.impl.AccountDAOImpl;
+import com.sf.day27._02_dao.dao.impl.OrderDAOImpl;
+import com.sf.day27._02_dao.dao.impl.ProductDAOImpl;
+import org.junit.Test;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Scanner;
+
+public class DAOTest {
+
+    @Test
+    public void test(){
+//        调用接口当中方法就可以了, insert jdbc 就写一次
+        ProductDAO dao = new ProductDAOImpl();
+        dao.insert(new Product(null,"test",10,new BigDecimal(100)));
+    }
+
+    @Test
+    public void test1(){
+        ProductDAO dao = new ProductDAOImpl();
+        dao.insert(new Product(null,"test123",20,new BigDecimal(100)));
+    }
+
+    /**
+     * 需求 : 在控制台当中输入显示第几页 , 每页显示数据  2个值   product
+     * 要求展示出来对应的数据 , 以DAO 接口实现
+     */
+    public static void main(String[] args) {
+        method2();
+    }
+
+    /**
+     * 需求: 支付功能
+     * 前提需要先把t_order表添加status 列 默认值是0 , 0 表示未支付 , 1表示已支付
+     * 要求: 在控制台当中输入要操作商品,商品数量,操作用户id
+     * 1 首先查看账户表金额是否足够      AccountDAO
+     * 2 如果商品金额足够, 减少账户余额
+     * 3 修改订单状态为已支付状态    OrderDAO
+     * 都是以DAO 接口思想操作
+     */
+    private static void method2() {
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入商品id");
+        long productId = scanner.nextLong();
+        System.out.println("请输入商品数量");
+        int count = scanner.nextInt();
+        System.out.println("操作用户id");
+        Long userId = scanner.nextLong();
+        //1 查询账户余额是否足够  t_account 操作数据库 dao 思想操作
+        AccountDAO accountDAO = new AccountDAOImpl();
+        ProductDAO productDAO = new ProductDAOImpl();
+        OrderDAO orderDAO = new OrderDAOImpl();
+
+        // 由于这边要价格, 获取商品信息才可以得到价格
+        Product product = productDAO.get(productId);
+        boolean flag = accountDAO.checkAmount(userId, product.getPrice().multiply(new BigDecimal(count)));
+//        2 如果商品金额足够, 减少账户余额
+        if(flag){
+            accountDAO.decrAmount(userId,product.getPrice().multiply(new BigDecimal(count)));
+//            3 修改订单状态为已支付状态 由0 变成1    OrderDAO   t_order
+            orderDAO.updateOrderStatus(userId);
+        }
+
+    }
+
+    private static void method1() {
+        Scanner scanner = new Scanner(System.in);
+        System.out.println("请输入第几页:");
+        int currentPage = scanner.nextInt();
+        System.out.println("请输入每页实现数据:");
+        int pageSize = scanner.nextInt();
+        ProductDAO productDAO = new ProductDAOImpl();
+        List<Product> list =  productDAO.selectPage(currentPage,pageSize);
+        System.out.println(list);
+
+    }
+
+
+
+
+}

+ 17 - 0
src/main/java/com/sf/day27/_02_dao/dao/AccountDAO.java

@@ -0,0 +1,17 @@
+package com.sf.day27._02_dao.dao;
+
+import java.math.BigDecimal;
+
+public interface AccountDAO {
+    /**
+     * 查询账户余额是否足够
+     * id  userid
+     * amount 你要消费的金额
+     */
+    boolean checkAmount(Long id , BigDecimal amount);
+
+    /**
+     * 减少账户余额
+     */
+    void decrAmount(Long userId, BigDecimal amount);
+}

+ 10 - 0
src/main/java/com/sf/day27/_02_dao/dao/OrderDAO.java

@@ -0,0 +1,10 @@
+package com.sf.day27._02_dao.dao;
+
+public interface OrderDAO {
+    /**
+     * 根据用户id 修改状态为支付状态 由0->
+     * @param userId
+     */
+    void updateOrderStatus(Long userId);
+}
+

+ 43 - 0
src/main/java/com/sf/day27/_02_dao/dao/ProductDAO.java

@@ -0,0 +1,43 @@
+package com.sf.day27._02_dao.dao;
+
+import com.sf.day27._01_jdbc_concat.domain.Product;
+
+import java.util.List;
+
+public interface ProductDAO {
+    /**
+     * 新增方法
+     */
+    void insert(Product product);
+
+    /**
+     * 编辑操作
+     */
+    void update(Product product);
+
+    /**
+     * 删除操作
+     */
+    void delete(Long id);
+
+    /**
+     * 查询单个商品
+     *
+     */
+    Product get(Long id);
+
+    /**
+     * 查询所有的商品
+     */
+    List<Product> list();
+
+    /**
+     * 分页查询
+     * currentPage: 当前页
+     * pageSize: 每页显示数据
+     */
+    List<Product> selectPage(int currentPage, int pageSize);
+
+
+}
+

+ 100 - 0
src/main/java/com/sf/day27/_02_dao/dao/impl/AccountDAOImpl.java

@@ -0,0 +1,100 @@
+package com.sf.day27._02_dao.dao.impl;
+
+import com.sf.day27._02_dao.dao.AccountDAO;
+
+import java.math.BigDecimal;
+import java.sql.*;
+
+public class AccountDAOImpl implements AccountDAO {
+
+    @Override
+    public boolean checkAmount(Long id, BigDecimal amount) {
+        Connection connection = null;
+        PreparedStatement preparedStatement =null;
+        ResultSet resultSet = null;
+        try {
+            Class.forName("com.mysql.jdbc.Driver");
+            // 获取连接对象
+            connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo1", "root", "admin");
+
+            // 创建要执行语句
+            String sql = "select * from t_account where id =? and amount> ?";
+             preparedStatement = connection.prepareStatement(sql);
+            // 设置sql 的参数
+            preparedStatement.setLong(1,id);
+            preparedStatement.setBigDecimal(2,amount);
+            resultSet = preparedStatement.executeQuery();
+            if(resultSet.next()){
+                return true;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            try {
+                if(connection!=null){
+                    connection.close();
+                }
+
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            try {
+                if(preparedStatement!=null){
+                    preparedStatement.close();
+                }
+
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            ;
+            try {
+                if(resultSet!=null){
+                    resultSet.close();
+                }
+
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public void decrAmount(Long userId, BigDecimal amount) {
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        try {
+            Class.forName("com.mysql.jdbc.Driver");
+            // 获取连接对象
+            connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo1", "root", "admin");
+
+            // 创建要执行语句
+            String sql = "update t_account set amount = amount-? where id = ?";
+            preparedStatement = connection.prepareStatement(sql);
+            // 设置sql 的参数
+            preparedStatement.setBigDecimal(1,amount);
+            preparedStatement.setLong(2,userId);
+
+            preparedStatement.executeUpdate();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            try {
+                if(connection!=null){
+                    connection.close();
+                }
+
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            ;try {
+                if(preparedStatement!=null){
+                    preparedStatement.close();
+                }
+
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 48 - 0
src/main/java/com/sf/day27/_02_dao/dao/impl/OrderDAOImpl.java

@@ -0,0 +1,48 @@
+package com.sf.day27._02_dao.dao.impl;
+
+import com.sf.day27._02_dao.dao.OrderDAO;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+public class OrderDAOImpl implements OrderDAO {
+
+    @Override
+    public void updateOrderStatus(Long userId) {
+        Connection connection = null;
+        PreparedStatement preparedStatement = null;
+        try {
+            Class.forName("com.mysql.jdbc.Driver");
+            // 获取连接对象
+            connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo1", "root", "admin");
+
+            // 创建要执行语句
+            String sql = "update t_order set status = 1 where id = ?";
+            preparedStatement = connection.prepareStatement(sql);
+            // 设置sql 的参数
+            preparedStatement.setLong(1,userId);
+            preparedStatement.executeUpdate();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            try {
+                if(connection!=null){
+                    connection.close();
+                }
+
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            ;try {
+                if(preparedStatement!=null){
+                    preparedStatement.close();
+                }
+
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 244 - 0
src/main/java/com/sf/day27/_02_dao/dao/impl/ProductDAOImpl.java

@@ -0,0 +1,244 @@
+package com.sf.day27._02_dao.dao.impl;
+
+import com.sf.day27._01_jdbc_concat.domain.Product;
+import com.sf.day27._02_dao.dao.ProductDAO;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProductDAOImpl implements ProductDAO {
+
+    @Override
+    public void insert(Product product) {
+        Connection connection = null;
+        PreparedStatement preparedStatement =null;
+        try {
+            // 加载驱动
+            Class.forName("com.mysql.jdbc.Driver");
+            //获取连接对象
+            connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo1", "root", "admin");
+            //常见预编译语句
+            String sql= "insert into product (productName,price,stock) values(?,?,?)";
+            preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setString(1,product.getProductName());
+            preparedStatement.setBigDecimal(2,product.getPrice());
+            preparedStatement.setInt(3,product.getStock());
+            preparedStatement.executeUpdate();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            // 关闭资源
+            try {
+                if(connection!=null){
+                    connection.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            try {
+                if(preparedStatement!=null){
+                    preparedStatement.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public void update(Product product) {
+        Connection connection = null;
+        PreparedStatement preparedStatement =null;
+        try {
+            // 加载驱动
+            Class.forName("com.mysql.jdbc.Driver");
+            //获取连接对象
+            connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+            //常见预编译语句
+            String sql= "update product set productName=? , price=? , stock=? where id =?";
+            preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setString(1,product.getProductName());
+            preparedStatement.setBigDecimal(2,product.getPrice());
+            preparedStatement.setInt(3,product.getStock());
+            preparedStatement.setLong(4,product.getId());
+            preparedStatement.executeUpdate();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            // 关闭资源
+            try {
+                if(connection!=null){
+                    connection.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            try {
+                if(preparedStatement!=null){
+                    preparedStatement.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public void delete(Long id) {
+        Connection connection = null;
+        PreparedStatement preparedStatement =null;
+        try {
+            // 加载驱动
+            Class.forName("com.mysql.jdbc.Driver");
+            //获取连接对象
+            connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+            //常见预编译语句
+            String sql= "delete from product where id = ?";
+            preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setLong(1,id);
+            preparedStatement.executeUpdate();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            // 关闭资源
+            try {
+                if(connection!=null){
+                    connection.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            try {
+                if(preparedStatement!=null){
+                    preparedStatement.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public Product get(Long id) {
+        Connection connection = null;
+        PreparedStatement preparedStatement =null;
+        try {
+            // 加载驱动
+            Class.forName("com.mysql.jdbc.Driver");
+            //获取连接对象
+            connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo1", "root", "admin");
+            //常见预编译语句
+            String sql= "select * from product where id = ?";
+            preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setLong(1,id);
+            ResultSet resultSet = preparedStatement.executeQuery();
+            if(resultSet.next()){
+                Product product = new Product();
+                product.setPrice(resultSet.getBigDecimal("price"));
+                product.setProductName(resultSet.getString("productName"));
+                product.setStock(resultSet.getInt("stock"));
+                product.setId(resultSet.getLong("id"));
+                return product;
+            }
+            return null;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            // 关闭资源
+            try {
+                if(connection!=null){
+                    connection.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            try {
+                if(preparedStatement!=null){
+                    preparedStatement.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public List<Product> list() {
+        Connection connection = null;
+        PreparedStatement preparedStatement =null;
+        try {
+            // 加载驱动
+            Class.forName("com.mysql.jdbc.Driver");
+            //获取连接对象
+            connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo", "root", "admin");
+            //常见预编译语句
+            String sql= "select * from product";
+            preparedStatement = connection.prepareStatement(sql);
+            ResultSet resultSet = preparedStatement.executeQuery();
+            List<Product> list = new ArrayList<>();
+            while (resultSet.next()){
+                Product product = new Product();
+                product.setPrice(resultSet.getBigDecimal("price"));
+                product.setProductName(resultSet.getString("productName"));
+                product.setStock(resultSet.getInt("stock"));
+                product.setId(resultSet.getLong("id"));
+                list.add(product);
+
+            }
+
+            return list;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            // 关闭资源
+            try {
+                if(connection!=null){
+                    connection.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+            try {
+                if(preparedStatement!=null){
+                    preparedStatement.close();
+                }
+            } catch (SQLException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public List<Product> selectPage(int currentPage, int pageSize) {
+        // 分页查询关键点就是那个分页的sql  select * from 表 limit 开始索引 , 每页显示数据
+        Connection connection =null;
+        try {
+            Class.forName("com.mysql.jdbc.Driver");
+            connection = DriverManager.getConnection("jdbc:mysql:///jdbcdemo1", "root", "admin");
+            String sql = "select * from product limit ?,?";
+            // 创建语句对象
+            PreparedStatement preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setInt(1,(currentPage-1)*pageSize);
+            preparedStatement.setInt(2,pageSize);
+            //执行sql
+            ResultSet resultSet = preparedStatement.executeQuery();
+            List<Product> list = new ArrayList<>();
+            while (resultSet.next()){
+                Product product = new Product();
+                product.setPrice(resultSet.getBigDecimal("price"));
+                product.setProductName(resultSet.getString("productName"));
+                product.setStock(resultSet.getInt("stock"));
+                product.setId(resultSet.getLong("id"));
+                list.add(product);
+            }
+            return list;
+
+        } catch (ClassNotFoundException | SQLException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 15 - 0
src/main/java/com/sf/day27/_02_dao/domain/Account.java

@@ -0,0 +1,15 @@
+package com.sf.day27._02_dao.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Account {
+    private Long id;
+    private BigDecimal ammount;
+}

+ 18 - 0
src/main/java/com/sf/day27/_02_dao/domain/Order.java

@@ -0,0 +1,18 @@
+package com.sf.day27._02_dao.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Order {
+    private Long id;
+    private String productName;
+    private Long userId;
+    private Integer status;
+    private BigDecimal price;
+}

+ 18 - 0
src/main/java/com/sf/day27/_02_dao/domain/Product.java

@@ -0,0 +1,18 @@
+package com.sf.day27._02_dao.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Product {
+
+    private Long id;
+    private String productName;
+    private BigDecimal price;
+    private Integer stock;
+}