Browse Source

jdbc 综合练习

fanjialong 1 week ago
parent
commit
0d08af4b96
39 changed files with 962 additions and 0 deletions
  1. 29 0
      shop-order/.gitignore
  2. 8 0
      shop-order/.idea/.gitignore
  3. 8 0
      shop-order/.idea/compiler.xml
  4. 8 0
      shop-order/.idea/inspectionProfiles/Project_Default.xml
  5. 10 0
      shop-order/.idea/libraries/lib.xml
  6. 6 0
      shop-order/.idea/misc.xml
  7. 8 0
      shop-order/.idea/modules.xml
  8. 6 0
      shop-order/.idea/vcs.xml
  9. BIN
      shop-order/lib/druid-1.0.9.jar
  10. BIN
      shop-order/lib/hamcrest-core-1.3.jar
  11. BIN
      shop-order/lib/junit-4.13.jar
  12. BIN
      shop-order/lib/lombok-1.18.30.jar
  13. BIN
      shop-order/lib/mysql-connector-java-5.1.48.jar
  14. 4 0
      shop-order/resources/db.properties
  15. 13 0
      shop-order/shop-order.iml
  16. 19 0
      shop-order/src/com/sf/dao/IAccountDAO.java
  17. 10 0
      shop-order/src/com/sf/dao/IOrderDAO.java
  18. 12 0
      shop-order/src/com/sf/dao/IPrizeDAO.java
  19. 19 0
      shop-order/src/com/sf/dao/IPrizeLogDAO.java
  20. 15 0
      shop-order/src/com/sf/dao/IProductDAO.java
  21. 10 0
      shop-order/src/com/sf/dao/IUserDAO.java
  22. 21 0
      shop-order/src/com/sf/dao/IntegralDAO.java
  23. 64 0
      shop-order/src/com/sf/dao/impl/IAccountDAOImpl.java
  24. 81 0
      shop-order/src/com/sf/dao/impl/IntegralDAOImpl.java
  25. 45 0
      shop-order/src/com/sf/dao/impl/OrderDAOImpl.java
  26. 45 0
      shop-order/src/com/sf/dao/impl/PrizeDAOImpl.java
  27. 67 0
      shop-order/src/com/sf/dao/impl/PrizeLogDAOImpl.java
  28. 63 0
      shop-order/src/com/sf/dao/impl/ProductDAOImpl.java
  29. 42 0
      shop-order/src/com/sf/dao/impl/UserDAOImpl.java
  30. 15 0
      shop-order/src/com/sf/domain/Account.java
  31. 10 0
      shop-order/src/com/sf/domain/Integral.java
  32. 23 0
      shop-order/src/com/sf/domain/Order.java
  33. 14 0
      shop-order/src/com/sf/domain/Prize.java
  34. 10 0
      shop-order/src/com/sf/domain/PrizeLog.java
  35. 21 0
      shop-order/src/com/sf/domain/Product.java
  36. 13 0
      shop-order/src/com/sf/domain/User.java
  37. 69 0
      shop-order/src/com/sf/test/PrizeManager.java
  38. 102 0
      shop-order/src/com/sf/test/ShopTest.java
  39. 72 0
      shop-order/src/com/sf/util/JDBCUtil.java

+ 29 - 0
shop-order/.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
shop-order/.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
shop-order/.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
shop-order/.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
shop-order/.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
shop-order/.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
shop-order/.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$/shop-order.iml" filepath="$PROJECT_DIR$/shop-order.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
shop-order/.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>

BIN
shop-order/lib/druid-1.0.9.jar


BIN
shop-order/lib/hamcrest-core-1.3.jar


BIN
shop-order/lib/junit-4.13.jar


BIN
shop-order/lib/lombok-1.18.30.jar


BIN
shop-order/lib/mysql-connector-java-5.1.48.jar


+ 4 - 0
shop-order/resources/db.properties

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

+ 13 - 0
shop-order/shop-order.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>

+ 19 - 0
shop-order/src/com/sf/dao/IAccountDAO.java

@@ -0,0 +1,19 @@
+package com.sf.dao;
+
+import com.sf.domain.Account;
+
+import java.math.BigDecimal;
+
+public interface IAccountDAO {
+    /**
+     * 根据用户id 查询用户余额信息
+     */
+    Account get(Long id);
+
+    /**
+     * 更新账户余额
+     * @param id
+     * @param totalPrice
+     */
+    void updateAmountByUserId(Long id, BigDecimal amount);
+}

+ 10 - 0
shop-order/src/com/sf/dao/IOrderDAO.java

@@ -0,0 +1,10 @@
+package com.sf.dao;
+
+import com.sf.domain.Order;
+
+public interface IOrderDAO {
+    /**
+     * 保存订单信息
+     */
+    void insert(Order order);
+}

+ 12 - 0
shop-order/src/com/sf/dao/IPrizeDAO.java

@@ -0,0 +1,12 @@
+package com.sf.dao;
+
+import com.sf.domain.Prize;
+
+import java.util.List;
+
+public interface IPrizeDAO {
+    /**
+     * 查询出来所有奖品信息
+     */
+    List<Prize> list();
+}

+ 19 - 0
shop-order/src/com/sf/dao/IPrizeLogDAO.java

@@ -0,0 +1,19 @@
+package com.sf.dao;
+
+import com.sf.domain.PrizeLog;
+
+import java.util.List;
+
+public interface IPrizeLogDAO {
+    /**
+     * 根据用户ID 查询奖品记录信息
+     * 单个PrizeLog
+     */
+    List<PrizeLog> selectListByUserId(Long userId);
+
+    /**
+     * 添加抽奖记录
+     * @param prizeLog
+     */
+    void insertPrizeLog(PrizeLog prizeLog);
+}

+ 15 - 0
shop-order/src/com/sf/dao/IProductDAO.java

@@ -0,0 +1,15 @@
+package com.sf.dao;
+
+import com.sf.domain.Product;
+
+public interface IProductDAO {
+    /**
+     * 根据商品id 查询是否有这个商品信息
+     */
+    Product get(Long id);
+
+    /**
+     * 根据商品id 减少商品库存信息
+     */
+    void updateStockById(Long id,Integer stock);
+}

+ 10 - 0
shop-order/src/com/sf/dao/IUserDAO.java

@@ -0,0 +1,10 @@
+package com.sf.dao;
+
+import com.sf.domain.User;
+
+public interface IUserDAO {
+    /**
+     * 根据账号和密码查询数据
+     */
+    User login(String username,String password);
+}

+ 21 - 0
shop-order/src/com/sf/dao/IntegralDAO.java

@@ -0,0 +1,21 @@
+package com.sf.dao;
+
+import com.sf.domain.Integral;
+
+public interface IntegralDAO {
+    /**
+     * 根据用户id 查询积分表方法
+     */
+    Integral get(Long id);
+
+    /**
+     * 添加积分方法
+     */
+    void add(Integral integral);
+
+
+    /**
+     * 更新积分方法
+     */
+    void update(Integral integral);
+}

+ 64 - 0
shop-order/src/com/sf/dao/impl/IAccountDAOImpl.java

@@ -0,0 +1,64 @@
+package com.sf.dao.impl;
+
+import com.sf.dao.IAccountDAO;
+import com.sf.domain.Account;
+import com.sf.domain.User;
+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 IAccountDAOImpl implements IAccountDAO {
+    @Override
+    public Account get(Long id) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.prepareStatement("select * from account where user_id = ?");
+            // 设置参数
+            preparedStatement.setLong(1,id);
+            // 执行sql
+            resultSet = preparedStatement.executeQuery();
+            if(resultSet.next()){
+                Account account = new Account();
+                account.setId(resultSet.getLong("id"));
+                account.setUserId(resultSet.getLong("user_id"));
+                account.setAmount(resultSet.getBigDecimal("amount"));
+                return account;
+            }
+            return null;
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(conn,preparedStatement,resultSet);
+        }
+    }
+
+    @Override
+    public void updateAmountByUserId(Long id, BigDecimal totalPrice) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.prepareStatement("update account set amount = amount - ? where user_id = ?");
+            // 设置参数
+            preparedStatement.setBigDecimal(1,totalPrice);
+            preparedStatement.setLong(2,id);
+            // 执行sql
+            preparedStatement.executeUpdate();
+
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(conn,preparedStatement,resultSet);
+        }
+    }
+}

+ 81 - 0
shop-order/src/com/sf/dao/impl/IntegralDAOImpl.java

@@ -0,0 +1,81 @@
+package com.sf.dao.impl;
+
+import com.sf.dao.IntegralDAO;
+import com.sf.domain.Integral;
+import com.sf.util.JDBCUtil;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class IntegralDAOImpl implements IntegralDAO {
+    @Override
+    public Integral get(Long id) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.prepareStatement("select * from integral where user_id = ?");
+            preparedStatement.setLong(1,id);
+            // 执行sql
+            resultSet = preparedStatement.executeQuery();
+            if(resultSet.next()){
+                Integral integral = new Integral();
+                integral.setId(resultSet.getLong("id"));
+                integral.setBalance(resultSet.getInt("balance"));
+                integral.setUserId(resultSet.getLong("user_id"));
+                return integral;
+            }
+            return null;
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        } finally {
+            JDBCUtil.close(conn, preparedStatement, resultSet);
+        }
+    }
+
+    @Override
+    public void add(Integral integral) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.prepareStatement("insert into integral (user_id,balance) values(?,?)");
+            preparedStatement.setLong(1,integral.getUserId());
+            preparedStatement.setInt(2,integral.getBalance());
+            // 执行sql
+            preparedStatement.executeUpdate();
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        } finally {
+            JDBCUtil.close(conn, preparedStatement, resultSet);
+        }
+    }
+
+    @Override
+    public void update(Integral integral) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.
+                    prepareStatement("update integral set user_id=?,balance=? where id =?");
+            preparedStatement.setLong(1,integral.getUserId());
+            preparedStatement.setInt(2,integral.getBalance());
+            preparedStatement.setLong(3,integral.getId());
+            // 执行sql
+            preparedStatement.executeUpdate();
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        } finally {
+            JDBCUtil.close(conn, preparedStatement, resultSet);
+        }
+    }
+}

+ 45 - 0
shop-order/src/com/sf/dao/impl/OrderDAOImpl.java

@@ -0,0 +1,45 @@
+package com.sf.dao.impl;
+
+import com.sf.dao.IOrderDAO;
+import com.sf.domain.Order;
+import com.sf.util.JDBCUtil;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class OrderDAOImpl implements IOrderDAO {
+    @Override
+    public void insert(Order order) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.prepareStatement("insert into t_order " +
+                    "(orderName,createTime,user_id,buy_count,price,title) " +
+                    "values(?,?,?,?,?,?)");
+            // 设置参数
+            preparedStatement.setString(1,order.getOrderName());
+            /**
+             * 一种思路是把java.util.Date ->  sql.Date
+             *
+             * 另外一种思路我们Date 也使用java.sql.Date
+             */
+            preparedStatement.setDate(2,order.getCreatTime());
+            preparedStatement.setLong(3,order.getUserId());
+            preparedStatement.setInt(4,order.getBuyCount());
+            preparedStatement.setBigDecimal(5,order.getPrice());
+            preparedStatement.setString(6,order.getTitle());
+            // 执行sql
+            preparedStatement.executeUpdate();
+
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(conn,preparedStatement,resultSet);
+        }
+    }
+}

+ 45 - 0
shop-order/src/com/sf/dao/impl/PrizeDAOImpl.java

@@ -0,0 +1,45 @@
+package com.sf.dao.impl;
+
+import com.sf.dao.IPrizeDAO;
+import com.sf.domain.Prize;
+import com.sf.domain.User;
+import com.sf.util.JDBCUtil;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class PrizeDAOImpl implements IPrizeDAO {
+    @Override
+    public List<Prize> list() {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.
+                    prepareStatement("select * from prize");
+            // 设置参数
+            // 执行sql
+            resultSet = preparedStatement.executeQuery();
+            List<Prize> list = new ArrayList<>();
+            while (resultSet.next()){
+                Prize prize = new Prize();
+                prize.setPrizeName(resultSet.getString("prizeName"));
+                prize.setPrizeUrl(resultSet.getString("prizeUrl"));
+                prize.setInfo(resultSet.getString("info"));
+                prize.setId(resultSet.getLong("id"));
+                list.add(prize);
+            }
+            return list;
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(conn,preparedStatement,resultSet);
+        }
+    }
+}

+ 67 - 0
shop-order/src/com/sf/dao/impl/PrizeLogDAOImpl.java

@@ -0,0 +1,67 @@
+package com.sf.dao.impl;
+
+import com.sf.dao.IPrizeLogDAO;
+import com.sf.domain.Prize;
+import com.sf.domain.PrizeLog;
+import com.sf.util.JDBCUtil;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class PrizeLogDAOImpl implements IPrizeLogDAO {
+    @Override
+    public List<PrizeLog> selectListByUserId(Long userId) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.
+                    prepareStatement("select * from prizelog where userId = ?");
+            preparedStatement.setLong(1,userId);
+            // 设置参数
+            // 执行sql
+            resultSet = preparedStatement.executeQuery();
+            List<PrizeLog> list = new ArrayList<>();
+            while (resultSet.next()){
+                PrizeLog prize = new PrizeLog();
+                prize.setId(resultSet.getLong("id"));
+                prize.setPrizeId(resultSet.getLong("prize_id"));
+                prize.setUserId(resultSet.getLong("userId"));
+                list.add(prize);
+            }
+            return list;
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(conn,preparedStatement,resultSet);
+        }
+    }
+
+    @Override
+    public void insertPrizeLog(PrizeLog prizeLog) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.
+                    prepareStatement("insert into prizelog (userId,prize_id) values(?,?)");
+            preparedStatement.setLong(1,prizeLog.getUserId());
+            preparedStatement.setLong(2,prizeLog.getPrizeId());
+            // 设置参数
+            // 执行sql
+            preparedStatement.executeUpdate();
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(conn,preparedStatement,resultSet);
+        }
+    }
+}

+ 63 - 0
shop-order/src/com/sf/dao/impl/ProductDAOImpl.java

@@ -0,0 +1,63 @@
+package com.sf.dao.impl;
+
+import com.sf.dao.IProductDAO;
+import com.sf.domain.Product;
+import com.sf.domain.User;
+import com.sf.util.JDBCUtil;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class ProductDAOImpl implements IProductDAO {
+    @Override
+    public Product get(Long id) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.prepareStatement("select * from product where id = ?");
+            preparedStatement.setLong(1, id);
+            // 执行sql
+            resultSet = preparedStatement.executeQuery();
+            if (resultSet.next()) {
+                Product product = new Product();
+                product.setId(resultSet.getLong("id"));
+                product.setProductName(resultSet.getString("productName"));
+                product.setTitle(resultSet.getString("title"));
+                product.setProductUrl(resultSet.getString("productUrl"));
+                product.setPrice(resultSet.getBigDecimal("price"));
+                product.setStocket(resultSet.getInt("stocket"));
+                return product;
+            }
+            return null;
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        } finally {
+            JDBCUtil.close(conn, preparedStatement, resultSet);
+        }
+    }
+
+    @Override
+    public void updateStockById(Long id, Integer stock) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+            preparedStatement = conn.prepareStatement("update product set stocket = stocket - ? where id =?");
+            preparedStatement.setInt(1,stock);
+            preparedStatement.setLong(2,id);
+            // 执行sql
+            preparedStatement.executeUpdate();
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        } finally {
+            JDBCUtil.close(conn, preparedStatement, resultSet);
+        }
+    }
+}

+ 42 - 0
shop-order/src/com/sf/dao/impl/UserDAOImpl.java

@@ -0,0 +1,42 @@
+package com.sf.dao.impl;
+
+import com.sf.dao.IUserDAO;
+import com.sf.domain.User;
+import com.sf.util.JDBCUtil;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class UserDAOImpl implements IUserDAO {
+
+    @Override
+    public User login(String username, String password) {
+        // 获取连接对象
+        Connection conn = JDBCUtil.getConn();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建预编译语句
+        try {
+             preparedStatement = conn.prepareStatement("select * from t_user where username=?and password=?");
+            // 设置参数
+            preparedStatement.setString(1,username);
+            preparedStatement.setString(2,password);
+            // 执行sql
+            resultSet = preparedStatement.executeQuery();
+            if(resultSet.next()){
+                User user = new User();
+                user.setId(resultSet.getLong("id"));
+                user.setUsername(resultSet.getString("username"));
+                user.setPassword(resultSet.getString("password"));
+                return user;
+            }
+            return null;
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }finally {
+            JDBCUtil.close(conn,preparedStatement,resultSet);
+        }
+    }
+}

+ 15 - 0
shop-order/src/com/sf/domain/Account.java

@@ -0,0 +1,15 @@
+package com.sf.domain;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 账户余额信息表
+ */
+@Data
+public class Account {
+    private Long id;
+    private Long userId;
+    private BigDecimal amount;
+}

+ 10 - 0
shop-order/src/com/sf/domain/Integral.java

@@ -0,0 +1,10 @@
+package com.sf.domain;
+
+import lombok.Data;
+
+@Data
+public class Integral {
+    private Long id;
+    private Long userId;
+    private Integer balance;
+}

+ 23 - 0
shop-order/src/com/sf/domain/Order.java

@@ -0,0 +1,23 @@
+package com.sf.domain;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+
+@Data
+public class Order {
+    private Long id;
+    // 订单名称
+    private String orderName;
+    // 创建时间
+    private Date creatTime;
+    // 用户id
+    private Long userId;
+    // 购买数量
+    private Integer buyCount;
+    // 订单总价
+    private BigDecimal price;
+    // 商品描述
+    private String title;
+}

+ 14 - 0
shop-order/src/com/sf/domain/Prize.java

@@ -0,0 +1,14 @@
+package com.sf.domain;
+
+import lombok.Data;
+
+@Data
+public class Prize {
+    private Long id;
+    // 奖品名称
+    private String prizeName;
+    // 奖品url图片地址
+    private String prizeUrl;
+    // 奖品备注信息
+    private String info;
+}

+ 10 - 0
shop-order/src/com/sf/domain/PrizeLog.java

@@ -0,0 +1,10 @@
+package com.sf.domain;
+
+import lombok.Data;
+
+@Data
+public class PrizeLog {
+    private Long id;
+    private Long userId;
+    private Long prizeId;
+}

+ 21 - 0
shop-order/src/com/sf/domain/Product.java

@@ -0,0 +1,21 @@
+package com.sf.domain;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class Product {
+    private Long id;
+    // 商品名称
+    private String productName;
+    // 商品库存
+    private Integer stocket;
+    // 商品描述
+    private String title;
+    // 商品图片地址
+    private String productUrl;
+    // 商品单价
+    private BigDecimal price;
+
+}

+ 13 - 0
shop-order/src/com/sf/domain/User.java

@@ -0,0 +1,13 @@
+package com.sf.domain;
+
+import lombok.Data;
+
+@Data
+public class User {
+
+    private Long id;
+    // 用户名
+    private String username;
+    // 用户密码
+    private String password;
+}

+ 69 - 0
shop-order/src/com/sf/test/PrizeManager.java

@@ -0,0 +1,69 @@
+package com.sf.test;
+
+import com.sf.dao.IPrizeDAO;
+import com.sf.dao.IPrizeLogDAO;
+import com.sf.dao.IUserDAO;
+import com.sf.dao.impl.PrizeDAOImpl;
+import com.sf.dao.impl.PrizeLogDAOImpl;
+import com.sf.dao.impl.UserDAOImpl;
+import com.sf.domain.Prize;
+import com.sf.domain.PrizeLog;
+import com.sf.domain.User;
+
+import java.util.List;
+import java.util.Random;
+import java.util.Scanner;
+
+public class PrizeManager {
+    public static void main(String[] args) {
+        // 先创建Scanner 录入账号和密码
+        Scanner scanner = new Scanner(System.in);
+        // 根据输入账号和密码上数据库当中查询数据
+        IUserDAO userDAO = new UserDAOImpl();
+        User user;
+        while (true){
+            System.out.println("请输入账号");
+            String username = scanner.next();
+            System.out.println("请输入密码");
+            String password = scanner.next();
+            user = userDAO.login(username, password);
+            if(user !=null){
+                System.out.println("登录成功");
+                break;
+            }else{
+                System.out.println("登录失败");
+            }
+        }
+
+        System.out.println("是否确定开始抽奖,如果确定点击确定");
+        String inputInfo = scanner.next();
+        if(!inputInfo.equals("确定")){
+            System.out.println("输入信息不对 , 请输入确定");
+            return;
+        }
+        // 查询出来所有奖品信息
+        IPrizeDAO prizeDAO = new PrizeDAOImpl();
+        List<Prize> list = prizeDAO.list();
+        // 创建出来一个随机数, 这个随机数范围是在list 索引区间
+        Random random = new Random();
+        int index = random.nextInt(list.size());
+        // 此次用户抽取奖品信息
+        Prize prize = list.get(index);
+        System.out.println(prize);
+        // 根据用户id 去奖品记录表中去查询数据看是否有数据
+        IPrizeLogDAO prizeLogDAO = new PrizeLogDAOImpl();
+        List<PrizeLog> prizeLogs = prizeLogDAO.selectListByUserId(user.getId());
+        System.out.println("用户:"+user.getId() +"已经抽取了"+prizeLogs.size()+"次");
+        // 只要prizeLogs.size <= 3 都可以进行添加
+        if(prizeLogs.size()<3){
+            PrizeLog prizeLog = new PrizeLog();
+            prizeLog.setUserId(user.getId());
+            prizeLog.setPrizeId(prize.getId());
+            prizeLogDAO.insertPrizeLog(prizeLog);
+            System.out.println("插入记录成功");
+        }else{
+            System.out.println("您已经抽了3次了 到达抽奖上限");
+        }
+
+    }
+}

+ 102 - 0
shop-order/src/com/sf/test/ShopTest.java

@@ -0,0 +1,102 @@
+package com.sf.test;
+
+import com.sf.dao.*;
+import com.sf.dao.impl.*;
+import com.sf.domain.*;
+import com.sun.org.apache.xpath.internal.operations.Or;
+
+import java.math.BigDecimal;
+import java.util.Scanner;
+
+public class ShopTest {
+
+    public static void main(String[] args) {
+        // 先创建Scanner 录入账号和密码
+        Scanner scanner = new Scanner(System.in);
+        // 根据输入账号和密码上数据库当中查询数据
+        IUserDAO userDAO = new UserDAOImpl();
+        User user;
+        while (true){
+            System.out.println("请输入账号");
+            String username = scanner.next();
+            System.out.println("请输入密码");
+            String password = scanner.next();
+            user = userDAO.login(username, password);
+            if(user !=null){
+                System.out.println("登录成功");
+                break;
+            }else{
+                System.out.println("登录失败");
+            }
+        }
+        System.out.println("请输入购买商品id");
+        // 用户输入的商品id
+        long inputProductId = scanner.nextLong();
+        System.out.println("请输入购买商品数量");
+        // 用户输入的库存
+        int inputStock = scanner.nextInt();
+        IProductDAO productDAO = new ProductDAOImpl();
+        // 根据商品id 查询商品信息
+        Product product = productDAO.get(inputProductId);
+        // 判断商品是否存在
+        if(product == null){
+            System.out.println("商品不存在");
+            return;
+        }
+        // 判断商品库存是否足够
+        if(product.getStocket() < inputStock){
+            System.out.println("商品库存不足");
+            return;
+        }
+        // 根据用户id 查询用户余额信息表 account 表
+        IAccountDAO accountDAO = new IAccountDAOImpl();
+        // 根据当前登录用户id查询账户信息
+        Account account = accountDAO.get(user.getId());
+        System.out.println("账户还剩:"+ account.getAmount()+"元");
+        // 判断账户余额是否足够
+        int totalPrice = product.getPrice().intValue() * inputStock;
+        System.out.println("此次一共需要花费:"+ totalPrice+"元");
+        // bigdecmial  compare     bigdecmail-> int  比较
+        if(account.getAmount().intValue() < totalPrice){
+            System.out.println("账户余额不足");
+            return;
+        }
+        // 如果走到这里说用户账户余额是充足可以进行扣减
+        // 根据用户id 减少余额
+        accountDAO.updateAmountByUserId(user.getId(),new BigDecimal(totalPrice));
+        System.out.println("账号余额已更新");
+        // 保存订单信息
+        IOrderDAO orderDAO = new OrderDAOImpl();
+        // 封装订单信息
+        Order order = new Order();
+        order.setOrderName(product.getProductName());
+        order.setTitle(product.getTitle());
+        order.setUserId(user.getId());
+        order.setBuyCount(inputStock);
+        order.setPrice(new BigDecimal(totalPrice));
+        // 获取当前系统时间的毫秒值
+        long currentTimeMillis = System.currentTimeMillis();
+        // 用毫秒值创建 java.sql.Date
+        java.sql.Date sqlDate = new java.sql.Date(currentTimeMillis);
+        order.setCreatTime(sqlDate);
+        // 把订单信息保存到数据库中
+        orderDAO.insert(order);
+        System.out.println("订单保存成功");
+        // 减少product 表当中库存信息
+        productDAO.updateStockById(product.getId(),inputStock);
+        // 根据当前用户id 查询积分表中是否有积分信息
+        IntegralDAO integralDAO = new IntegralDAOImpl();
+        Integral integral = integralDAO.get(user.getId());
+        // 如果没有 就进行新增操作
+        if(integral == null){
+            integral = new Integral();
+            integral.setUserId(user.getId());
+            integral.setBalance(totalPrice/10);
+            integralDAO.add(integral);
+        }else{
+            // 如果有的话我们进行更新的操作
+            integral.setBalance(integral.getBalance() + totalPrice/10);
+            integralDAO.update(integral);
+        }
+    }
+}

+ 72 - 0
shop-order/src/com/sf/util/JDBCUtil.java

@@ -0,0 +1,72 @@
+package com.sf.util;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.pool.DruidDataSourceFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.*;
+import java.util.Properties;
+
+public class JDBCUtil {
+    static Properties properties;
+    static DruidDataSource dataSource;
+    static {
+        InputStream inputStream = Thread.currentThread().getContextClassLoader().
+                getResourceAsStream("db.properties");
+        properties = new Properties();
+        try {
+            properties.load(inputStream);
+            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
+            // 设置连接池初始化连接数
+            dataSource.setInitialSize(5);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 获取连接对象方法
+     *
+     */
+    public static Connection getConn(){
+        try {
+            //从连接池获取连接信息就可以了
+            return dataSource.getConnection();
+
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    /**
+     * 关闭资源方法
+      * @param connection
+     * @param statement
+     * @param resultSet
+     */
+    public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet){
+        if(connection!=null){
+            try {
+                connection.close();
+            } catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        if(statement!=null){
+            try {
+                statement.close();
+            } catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        if(resultSet!=null){
+            try {
+                resultSet.close();
+            } catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+}