fanjialong 8 mesiacov pred
rodič
commit
cdb4888664
44 zmenil súbory, kde vykonal 2030 pridanie a 0 odobranie
  1. 8 0
      src/main/java/com/sf/day27/_02_dao/dao/OrderDAO.java
  2. 20 0
      src/main/java/com/sf/day27/_02_dao/dao/impl/OrderDAOImpl.java
  3. 19 0
      src/main/java/com/sf/day28/dao/IAccountDAO.java
  4. 13 0
      src/main/java/com/sf/day28/dao/ICityDAO.java
  5. 33 0
      src/main/java/com/sf/day28/dao/IUserDAO.java
  6. 8 0
      src/main/java/com/sf/day28/dao/IntegralDAO.java
  7. 92 0
      src/main/java/com/sf/day28/dao/impl/AccountDAOImpl.java
  8. 124 0
      src/main/java/com/sf/day28/dao/impl/CityDAOImpl.java
  9. 47 0
      src/main/java/com/sf/day28/dao/impl/IntegralDAOImpl.java
  10. 155 0
      src/main/java/com/sf/day28/dao/impl/UserDAOImpl.java
  11. 17 0
      src/main/java/com/sf/day28/domain/Account.java
  12. 14 0
      src/main/java/com/sf/day28/domain/City.java
  13. 14 0
      src/main/java/com/sf/day28/domain/Integral.java
  14. 16 0
      src/main/java/com/sf/day28/domain/User.java
  15. 45 0
      src/main/java/com/sf/day28/util/DruidUtil.java
  16. 78 0
      src/main/java/com/sf/day28/util/JDBCUtil.java
  17. 12 0
      src/main/java/com/sf/day29/dao/ICarShopDAO.java
  18. 46 0
      src/main/java/com/sf/day29/dao/IEmployeeDAO.java
  19. 47 0
      src/main/java/com/sf/day29/dao/impl/CarShopDAOImpl.java
  20. 227 0
      src/main/java/com/sf/day29/dao/impl/EmployeeDAOImpl.java
  21. 19 0
      src/main/java/com/sf/day29/domain/CarShop.java
  22. 20 0
      src/main/java/com/sf/day29/domain/Employee.java
  23. 53 0
      src/main/java/com/sf/day29/html/01-hello.html
  24. 37 0
      src/main/java/com/sf/day29/html/02-html的属性练习.html
  25. 65 0
      src/main/java/com/sf/day29/html/03-常见的html 标签.html
  26. 23 0
      src/main/java/com/sf/day29/html/04-常见标签练习.html
  27. 43 0
      src/main/java/com/sf/day29/html/05-常见标签练习.html
  28. 16 0
      src/main/java/com/sf/day29/html/06-超链接.html
  29. 23 0
      src/main/java/com/sf/day29/html/07-超链接锚点练习.html
  30. 52 0
      src/main/java/com/sf/day29/html/08-无序列表.html
  31. 11 0
      src/main/java/com/sf/day29/html/09-Html练习.html
  32. 26 0
      src/main/java/com/sf/day29/html/register.html
  33. 27 0
      src/main/java/com/sf/day30/_01_html/01-图片img.html
  34. 43 0
      src/main/java/com/sf/day30/_01_html/02-table表格.html
  35. 31 0
      src/main/java/com/sf/day30/_01_html/03-table表格练习.html
  36. 36 0
      src/main/java/com/sf/day30/_01_html/04-form表单.html
  37. 111 0
      src/main/java/com/sf/day30/_01_html/05-form 表单练习.html
  38. 34 0
      src/main/java/com/sf/day30/_01_html/06-select 下拉框.html
  39. 13 0
      src/main/java/com/sf/day30/_01_html/07-文本域标签textare.html
  40. BIN
      src/main/java/com/sf/day30/_01_html/png/1.png
  41. BIN
      src/main/java/com/sf/day30/_01_html/png/百度.png
  42. 101 0
      src/main/java/com/sf/day30/_02_html_contact/input.html
  43. 146 0
      src/main/java/com/sf/day30/_02_html_contact/list.html
  44. 65 0
      src/main/java/com/sf/day30/_02_html_contact/login.html

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

@@ -1,10 +1,18 @@
 package com.sf.day27._02_dao.dao;
 
+import com.sf.day27._01_jdbc_concat.domain.Order;
+
 public interface OrderDAO {
     /**
      * 根据用户id 修改状态为支付状态 由0->
      * @param userId
      */
     void updateOrderStatus(Long userId);
+
+    /**
+     * 把订单信息保存到数据库中
+     * @param order
+     */
+    void insert(Order order);
 }
 

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

@@ -1,6 +1,8 @@
 package com.sf.day27._02_dao.dao.impl;
 
+import com.sf.day27._01_jdbc_concat.domain.Order;
 import com.sf.day27._02_dao.dao.OrderDAO;
+import com.sf.day28.util.JDBCUtil;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -45,4 +47,22 @@ public class OrderDAOImpl implements OrderDAO {
             }
         }
     }
+
+    @Override
+    public void insert(Order order) {
+        Connection connection = JDBCUtil.getConnection();
+        PreparedStatement preparedStatement =null;
+        String sql = "insert into t_order (productName,price,user_id) values(?,?,?)";
+        try {
+             preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setString(1,order.getProductName());
+            preparedStatement.setBigDecimal(2,order.getPrice());
+            preparedStatement.setLong(3,order.getUser_id());
+            preparedStatement.executeUpdate();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }finally {
+            JDBCUtil.close(connection,null,preparedStatement);
+        }
+    }
 }

+ 19 - 0
src/main/java/com/sf/day28/dao/IAccountDAO.java

@@ -0,0 +1,19 @@
+package com.sf.day28.dao;
+
+import java.math.BigDecimal;
+
+public interface IAccountDAO {
+
+    /**
+     * 转账方法
+     */
+    void trans(String fromName,String toName,BigDecimal amount);
+
+
+    /**
+     * 查询余额方法
+     *  id : 转账人id
+     *  amount: 要转的金额
+     */
+    boolean checkAccount(String name, BigDecimal amount);
+}

+ 13 - 0
src/main/java/com/sf/day28/dao/ICityDAO.java

@@ -0,0 +1,13 @@
+package com.sf.day28.dao;
+
+import com.sf.day28.domain.City;
+
+import java.util.List;
+
+public interface ICityDAO {
+
+    // 查询所有省
+    List<City> queryByProvince();
+    // 查询指定省下面的市
+    List<City> queryByCity(Long provinceId);
+}

+ 33 - 0
src/main/java/com/sf/day28/dao/IUserDAO.java

@@ -0,0 +1,33 @@
+package com.sf.day28.dao;
+
+import com.sf.day28.domain.User;
+
+import java.util.List;
+
+public interface IUserDAO {
+    /**
+     * 新增
+     */
+    void insert(User user);
+
+    /**
+     * 编辑
+     */
+    void update(User user);
+
+    /**
+     * 删除
+     */
+    void delete(Long id);
+
+    /**
+     * 查询单个
+     */
+
+    User get(Long id);
+
+    /**
+     * 查询所有
+     */
+    List<User> list();
+}

+ 8 - 0
src/main/java/com/sf/day28/dao/IntegralDAO.java

@@ -0,0 +1,8 @@
+package com.sf.day28.dao;
+
+public interface IntegralDAO {
+    /**
+     * 要提供加积分方法
+     */
+    void increIntegral(Long userId,Integer itegral);
+}

+ 92 - 0
src/main/java/com/sf/day28/dao/impl/AccountDAOImpl.java

@@ -0,0 +1,92 @@
+package com.sf.day28.dao.impl;
+
+import com.sf.day28.dao.IAccountDAO;
+import com.sf.day28.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 IAccountDAO {
+
+    /**
+     * 需求: 谁 name 转给 谁 name   amount
+     * @param fromName  转账人名字
+     * @param toName    收款人名字
+     * @param amount    转账金额
+     */
+    @Override
+    public void trans(String fromName, String toName, BigDecimal amount) {
+        Connection connection = JDBCUtil.getConnection();
+        PreparedStatement preparedStatement = null;
+
+
+        try {
+            /**
+             * 我们出现 一个少了一个没有加 ,现在数据出现了不一致  , 这就是我们事务要解决的问题
+             *
+             * 事务: 他可以控制多个操作看成一个整体,  这个整体包含多个小的步骤 , 当中如果有一个小步骤失败了
+             *  那么整个操作都失败, 数据要进行回滚 , 所有的步骤都成功, 才算成功
+             */
+            // 先转出
+            // 把自动提交事务操作修改成手动提交
+            connection.setAutoCommit(false);
+            String outSQL = "update t_account set amount = amount-? where name= ?";
+            preparedStatement = connection.prepareStatement(outSQL);
+            preparedStatement.setBigDecimal(1,amount);
+            preparedStatement.setString(2,fromName);
+            preparedStatement.executeUpdate();
+
+            // 在转入
+            String intSQL = "update t_account set amount = amount+? where name= ?";
+            preparedStatement = connection.prepareStatement(intSQL);
+            preparedStatement.setBigDecimal(1,amount);
+            preparedStatement.setString(2,toName);
+
+//            int i =  1/0;    // 模拟断电的情况
+            preparedStatement.executeUpdate();
+            // 提交事务
+            connection.commit();
+        } catch (Exception e) {
+            e.printStackTrace();
+            // 回顾事务
+            try {
+                connection.rollback();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
+        }finally {
+            JDBCUtil.close(connection,null,preparedStatement);
+        }
+
+    }
+
+    //根据用户名字查询用户余额是否足够   名字   amount
+    @Override
+    public boolean checkAccount(String name, BigDecimal amount) {
+        // 获取连接对象
+        Connection connection = JDBCUtil.getConnection();
+        String sql = "select * from t_account where name = ? and amount >= ?";
+        // 创建语句对象
+        PreparedStatement preparedStatement = null;
+        try {
+             preparedStatement = connection.prepareStatement(sql);
+             // 设置sql 参数
+            preparedStatement.setString(1,name);
+            preparedStatement.setBigDecimal(2,amount);
+            // 执行sql
+            ResultSet resultSet = preparedStatement.executeQuery();
+            if(resultSet.next()){
+                return true;
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+
+        }finally {
+            JDBCUtil.close(connection,null,preparedStatement);
+        }
+        return false;
+    }
+}

+ 124 - 0
src/main/java/com/sf/day28/dao/impl/CityDAOImpl.java

@@ -0,0 +1,124 @@
+package com.sf.day28.dao.impl;
+
+import com.sf.day28.dao.ICityDAO;
+import com.sf.day28.domain.City;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+
+public class CityDAOImpl implements ICityDAO {
+
+    @Override
+    public List<City> queryByProvince() {
+        // 查询所有省 , 省parent_id null 所以我们只需要查询为null 就可以了
+        // 加载驱动
+        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 city where parent_id is null ";
+            preparedStatement = connection.prepareStatement(sql);
+            // 执行sql语句
+            resultSet = preparedStatement.executeQuery();
+            List<City> list = new ArrayList<>();
+            while (resultSet.next()){
+                City city = new City();
+                city.setId(resultSet.getLong("id"));
+                city.setName(resultSet.getString("name"));
+                city.setParentId(resultSet.getLong("parent_id"));
+                list.add(city);
+            }
+            // 关闭资源
+            return list;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            try{
+                if (connection!=null){
+                    connection.close();
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+            try{
+                if (preparedStatement!=null){
+                    preparedStatement.close();
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+
+            try{
+                if (resultSet!=null){
+                    resultSet.close();
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public List<City> queryByCity(Long provinceId) {
+        // 如何查询省下面市 ,  根据省id 去查询, 查询parent_id =  provinceId
+        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 city where parent_id = ? ";
+            preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setLong(1,provinceId);
+            // 执行sql语句
+            resultSet = preparedStatement.executeQuery();
+            List<City> list = new ArrayList<>();
+            while (resultSet.next()){
+                City city = new City();
+                city.setId(resultSet.getLong("id"));
+                city.setName(resultSet.getString("name"));
+                city.setParentId(resultSet.getLong("parent_id"));
+                list.add(city);
+            }
+            // 关闭资源
+            return list;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            try{
+                if (connection!=null){
+                    connection.close();
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+            try{
+                if (preparedStatement!=null){
+                    preparedStatement.close();
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+
+            try{
+                if (resultSet!=null){
+                    resultSet.close();
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+}

+ 47 - 0
src/main/java/com/sf/day28/dao/impl/IntegralDAOImpl.java

@@ -0,0 +1,47 @@
+package com.sf.day28.dao.impl;
+
+import com.sf.day28.dao.IntegralDAO;
+import com.sf.day28.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 void increIntegral(Long userId, Integer itegral) {
+        // 根据userId 查询积分表是否有数据
+        Connection connection = JDBCUtil.getConnection();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        String selectSQL = "select * from integral where user_id = ?";
+        try {
+            preparedStatement = connection.prepareStatement(selectSQL);
+            preparedStatement.setLong(1,userId);
+            resultSet = preparedStatement.executeQuery();
+            if(resultSet.next()){
+                // 如果有数据, 就update修改
+                String updateSQL = "update integral set integral = integral + ? where user_id = ?";
+                PreparedStatement updatePST = connection.prepareStatement(updateSQL);
+                updatePST.setInt(1,itegral);
+                updatePST.setLong(2,userId);
+                updatePST.executeUpdate();
+            }else{
+                // 如果没有数据, 就新增
+                String insertSQL = "insert into integral (user_id,integral) values(?,?)";
+                PreparedStatement insertPST = connection.prepareStatement(insertSQL);
+                insertPST.setLong(1,userId);
+                insertPST.setInt(2,itegral);
+                insertPST.executeUpdate();
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }finally {
+           JDBCUtil.close(connection,resultSet,preparedStatement);
+        }
+
+    }
+}

+ 155 - 0
src/main/java/com/sf/day28/dao/impl/UserDAOImpl.java

@@ -0,0 +1,155 @@
+package com.sf.day28.dao.impl;
+
+import com.alibaba.druid.pool.DruidPooledConnection;
+import com.sf.day28.dao.IUserDAO;
+import com.sf.day28.domain.User;
+import com.sf.day28.util.DruidUtil;
+import com.sf.day28.util.JDBCUtil;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+
+public class UserDAOImpl implements IUserDAO {
+    @Override
+    public void insert(User user) {
+        // 加载驱动
+        Connection connection =null;
+        PreparedStatement preparedStatement =null;
+        try {
+            connection = JDBCUtil.getConnection();
+            // 创建语句对象
+            String sql = "insert into user(name,age,email,password) values(?,?,?,?)";
+            preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setString(1,user.getName());
+            preparedStatement.setInt(2,user.getAge());
+            preparedStatement.setString(3,user.getEmail());
+            preparedStatement.setString(4,user.getPassword());
+            // 执行sql语句
+            preparedStatement.executeUpdate();
+            // 关闭资源
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            JDBCUtil.close(connection,null,preparedStatement);
+        }
+
+    }
+
+    @Override
+    public void update(User user) {
+        // 加载驱动
+        Connection connection =null;
+        PreparedStatement preparedStatement =null;
+        try {
+            connection = JDBCUtil.getConnection();
+            // 创建语句对象
+            String sql = "update user set name=?,age=?,email=?,password=?  where id = ?";
+            preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setString(1,user.getName());
+            preparedStatement.setInt(2,user.getAge());
+            preparedStatement.setString(3,user.getEmail());
+            preparedStatement.setString(4,user.getPassword());
+            preparedStatement.setLong(5,user.getId());
+            // 执行sql语句
+            preparedStatement.executeUpdate();
+            // 关闭资源
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            JDBCUtil.close(connection,null,preparedStatement);
+        }
+    }
+
+    @Override
+    public void delete(Long id) {
+        // 加载驱动
+        Connection connection =null;
+        PreparedStatement preparedStatement =null;
+        try {
+            connection = JDBCUtil.getConnection();
+             // 创建语句对象
+            String sql = "delete from user where id = ?";
+            preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setLong(1,id);
+            // 执行sql语句
+            preparedStatement.executeUpdate();
+            // 关闭资源
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            JDBCUtil.close(connection,null,preparedStatement);
+        }
+    }
+
+    @Override
+    public User get(Long id) {
+        // 加载驱动
+        Connection connection =null;
+        PreparedStatement preparedStatement =null;
+        ResultSet resultSet = null;
+        try {
+            connection = JDBCUtil.getConnection();
+            // 创建语句对象
+            String sql = "select * from user where id = ?";
+            preparedStatement = connection.prepareStatement(sql);
+            preparedStatement.setLong(1,id);
+            // 执行sql语句
+            resultSet = preparedStatement.executeQuery();
+            User user = new User();
+            if(resultSet.next()){
+                user.setName(resultSet.getString("name"));
+                user.setPassword(resultSet.getString("password"));
+                user.setEmail(resultSet.getString("email"));
+                user.setId(resultSet.getLong("id"));
+                user.setAge(resultSet.getInt("age"));
+            }
+            // 关闭资源
+            return user;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            JDBCUtil.close(connection,resultSet,preparedStatement);
+        }
+        return null;
+    }
+
+    @Override
+    public List<User> list() {
+        // 加载驱动
+        DruidPooledConnection connection =null;
+        PreparedStatement preparedStatement =null;
+        ResultSet resultSet = null;
+        try {
+
+            // 通过德鲁伊连接池获取连接信息
+            connection = DruidUtil.getConection();
+
+            // 创建语句对象
+            String sql = "select * from user";
+            preparedStatement = connection.prepareStatement(sql);
+            // 执行sql语句
+            resultSet = preparedStatement.executeQuery();
+            List<User> list = new ArrayList<>();
+            while (resultSet.next()){
+                User user = new User();
+                user.setName(resultSet.getString("name"));
+                user.setPassword(resultSet.getString("password"));
+                user.setEmail(resultSet.getString("email"));
+                user.setId(resultSet.getLong("id"));
+                user.setAge(resultSet.getInt("age"));
+                list.add(user);
+            }
+            // 关闭资源
+            return list;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            JDBCUtil.close(connection,resultSet,preparedStatement);
+        }
+        return null;
+    }
+}

+ 17 - 0
src/main/java/com/sf/day28/domain/Account.java

@@ -0,0 +1,17 @@
+package com.sf.day28.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 amount;
+    private String name;
+}

+ 14 - 0
src/main/java/com/sf/day28/domain/City.java

@@ -0,0 +1,14 @@
+package com.sf.day28.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class City {
+    private Long id;
+    private String name;
+    private Long parentId;
+}

+ 14 - 0
src/main/java/com/sf/day28/domain/Integral.java

@@ -0,0 +1,14 @@
+package com.sf.day28.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Integral {
+    private Long id;
+    private Long userId;
+    private Integer integral;
+}

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

@@ -0,0 +1,16 @@
+package com.sf.day28.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;
+}

+ 45 - 0
src/main/java/com/sf/day28/util/DruidUtil.java

@@ -0,0 +1,45 @@
+package com.sf.day28.util;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.pool.DruidPooledConnection;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.SQLException;
+import java.util.Properties;
+
+public class DruidUtil {
+    private static DruidDataSource druidDataSource = null;
+    static {
+        // 1 创建出来要给德鲁伊连接池
+        druidDataSource = new DruidDataSource();
+        // 因为连接池中药创建连接对象, 创建连接对象, 连接对象需要设置连接四要素
+        // 配置写死, 要加载配置文件当中信息
+        InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
+        Properties properties = new Properties();
+        try {
+            properties.load(resourceAsStream);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        druidDataSource.setDriverClassName(properties.getProperty("driverClassName"));
+        druidDataSource.setUsername(properties.getProperty("username"));
+        druidDataSource.setPassword(properties.getProperty("password"));
+        druidDataSource.setUrl(properties.getProperty("url"));
+
+        druidDataSource.setInitialSize(5);  //初始化创建连接的个数
+    }
+
+    public static DruidPooledConnection getConection(){
+
+
+        // 如何上连接池中获取连接对象
+        DruidPooledConnection connection = null;
+        try {
+            connection = druidDataSource.getConnection();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        return connection;
+    }
+}

+ 78 - 0
src/main/java/com/sf/day28/util/JDBCUtil.java

@@ -0,0 +1,78 @@
+package com.sf.day28.util;
+
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.Properties;
+
+public class JDBCUtil {
+    // 加载驱动的这个操作只需要执行一次就可以了
+    // 解决: 把加载驱动的操作放在静态代码块当中就可以解决了
+    // 配置信息硬编码问题 , 连接数据库4要素, 我们现在是在代码写死了, 后续如果我们数据库密码要修改
+    // 我们还需要重新修改java 代码
+    // 解决: 把配置信息存储到配置文件当中 db.properties
+    // 如何把配置文件当中信息, 设置对应位置中呢
+
+    private static Properties properties = null;
+    static {
+        try {
+            InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
+            properties = new Properties();
+            // 调用load 方法加载我们属性信息
+            properties.load(inputStream);
+            // 加载驱动操作
+            Class.forName(properties.getProperty("driverClassName"));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    // 获取连接对象
+    public static Connection getConnection(){
+        Connection connection = null;
+        try {
+            // 获取连接对象
+            connection = DriverManager.getConnection(properties.getProperty("url"),
+                    properties.getProperty("username"),
+                    properties.getProperty("password"));
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return connection;
+
+    }
+
+    // 要关闭资源
+    // Connection PrepareStatemetn  Restset
+    // 问题: 查询的时候需要关闭RestSet  , 增删改的时候不需要关闭RestSet
+    public static void close(Connection connection , ResultSet resultSet, PreparedStatement preparedStatement){
+        try{
+            if (connection!=null){
+                connection.close();
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        try{
+            if (preparedStatement!=null){
+                preparedStatement.close();
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+        try{
+            if (resultSet!=null){
+                resultSet.close();
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+
+}

+ 12 - 0
src/main/java/com/sf/day29/dao/ICarShopDAO.java

@@ -0,0 +1,12 @@
+package com.sf.day29.dao;
+
+import com.sf.day29.domain.CarShop;
+
+import java.util.List;
+
+public interface ICarShopDAO {
+    /**
+     * 根据用户id 查询购物车信息
+     */
+    List<CarShop> selectCarShopsByEmpId(Long id);
+}

+ 46 - 0
src/main/java/com/sf/day29/dao/IEmployeeDAO.java

@@ -0,0 +1,46 @@
+package com.sf.day29.dao;
+
+import com.sf.day29.domain.Employee;
+
+import java.util.List;
+
+public interface IEmployeeDAO {
+    /**
+     * 新增
+     */
+    void insert(Employee employee);
+
+    /**
+     * 删除
+     */
+    void delete(Long id);
+
+    /**
+     * 修改
+     */
+    void update(Employee employee);
+
+    /**
+     * 查询单个
+     */
+    Employee get(Long id);
+
+    /**
+     * 查询所有
+     */
+    List<Employee> list();
+
+    /**
+     * 根据id 查询用户信息, 并且要查询出来这个用户所在的部门
+     */
+    Employee selectEmployeeInfo(Long id);
+
+    /**
+     * 登录查询
+     * @param username
+     * @param password
+     * @return
+     */
+    Employee login(String username, String password);
+
+}

+ 47 - 0
src/main/java/com/sf/day29/dao/impl/CarShopDAOImpl.java

@@ -0,0 +1,47 @@
+package com.sf.day29.dao.impl;
+
+import com.alibaba.druid.pool.DruidPooledConnection;
+import com.sf.day28.util.DruidUtil;
+import com.sf.day28.util.JDBCUtil;
+import com.sf.day29.dao.ICarShopDAO;
+import com.sf.day29.domain.CarShop;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class CarShopDAOImpl implements ICarShopDAO {
+    @Override
+    public List<CarShop> selectCarShopsByEmpId(Long id) {
+        // 获取连接对象
+        DruidPooledConnection conection = DruidUtil.getConection();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建SQL 语句
+        String sql = "select * from carShop where userId = ?";
+        try {
+            preparedStatement = conection.prepareStatement(sql);
+            preparedStatement.setLong(1,id);
+             resultSet = preparedStatement.executeQuery();
+            List<CarShop> list = new ArrayList<>();
+            while (resultSet.next()){
+                CarShop carShop = new CarShop();
+                carShop.setId(resultSet.getLong("id"));
+                carShop.setUserId(resultSet.getLong("userId"));
+                carShop.setProductName(resultSet.getString("productName"));
+                carShop.setPrice(resultSet.getBigDecimal("price"));
+                carShop.setStock(resultSet.getInt("stock"));
+                list.add(carShop);
+            }
+            return list;
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }finally {
+            JDBCUtil.close(conection,resultSet,preparedStatement);
+        }
+        return null;
+
+    }
+}

+ 227 - 0
src/main/java/com/sf/day29/dao/impl/EmployeeDAOImpl.java

@@ -0,0 +1,227 @@
+package com.sf.day29.dao.impl;
+
+import com.alibaba.druid.pool.DruidPooledConnection;
+import com.sf.day16._01_arrayList.dt.Department;
+import com.sf.day28.util.DruidUtil;
+import com.sf.day28.util.JDBCUtil;
+import com.sf.day29.dao.IEmployeeDAO;
+import com.sf.day29.domain.Employee;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class EmployeeDAOImpl implements IEmployeeDAO {
+
+    @Override
+    public void insert(Employee employee) {
+        // 获取连接对象
+        DruidPooledConnection conection = DruidUtil.getConection();
+        // 创建sql语句
+        String sql = "insert into employee (name,email,age,password,dept_id) values(?,?,?,?,?)";
+        PreparedStatement preparedStatement = null;
+        try {
+            preparedStatement = conection.prepareStatement(sql);
+            // 设置参数
+            preparedStatement.setString(1, employee.getName());
+            preparedStatement.setString(2, employee.getEmail());
+            preparedStatement.setInt(3, employee.getAge());
+            preparedStatement.setString(4, employee.getPassword());
+            preparedStatement.setLong(5, employee.getDeptId());
+            preparedStatement.executeUpdate();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } finally {
+            JDBCUtil.close(conection, null, preparedStatement);
+        }
+    }
+
+    @Override
+    public void delete(Long id) {
+// 获取连接对象
+        DruidPooledConnection conection = DruidUtil.getConection();
+        // 创建sql语句
+        String sql = "delete from employee where id = ?";
+        PreparedStatement preparedStatement = null;
+        try {
+            preparedStatement = conection.prepareStatement(sql);
+            // 设置参数
+            preparedStatement.setLong(1, id);
+            preparedStatement.executeUpdate();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } finally {
+            JDBCUtil.close(conection, null, preparedStatement);
+        }
+    }
+
+    @Override
+    public void update(Employee employee) {
+        DruidPooledConnection conection = DruidUtil.getConection();
+        // 创建sql语句
+        String sql = "update employee set name=? , age=? , email=? , password=? , dept_id = ? where id =?";
+        PreparedStatement preparedStatement = null;
+        try {
+            preparedStatement = conection.prepareStatement(sql);
+            // 设置参数
+            preparedStatement.setString(1, employee.getName());
+            preparedStatement.setInt(2, employee.getAge());
+            preparedStatement.setString(3, employee.getEmail());
+            preparedStatement.setString(4, employee.getPassword());
+            preparedStatement.setLong(5, employee.getDeptId());
+            preparedStatement.setLong(6, employee.getId());
+
+            preparedStatement.executeUpdate();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } finally {
+            JDBCUtil.close(conection, null, preparedStatement);
+        }
+    }
+
+    @Override
+    public Employee get(Long id) {
+        DruidPooledConnection conection = DruidUtil.getConection();
+        // 创建sql语句
+        String sql = "select * from employee where id =?";
+        PreparedStatement preparedStatement = null;
+        try {
+            preparedStatement = conection.prepareStatement(sql);
+            // 设置参数
+            preparedStatement.setLong(1, id);
+
+            ResultSet resultSet = preparedStatement.executeQuery();
+            if (resultSet.next()) {
+                Employee employee = new Employee();
+                employee.setAge(resultSet.getInt("age"));
+                employee.setEmail(resultSet.getString("email"));
+                employee.setPassword(resultSet.getString("password"));
+                employee.setName(resultSet.getString("name"));
+                employee.setDeptId(resultSet.getLong("dept_id"));
+                employee.setId(resultSet.getLong("id"));
+                return employee;
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } finally {
+            JDBCUtil.close(conection, null, preparedStatement);
+        }
+        return null;
+
+    }
+
+    @Override
+    public List<Employee> list() {
+        DruidPooledConnection conection = DruidUtil.getConection();
+        // 创建sql语句
+        String sql = "select * from employee";
+        PreparedStatement preparedStatement = null;
+        try {
+            preparedStatement = conection.prepareStatement(sql);
+
+            ResultSet resultSet = preparedStatement.executeQuery();
+            List<Employee> list = new ArrayList<>();
+            while (resultSet.next()) {
+                Employee employee = new Employee();
+                employee.setAge(resultSet.getInt("age"));
+                employee.setEmail(resultSet.getString("email"));
+                employee.setPassword(resultSet.getString("password"));
+                employee.setName(resultSet.getString("name"));
+                employee.setDeptId(resultSet.getLong("dept_id"));
+                employee.setId(resultSet.getLong("id"));
+                list.add(employee);
+            }
+            return list;
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } finally {
+            JDBCUtil.close(conection, null, preparedStatement);
+        }
+        return null;
+    }
+
+    @Override
+    public Employee selectEmployeeInfo(Long id) {
+        DruidPooledConnection conection = DruidUtil.getConection();
+        // 创建sql语句
+        String sql = "select * from employee where id =?";
+        PreparedStatement preparedStatement = null;
+        try {
+            preparedStatement = conection.prepareStatement(sql);
+            // 设置参数
+            preparedStatement.setLong(1, id);
+
+            ResultSet resultSet = preparedStatement.executeQuery();
+            if (resultSet.next()) {
+                Employee employee = new Employee();
+                employee.setAge(resultSet.getInt("age"));
+                employee.setEmail(resultSet.getString("email"));
+                employee.setPassword(resultSet.getString("password"));
+                employee.setName(resultSet.getString("name"));
+                employee.setDeptId(resultSet.getLong("dept_id"));
+                employee.setId(resultSet.getLong("id"));
+                // 根据部门id 查询部门信息 , 然后在把部门的信息设置到Employee 当中
+                long deptId = resultSet.getLong("dept_id");
+                // 查询出来结果是部门对象
+                String deptSql = "select * from department where id = ?";
+                PreparedStatement deptPst = conection.prepareStatement(deptSql);
+                deptPst.setLong(1, deptId);
+                ResultSet deptResult = deptPst.executeQuery();
+                // {id:1 , name : xxx ... dept_id: 1,dept:}   {id:1  , name: 开发部, sn: sdf}
+                if (deptResult.next()) {
+                    Department department = new Department();
+                    department.setName(deptResult.getString("name"));
+                    department.setSn(deptResult.getString("sn"));
+                    department.setId(deptResult.getLong("id"));
+
+                    // 最终要把department 设置到Employee 里面
+                    employee.setDept(department);
+                }
+
+                return employee;
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } finally {
+            JDBCUtil.close(conection, null, preparedStatement);
+        }
+        return null;
+    }
+
+    @Override
+    public Employee login(String username, String password) {
+        //获取连接对象
+        DruidPooledConnection conection = DruidUtil.getConection();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+        // 创建sql 语句
+        String sql = "select * from employee where name=? and password=?";
+        try {
+            preparedStatement = conection.prepareStatement(sql);
+            preparedStatement.setString(1, username);
+            preparedStatement.setString(2, password);
+            resultSet = preparedStatement.executeQuery();
+            if (resultSet.next()) {
+                Employee employee = new Employee();
+                employee.setAge(resultSet.getInt("age"));
+                employee.setEmail(resultSet.getString("email"));
+                employee.setPassword(resultSet.getString("password"));
+                employee.setName(resultSet.getString("name"));
+                employee.setDeptId(resultSet.getLong("dept_id"));
+                employee.setId(resultSet.getLong("id"));
+                // 根据部门id 查询部门信息 , 然后在把部门的信息设置到Employee 当中
+                long deptId = resultSet.getLong("dept_id");
+                return employee;
+            }
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } finally {
+            JDBCUtil.close(conection,resultSet,preparedStatement);
+        }
+        // 执行sql语句
+        // 释放资源
+        return null;
+    }
+}

+ 19 - 0
src/main/java/com/sf/day29/domain/CarShop.java

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

+ 20 - 0
src/main/java/com/sf/day29/domain/Employee.java

@@ -0,0 +1,20 @@
+package com.sf.day29.domain;
+
+import com.sf.day16._01_arrayList.dt.Department;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Employee {
+    private Long id;
+    private String name;
+    private String email;
+    private String password;
+    private Integer age;
+    private Long deptId;
+
+    private Department dept;
+}

+ 53 - 0
src/main/java/com/sf/day29/html/01-hello.html

@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>这是标题</title>
+    <!-- html 基本结构  CSS 样式   JS 动态效果    -->
+    <!-- html的代码写在body 标签里面 , CSS 的样式代码写在style标签中    -->
+    <!-- 如果要找id 的标签  #id 值{} class .class值  -->
+    <style>
+        #div1 {
+            background-color: green;
+        }
+        .clz{
+            background-color: yellow;
+        }
+        #zjl{
+            height: 100px;
+            width: 100px;
+            background-color: blue;
+            color: blueviolet;
+        }
+    </style>
+</head>
+<body>
+<!--我是在html-->
+<!--br 这个标签是换行-->
+我是html  <br/>
+<!--在浏览器中我的名字 要以红色字体展示出来-->
+<!--font 操作字体标签   标签当中一般是可以去设置一些属性的 比如在font 有color属性 值是red -->
+名字 : <font color='red'>范佳龙</font>
+
+<!--
+    title : 标题, 一般很少使用, 当鼠标光标移动到元素上就会展示出来title 内容
+    id和class :  作用都是为了定位到元素的位置,
+    为什么要定位呢? 因为不定位找不到元素, 找不到元素就无法操作元素
+    id和class有什么区别呢?  id 不可以重复  , class 可以重复
+    style :  可以设置CSS 样式
+
+    注意: 写CSS 样式地方有两个一个是 head 当中style 标签中, 一个直接在标签当中style 属性写
+    如何选择: 简单的css 样式直接在属性当中, 复杂的样式在style 标签当中写
+-->
+<div class="clz" title="标题" style="">林俊杰</div>
+<!--div 效果他可以自动换行-->
+<!--需求想要让内容为5555 的div 标签北京颜色变成绿色-->
+<div id="div1">5555</div>
+<div class="clz">黄飞鸿</div>
+
+<!--要将黄飞鸿和林俊杰 背景颜色变成黄色-->
+<!--我想让周杰伦这个DIV  宽度100 高度100  背景颜色蓝色 , 字体颜色黑色 -->
+
+<div id="zjl" >周杰伦</div>
+</body>
+</html>

+ 37 - 0
src/main/java/com/sf/day29/html/02-html的属性练习.html

@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <!--   #id值   .class值   元素   -->
+    <!--    -->
+    <style>
+
+        div{
+            color: red;
+            size: 100px;
+        }
+    </style>
+    <!-- 主要是放js 代码    -->
+    <script></script>
+</head>
+<body>
+<!--需求: 写出来4大名著,
+    要求自四大名著背景颜色分别是红黄蓝绿,
+    字体大小要100px,
+    字体颜色设置成红色
+    相同的样式放在style 标签中, 不用样式放在style 属性中
+    指定标题, 标题的内容都为 4大名著之一
+ -->
+<font color="blue">123</font>
+<div  style="background-color:red;" title="四大名著之一">西游记</div>
+<div  style="background-color:yellow;" title="四大名著之一">红楼梦</div>
+<div  style="background-color:blue;" title="四大名著之一">三国演义</div>
+<div  style="background-color:green;" title="四大名著之一">水浒传</div>
+
+<div onclick="alert('你好呀')">按钮</div>
+
+<!--我要在网页当中战术出来我是<div>帅哥</div>-->
+我是&lt;div&gt;帅&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;哥&lt;/div&gt;
+</body>
+</html>

+ 65 - 0
src/main/java/com/sf/day29/html/03-常见的html 标签.html

@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <!-- 主要是写css 样式     -->
+    <style>
+
+    </style>
+    <!--  写JS 的代码   -->
+    <script></script>
+</head>
+<!--body 里面主要写html 的代码-->
+<!--一个网页就是由html+ css + js 组成的-->
+<body>
+我是div  <br>
+<hr/>
+我是吴彦祖
+
+<h1>我是标题一</h1>
+<h2>我是标题二</h2>
+<h3>我是标题三</h3>
+<h4>我是标题四</h4>
+<h5>我是标题五</h5>
+<h6>我是标题六</h6>
+
+<p>
+    此前,8月11日,巴黎奥运会举重女子81公斤以上级比赛,中国选手李雯雯获得金牌,这是中国代表团本届奥运会拿到的第40枚金牌!
+
+    本次巴黎奥运会,中国体育代表团在男子100米自由泳、网球女单、艺术体操团体、花样游泳、女子拳击等项目实现了历史性金牌零的突破,在乒乓球和跳水项目上,包揽了所有金牌,最终,中国体育代表团共获得金牌40枚,银牌27枚,铜牌24枚,总计91枚奖牌。
+
+    至此,奥运奖牌榜中国队以40金与美国队持平。
+</p>
+
+<p>
+    此前,8月11日,巴黎奥运会举重女子81公斤以上级比赛,中国选手李雯雯获得金牌,这是中国代表团本届奥运会拿到的第40枚金牌!
+
+    本次巴黎奥运会,中国体育代表团在男子100米自由泳、网球女单、艺术体操团体、花样游泳、女子拳击等项目实现了历史性金牌零的突破,在乒乓球和跳水项目上,包揽了所有金牌,最终,中国体育代表团共获得金牌40枚,银牌27枚,铜牌24枚,总计91枚奖牌。
+
+    至此,奥运奖牌榜中国队以40金与美国队持平。
+</p>
+
+<div>
+    此前,8月11日,巴黎奥运会举重女子81公斤以上级比赛,中国选手李雯雯获得金牌,这是中国代表团本届奥运会拿到的第40枚金牌!
+
+    本次巴黎奥运会,中国体育代表团在男子100米自由泳、网球女单、艺术体操团体、花样游泳、女子拳击等项目实现了历史性金牌零的突破,在乒乓球和跳水项目上,包揽了所有金牌,最终,中国体育代表团共获得金牌40枚,银牌27枚,铜牌24枚,总计91枚奖牌。
+
+    至此,奥运奖牌榜中国队以40金与美国队持平。
+</div>
+
+<div>
+    此前,8月11日,巴黎奥运会举重女子81公斤以上级比赛,中国选手李雯雯获得金牌,这是中国代表团本届奥运会拿到的第40枚金牌!
+
+    本次巴黎奥运会,中国体育代表团在男子100米自由泳、网球女单、艺术体操团体、花样游泳、女子拳击等项目实现了历史性金牌零的突破,在乒乓球和跳水项目上,包揽了所有金牌,最终,中国体育代表团共获得金牌40枚,银牌27枚,铜牌24枚,总计91枚奖牌。
+
+    至此,奥运奖牌榜中国队以40金与美国队持平。
+</div>
+
+<p>123123</p><p>123123sdfsdfsdf</p>
+<span>我是123</span>   <span>我是12312312312312</span>
+
+<!--br 换行  hr 分割线   h1 - h6 标题1到标题6  p 段落  div 标签存文本会自动换行  span 存文本不会换行-->
+<!--需求: -->
+</body>
+</html>

+ 23 - 0
src/main/java/com/sf/day29/html/04-常见标签练习.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<p style="color:red;font-weight: bold;">奥运最新消息</p>
+<p>
+    此前,8月11日,巴黎奥运会举重女子81公斤以上级比赛,中国选手李雯雯获得金牌,这是中国代表团本届奥运会拿到的第40枚金牌! 本次巴黎奥运会,中国体育代表团在男子100米自由泳、网球女单、艺术体操团体、花样游泳、女子拳击等项目实现了历史性金牌零的突破,在乒乓球和跳水项目上,包揽了所有金牌,最终,中国体育代表团共获得金牌40枚,银牌27枚,铜牌24枚,总计91枚奖牌。 至此,奥运奖牌榜中国队以40金与美国队持平
+
+</p>
+<h1>奖牌第一名:中国</h1>
+金牌:<font color="red">40</font> &nbsp;&nbsp;&nbsp;&nbsp; 银牌: <font color="#a9a9a9">37</font>&nbsp;&nbsp;&nbsp;&nbsp;  铜牌: <font color="orange">58</font>
+
+<h2>奖牌第二名:美国</h2>
+金牌:<font color="red">40</font> &nbsp;&nbsp;&nbsp;&nbsp; 银牌: <font color="#a9a9a9">20</font>&nbsp;&nbsp;&nbsp;&nbsp;  铜牌: <font color="orange">58</font>
+
+<h3>奖牌第二名:法国</h3>
+金牌:<font color="red">30</font> &nbsp;&nbsp;&nbsp;&nbsp; 银牌: <font color="#a9a9a9">20</font>&nbsp;&nbsp;&nbsp;&nbsp;  铜牌: <font color="orange">58</font>
+
+</body>
+</html>

+ 43 - 0
src/main/java/com/sf/day29/html/05-常见标签练习.html

@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <style>
+        div{
+            height: 200px;
+            width: 200px;
+            background-color: red;
+        }
+    </style>
+    <!-- 需求: 当鼠标移入的时候要北京颜色修改成黄色 , 当鼠标移除的时候要背景颜色修改成红色 -->
+
+</head>
+<body>
+<!--标签属性分三类: 标准属性 id class style title  非标准属性  事件属性-->
+<div id="div"  onmouseenter="moveIn()"  onmouseout="moveOut()" >123</div>
+</body>
+<script>
+    function moveIn() {
+        console.log(this)
+        console.log("移入了")
+        // this 就是当前触发事件的元素   div
+        // this.style  获取div 的style的属性
+        // this.style.color  获取div.style.color 的属性的值
+        // this.style.color = "red"   给div.style.color 的属性设置值 为red
+        // this.style.backgroundColor = "yellow"
+        // 事件已经出发了 ,接下来就是找到这个元素然后把元素的北京颜色设置成对应的颜色
+        // 问题: 如何找到的元素
+        var div =  document.getElementById("div")
+        div.style.backgroundColor = "yellow"
+    }
+
+    // function 函数名(){}   这在js 当中叫做函数 类似我们Java当中方法
+    function moveOut() {
+        console.log("移出了")
+        // this.style.backgroundColor = "red"
+        var div =  document.getElementById("div")
+        div.style.backgroundColor = "red"
+    }
+</script>
+</html>

+ 16 - 0
src/main/java/com/sf/day29/html/06-超链接.html

@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<!--
+   a : 超链接
+   href= 另外一个网站地址 也可以是我们项目当中某一个文件
+-->
+<a href="http://www.baidu.com">百度一下</a>  <br>
+<a href="01-hello.html" target="_blank">hello.html</a>
+<a href="https://vdept3.bdstatic.com/mda-mmqwmpztvg7gxqth/cae_h264_nowatermark/1640469822324420769/mda-mmqwmpztvg7gxqth.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1723459873-0-0-d3c8fd623daf6711dea7e65785d338eb&bcevod_channel=searchbox_feed&pd=1&cr=0&cd=0&pt=3&logid=3073602066&vid=8405499265231378999&klogid=3073602066&abtest=">蜡笔小新</a>
+</body>
+</html>

+ 23 - 0
src/main/java/com/sf/day29/html/07-超链接锚点练习.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<a href="#a1">第一章</a>
+<a href="#a2">第二章</a>
+<a href="#a3">第三章</a>
+
+<a name="a1">
+    <div style="height: 800px;background-color:red;"></div>
+</a>
+<a name="a2">
+    <div style="height: 800px;background-color:green;"></div>
+</a>
+<a name="a3">
+    <div style="height: 800px;background-color:yellow;"></div>
+</a>
+<a href="#">回头头部</a>
+</body>
+</html>

+ 52 - 0
src/main/java/com/sf/day29/html/08-无序列表.html

@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<!--求**: 在页面上无序展示中国四大名著列表-->
+<!--无需列表采用 ul 和li   ul表示定义一个无需列表  li列表当中欧冠每一个元素-->
+<!--<ul type="square">-->
+<!--    <li>西游记</li>-->
+<!--    <li>红楼梦</li>-->
+<!--    <li>水浒传</li>-->
+<!--    <li>三国演义</li>-->
+<!--</ul>-->
+
+<!--&lt;!&ndash;无序列表 ol li&ndash;&gt;-->
+<!--<ol type="A" start="2">-->
+<!--    <li>西施</li>-->
+<!--    <li>貂蝉</li>-->
+<!--    <li>杨玉环</li>-->
+<!--    <li>王昭君</li>-->
+<!--</ol>-->
+
+<!--自定义列表-->
+<!--<dl>-->
+<!--    <dt>四大发明</dt>-->
+<!--    <dd>造纸术</dd>-->
+<!--    <dd>火药</dd>-->
+<!--    <dd>印刷术</dd>-->
+<!--    <dd>指南针</dd>-->
+<!--</dl>-->
+
+<dl>
+    <dd>Java
+       <dl>
+           <dd>JavaSE</dd>
+           <dd>JavaEE
+              <dl>
+                  <dd>Struts2</dd>
+                  <dd>Hibernate</dd>
+                  <dd>Spring</dd>
+              </dl>
+           </dd>
+           <dd>JavaME</dd>
+       </dl>
+    </dd>
+    <dd>html</dd>
+    <dd>汉语</dd>
+</dl>
+</body>
+</html>

+ 11 - 0
src/main/java/com/sf/day29/html/09-Html练习.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<a href="register.html">注册</a>
+<a href="">登录</a>
+</body>
+</html>

+ 26 - 0
src/main/java/com/sf/day29/html/register.html

@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <style>
+
+    </style>
+</head>
+<body style="background-color:darkseagreen">
+<hr>
+头像: <input type="file"><br>
+姓名: <font color="red">范佳龙</font>
+<br><br>
+年龄: <font color="red">18</font>
+<br><br>
+邮箱: <font color="red">123@qq.com</font>
+<br><br>
+密码: <font color="red">123</font>
+<br><br>
+
+<hr>
+
+<button onclick="alert('注册成功')">确定</button>
+</body>
+</html>

+ 27 - 0
src/main/java/com/sf/day30/_01_html/01-图片img.html

@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <style>
+        .circle-image {
+            width: 25px;
+            height: 25px;
+            border-radius: 50%;
+            object-fit: cover;
+        }
+    </style>
+</head>
+<body>
+<!--
+   src: 图片的地址
+   alt: 当图片展示不出来的时候才显示一段文本内容
+-->
+
+头像:  <img src="png/1.png" alt="这是一个猫" class="circle-image" title="可爱的小猫咪" width="50px" height="50px" >
+<br>
+<a href="http://www.baidu.com">
+    <img src="png/百度.png" width="100px" height="50px">
+</a>
+</body>
+</html>

+ 43 - 0
src/main/java/com/sf/day30/_01_html/02-table表格.html

@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<!--
+   在html 当中使用table定义表格, tr定义行  td 定义列
+-->
+<table style="background-color:darkseagreen;" border="1" cellpadding="0" cellspacing="0" width="100%">
+        <tr >
+            <th>姓名</th>
+            <th>性别</th>
+            <th>年龄</th>
+            <th>电话</td>
+            <th>地址</th>
+            <th>邮箱</th>
+        </tr>
+        <tr align="left">
+            <td>张三</td>
+            <td>男</td>
+            <td>18</td>
+            <td>110</td>
+            <td>哈尔滨</td>
+            <td>123@qq.com</td>
+        </tr>
+        <tr align="left">
+            <td>lisi</td>
+            <td>男</td>
+            <td>20</td>
+            <td>110</td>
+            <td>哈尔滨</td>
+            <td>123@qq.com</td>
+        </tr>
+    <tr align="center">
+        <td colspan="6">首页  上一页  下一页  尾页</td>
+    </tr>
+
+
+</table>
+</body>
+</html>

+ 31 - 0
src/main/java/com/sf/day30/_01_html/03-table表格练习.html

@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<table border="1" cellspacing="0" cellpadding="0" width="500px">
+    <tr>
+        <td height="30px" colspan="3" width="50%">姓名</td>
+        <td height="30px" colspan="3" width="50%">xx</td>
+    </tr>
+    <tr>
+        <td height="30px" colspan="3" width="50%">年龄</td>
+        <td height="30px" colspan="3" width="50%">xxx</td>
+    </tr>
+    <tr >
+        <td height="90px" colspan="3"  width="50%">头像</td>
+        <td height="90px" colspan="3"  width="50%">xxx</td>
+    </tr>
+    <tr >
+        <td height="30px" colspan="2" width="100px" >是否已婚: 已婚</td>
+        <td height="30px" colspan="2" width="100px">学历: 本科</td>
+        <td height="30px" colspan="2" width="300px">邮箱: 123@qq.com</td>
+    </tr>
+    <tr>
+        <td  colspan="6"  align="center" height="300px">个人技能</td>
+    </tr>
+</table>
+</body>
+</html>

+ 36 - 0
src/main/java/com/sf/day30/_01_html/04-form表单.html

@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<!--
+    action: 表单要提交的地址
+    method: get和post  get请求参数信息会方法哦地址栏中  post 请求参数会隐藏起来放到请求体当中
+    enctype: 指定编码格式 通常情况使用默认编码  除非做的是文件上传multipart/form-data
+-->
+<form action="/login" method="post">
+            <!--  当你的数据不想展示出来, 还希望提交到后天当中hidden  -->
+             <input type="hidden" name="id" value="1">
+    账号:     <input type="text" name="username"  maxlength="5" > <br>
+    密码:     <input type="password" name="password"><br>
+    邮箱:     <input type="text" name="email" placeholder="格式:1234567@qq.com"><br>
+    性别: 男: <input type="radio" checked name="sex" value="0">
+         女: <input type="radio" name="sex" value="1"> <br>
+    兴趣爱好: java: <input type="checkbox" checked name="hobby" value="java">
+             php: <input type="checkbox" name="hobby" value="php">
+             python: <input type="checkbox" name="hobby" value="python"> <br>
+             <input type="submit" value="注册"> <input type="reset" value="重置">
+             <input type="button" value="无动作按钮" onclick="sum()"> <br>
+     上传头像:<input type="file">
+
+</form>
+<script>
+    function sum(){
+        // 自定义处理  参数校验 ,符合条件在提交表单
+        alert("123123")
+    }
+</script>
+</body>
+</html>

+ 111 - 0
src/main/java/com/sf/day30/_01_html/05-form 表单练习.html

@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>会员注册</title>
+    <style>
+        body {
+            font-family: Arial, sans-serif;
+            background-color: #f4f4f9;
+        }
+
+        h1 {
+            color: cornflowerblue;
+            text-align: center;
+        }
+
+        form {
+            max-width: 400px;
+            margin: 50px auto;
+            padding: 20px;
+            background-color: white;
+            border: 1px solid #e1e1e1;
+            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
+        }
+
+        label {
+            display: block;
+            margin-bottom: 5px;
+            color: #333;
+        }
+
+        input[type="text"],
+        input[type="password"],
+        select {
+            width: 100%;
+            padding: 10px;
+            margin-bottom: 20px;
+            border: 1px solid #ccc;
+            border-radius: 4px;
+            box-sizing: border-box;
+        }
+
+        input[type="radio"] {
+            margin-right: 10px;
+        }
+
+        input[type="submit"] {
+            background-color: cornflowerblue;
+            color: white;
+            padding: 10px 20px;
+            border: none;
+            border-radius: 4px;
+            cursor: pointer;
+        }
+
+        input[type="submit"]:hover {
+            background-color: darkslateblue;
+        }
+    </style>
+</head>
+<body>
+
+<h1>会员注册</h1>
+<form action="/login" method="get">
+    <label>
+        <font color="red">*</font>用户名:
+        <input type="text" name="username" required>
+    </label>
+    <label>
+        <font color="red">*</font>姓名:
+        <input type="text" name="name" required>
+    </label>
+    <label>
+        性别:
+        <input type="radio" name="sex" value="male">男
+        <input type="radio" name="sex" value="female">女
+        <input type="radio" name="sex" value="secret">保密
+    </label>
+    <label>
+        <font color="red">*</font>登录密码:
+        <input type="password" name="password" required>
+    </label>
+    <label>
+        <font color="red">*</font>确认密码:
+        <input type="password" name="confirm_password" required>
+    </label>
+    <label>
+        <font color="red">*</font>电子邮箱:
+        <input type="email" name="email" required>
+    </label>
+    <label>
+        <font color="red">*</font>所在区域:
+        <select name="region" required>
+            <option value="">请选择</option>
+            <option value="guangzhou">广州</option>
+            <option value="haerbin">哈尔滨</option>
+        </select>
+    </label>
+    <label>
+        <font color="red">*</font>学校:
+        <input type="text" name="school" required>
+    </label>
+    <label>
+        <font color="red">*</font>院系:
+        <input type="text" name="department" required>
+    </label>
+    <input type="submit" value="注册">
+</form>
+
+</body>
+</html>

+ 34 - 0
src/main/java/com/sf/day30/_01_html/06-select 下拉框.html

@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<!--省下拉框-->
+<form action="/login">
+<!--  multiple: 表示下拉框可以多选的  size: 展示多少个  -->
+    <select name="province" >
+        <option value="-1">请选择</option>
+        <option value="0" selected>广东省</option>
+        <option value="1">黑龙江省</option>
+        <option value="2">吉林省</option>
+    </select>
+    <select name="city">
+        <option value="-1">请选择</option>
+        <option value="0">哈尔滨市</option>
+        <option value="1">绥化市</option>
+        <option value="2">佳木斯市</option>
+    </select>
+    <select name="region">
+        <option value="-1">请选择</option>
+        <option value="0">道里区</option>
+        <option value="1">南岗区</option>
+        <option value="2">平房区</option>
+    </select>
+    <input type="submit" value="确定">
+</form>
+<!--市的下拉框-->
+<!--区下拉框-->
+</body>
+</html>

+ 13 - 0
src/main/java/com/sf/day30/_01_html/07-文本域标签textare.html

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<!--一般这个文本域也是在formb表单中-->
+<form>
+    <textarea name="text" cols="100" rows="5"></textarea>
+</form>
+</body>
+</html>

BIN
src/main/java/com/sf/day30/_01_html/png/1.png


BIN
src/main/java/com/sf/day30/_01_html/png/百度.png


+ 101 - 0
src/main/java/com/sf/day30/_02_html_contact/input.html

@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>编辑界面</title>
+    <style>
+        body {
+            font-family: Arial, sans-serif;
+            background-color: #f4f4f4;
+            margin: 0;
+            padding: 20px;
+        }
+
+        h1 {
+            text-align: center;
+            color: #333;
+        }
+
+        form {
+            max-width: 400px;
+            margin: 0 auto;
+            background-color: #fff;
+            padding: 20px;
+            border-radius: 5px;
+            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
+        }
+
+        label {
+            display: block;
+            margin-bottom: 5px;
+            color: #333;
+        }
+
+        input[type="text"],
+        input[type="number"],
+        select,
+        textarea {
+            width: 100%;
+            padding: 10px;
+            margin-bottom: 15px;
+            border: 1px solid #ccc;
+            border-radius: 3px;
+            box-sizing: border-box;
+        }
+
+        input[type="radio"] {
+            margin-right: 5px;
+        }
+
+        input[type="submit"] {
+            background-color: #4CAF50;
+            color: white;
+            padding: 10px 20px;
+            border: none;
+            border-radius: 3px;
+            cursor: pointer;
+        }
+
+        input[type="submit"]:hover {
+            background-color: #45a049;
+        }
+
+        textarea {
+            resize: vertical;
+        }
+
+        /* 为表单元素添加一些间距 */
+        br {
+            display: block;
+            content: "";
+            margin: 10px 0;
+        }
+    </style>
+</head>
+<body>
+<h1>编辑界面</h1>
+<form action="/register" method="post">
+    <label for="username">姓名:</label>
+    <input type="text" name="username" id="username"><br>
+
+    <label for="age">年龄:</label>
+    <input type="number" name="age" id="age"><br>
+
+    <label for="city">城市:</label>
+    <select name="city" id="city">
+        <option value="0">哈尔滨</option>
+        <option value="1">齐齐哈尔</option>
+        <option value="2">绥化</option>
+    </select><br>
+
+    <label for="sex">性别:</label>
+    男:<input type="radio" name="sex" value="0" id="male">
+    女:<input type="radio" name="sex" value="1" id="female"><br>
+
+    <label for="info">个人简介:</label>
+    <textarea name="info" id="info" cols="50" rows="5"></textarea><br>
+
+    <input type="submit" value="确定">
+</form>
+</body>
+</html>

+ 146 - 0
src/main/java/com/sf/day30/_02_html_contact/list.html

@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>员工列表</title>
+    <style>
+        body {
+            font-family: Arial, sans-serif;
+            background-color: #f4f4f4;
+            margin: 0;
+            padding: 20px;
+        }
+
+        h1 {
+            text-align: center;
+            color: #333;
+        }
+
+        form {
+            display: flex;
+            flex-wrap: wrap;
+            justify-content: center;
+            margin-bottom: 20px;
+        }
+
+        label {
+            margin-right: 10px;
+        }
+
+        input[type="text"] {
+            padding: 5px;
+            margin-right: 10px;
+            border: 1px solid #ccc;
+            border-radius: 3px;
+        }
+
+        input[type="submit"] {
+            padding: 5px 10px;
+            background-color: #4CAF50;
+            color: white;
+            border: none;
+            border-radius: 3px;
+            cursor: pointer;
+        }
+
+        input[type="submit"]:hover {
+            background-color: #45a049;
+        }
+
+        .button {
+            display: inline-block;
+            padding: 5px 10px;
+            background-color: #4CAF50;
+            color: white;
+            text-align: center;
+            text-decoration: none;
+            font-size: 14px;
+            border: none;
+            cursor: pointer;
+            border-radius: 3px;
+        }
+
+        .button:hover {
+            background-color: #45a049;
+        }
+
+        table {
+            width: 100%;
+            border-collapse: collapse;
+            margin-top: 20px;
+        }
+
+        th, td {
+            padding: 10px;
+            text-align: left;
+            border: 1px solid #ddd;
+        }
+
+        th {
+            background-color: #f2f2f2;
+            font-weight: bold;
+        }
+
+        tr:nth-child(even) {
+            background-color: #f2f2f2;
+        }
+    </style>
+</head>
+<body>
+<h1>员工列表</h1>
+<form action="">
+    姓名:<input type="text" name="name"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    年龄:<input type="text" name="age">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    <input type="submit" value="搜索">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+    <a href="input.html" class="button">新增</a><br><br>
+
+    <table border="1" width="100%" cellpadding="0" cellspacing="0">
+        <tr>
+            <th>id</th>
+            <th>name</th>
+            <th>age</th>
+            <th>城市</th>
+            <th>性别</th>
+            <th>个人简介</th>
+            <th>操作</th>
+        </tr>
+        <tr>
+            <td>1</td>
+            <td>zhangsan</td>
+            <td>17</td>
+            <td>哈尔滨</td>
+            <td>男</td>
+            <td>xx..</td>
+            <td>
+                <a href="input.html" class="button">编辑</a>
+                <a href="#" class="button">删除</a>
+            </td>
+        </tr>
+        <tr>
+            <td>2</td>
+            <td>lisi</td>
+            <td>17</td>
+            <td>碎花</td>
+            <td>女</td>
+            <td>xx..</td>
+            <td>
+                <a href="input.html" class="button">编辑</a>
+                <a href="#" class="button">删除</a>
+            </td>
+        </tr>
+        <tr>
+            <td>3</td>
+            <td>wangwu</td>
+            <td>20</td>
+            <td>齐齐哈尔</td>
+            <td>男</td>
+            <td>xx..</td>
+            <td>
+                <a href="input.html" class="button">编辑</a>
+                <a href="#" class="button">删除</a>
+            </td>
+        </tr>
+    </table>
+</form>
+</body>
+</html>

+ 65 - 0
src/main/java/com/sf/day30/_02_html_contact/login.html

@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Login Form</title>
+    <style>
+        body {
+            font-family: Arial, sans-serif;
+            background-color: #f4f4f4;
+            margin: 0;
+            padding: 0;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            height: 100vh;
+        }
+
+        form {
+            background-color: #ffffff;
+            padding: 20px;
+            border-radius: 5px;
+            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
+            width: 300px;
+            text-align: center;
+        }
+
+        input[type="text"],
+        input[type="password"] {
+            width: 100%;
+            padding: 10px;
+            margin: 5px 0 15px 0;
+            border: 1px solid #ccc;
+            border-radius: 3px;
+            box-sizing: border-box;
+        }
+
+        .button {
+            display: inline-block;
+            padding: 10px 20px;
+            background-color: #4CAF50;
+            color: white;
+            text-align: center;
+            text-decoration: none;
+            font-size: 16px;
+            border: none;
+            cursor: pointer;
+            border-radius: 4px;
+            width: 100%;
+        }
+
+        .button:hover {
+            background-color: #45a049;
+        }
+    </style>
+</head>
+<body>
+<form action="">
+    <label for="username">账号:</label>
+    <input type="text" id="username" name="username"><br><br>
+    <label for="password">密码:</label>
+    <input type="password" id="password" name="password"><br><br>
+    <a href="list.html" class="button">登录</a>
+</form>
+</body>
+</html>