xerga 2 лет назад
Родитель
Сommit
35f23efadc
35 измененных файлов с 893 добавлено и 2 удалено
  1. 10 0
      02_MySql/.idea/libraries/libs2.xml
  2. 1 0
      02_MySql/.idea/modules.xml
  3. 2 2
      02_MySql/jdbc-day01/src/com/lovecoding/jdbc/TestJdbc03.java
  4. 22 0
      02_MySql/jdbc-day03/jdbc-day03.iml
  5. BIN
      02_MySql/jdbc-day03/libs/commons-dbutils-1.7.jar
  6. BIN
      02_MySql/jdbc-day03/libs/druid-1.1.21.jar
  7. BIN
      02_MySql/jdbc-day03/libs/mysql-connector-java-5.1.36-bin.jar
  8. 56 0
      02_MySql/jdbc-day03/src/com/lovecoding/bean/Department.java
  9. 52 0
      02_MySql/jdbc-day03/src/com/lovecoding/bean/Users.java
  10. 38 0
      02_MySql/jdbc-day03/src/com/lovecoding/dao/DepartmentDao.java
  11. 39 0
      02_MySql/jdbc-day03/src/com/lovecoding/dao/UsersDao.java
  12. 135 0
      02_MySql/jdbc-day03/src/com/lovecoding/dao/impl/BaseDAOImpl.java
  13. 79 0
      02_MySql/jdbc-day03/src/com/lovecoding/dao/impl/BaseDAOImplV2.java
  14. 54 0
      02_MySql/jdbc-day03/src/com/lovecoding/dao/impl/DepartmentDaoImpl.java
  15. 68 0
      02_MySql/jdbc-day03/src/com/lovecoding/dao/impl/UsersDaoImpl.java
  16. 112 0
      02_MySql/jdbc-day03/src/com/lovecoding/test/TestDepartmentDao.java
  17. 50 0
      02_MySql/jdbc-day03/src/com/lovecoding/test/TestUsersDao.java
  18. 65 0
      02_MySql/jdbc-day03/src/com/lovecoding/utils/JDBCTools.java
  19. 94 0
      02_MySql/jdbc-day03/src/com/lovecoding/utils/JDBCTools2.java
  20. 8 0
      02_MySql/jdbc-day03/src/druid.properties
  21. BIN
      02_MySql/out/production/jdbc-day01/com/lovecoding/jdbc/TestJdbc03.class
  22. BIN
      02_MySql/out/production/jdbc-day01/com/lovecoding/jdbc/TestJdbc04.class
  23. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/bean/Department.class
  24. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/bean/Users.class
  25. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/dao/DepartmentDao.class
  26. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/dao/UsersDao.class
  27. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/dao/impl/BaseDAOImpl.class
  28. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/dao/impl/BaseDAOImplV2.class
  29. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/dao/impl/DepartmentDaoImpl.class
  30. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/dao/impl/UsersDaoImpl.class
  31. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/test/TestDepartmentDao.class
  32. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/test/TestUsersDao.class
  33. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/utils/JDBCTools.class
  34. BIN
      02_MySql/out/production/jdbc-day03/com/lovecoding/utils/JDBCTools2.class
  35. 8 0
      02_MySql/out/production/jdbc-day03/druid.properties

+ 10 - 0
02_MySql/.idea/libraries/libs2.xml

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

+ 1 - 0
02_MySql/.idea/modules.xml

@@ -5,6 +5,7 @@
       <module fileurl="file://$PROJECT_DIR$/02_MySql.iml" filepath="$PROJECT_DIR$/02_MySql.iml" />
       <module fileurl="file://$PROJECT_DIR$/jdbc-day01/jdbc-day01.iml" filepath="$PROJECT_DIR$/jdbc-day01/jdbc-day01.iml" />
       <module fileurl="file://$PROJECT_DIR$/jdbc-day02/jdbc-day02.iml" filepath="$PROJECT_DIR$/jdbc-day02/jdbc-day02.iml" />
+      <module fileurl="file://$PROJECT_DIR$/jdbc-day03/jdbc-day03.iml" filepath="$PROJECT_DIR$/jdbc-day03/jdbc-day03.iml" />
     </modules>
   </component>
 </project>

+ 2 - 2
02_MySql/jdbc-day01/src/com/lovecoding/jdbc/TestJdbc03.java

@@ -294,8 +294,8 @@ public class TestJdbc03 {
         //sql对象
         Statement statement = connection.createStatement();
         //转账
-        String sql1 = " update t_department set description = 'aa' where did = 2 ";
-        String sql2 = " update t_department set description = 'bb' wher did = 3 ";
+        String sql1 = " update t_department set dname = 'aa' where did = 2 ";
+        String sql2 = " update t_department set dname = 'aa' where did = 3 ";
 
         //手动事务
         connection.setAutoCommit(false);

+ 22 - 0
02_MySql/jdbc-day03/jdbc-day03.iml

@@ -0,0 +1,22 @@
+<?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$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="libs2" level="project" />
+    <orderEntry type="module-library">
+      <library name="JUnit4">
+        <CLASSES>
+          <root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.13.1/junit-4.13.1.jar!/" />
+          <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+  </component>
+</module>

BIN
02_MySql/jdbc-day03/libs/commons-dbutils-1.7.jar


BIN
02_MySql/jdbc-day03/libs/druid-1.1.21.jar


BIN
02_MySql/jdbc-day03/libs/mysql-connector-java-5.1.36-bin.jar


+ 56 - 0
02_MySql/jdbc-day03/src/com/lovecoding/bean/Department.java

@@ -0,0 +1,56 @@
+package com.lovecoding.bean;
+
+/**
+ * ClassName: Department
+ * Package: com.lovecoding.bean
+ * Description:
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 18:37
+ * @Version 1.0
+ *
+ *
+ * Department = 表名称 t_department 去掉表前缀
+ */
+public class Department {
+    //字段 = 属性
+    private Integer did; //int 类型 不能 = null
+    private String dname;
+    private String description;
+
+    public Department() {
+    }
+
+    public Integer getDid() {
+        return did;
+    }
+
+    public void setDid(Integer did) {
+        this.did = did;
+    }
+
+    public String getDname() {
+        return dname;
+    }
+
+    public void setDname(String dname) {
+        this.dname = dname;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public String toString() {
+        return "Department{" +
+                "did=" + did +
+                ", dname='" + dname + '\'' +
+                ", description='" + description + '\'' +
+                '}';
+    }
+}

+ 52 - 0
02_MySql/jdbc-day03/src/com/lovecoding/bean/Users.java

@@ -0,0 +1,52 @@
+package com.lovecoding.bean;
+
+import java.math.BigDecimal;
+
+/**
+ * ClassName: Users
+ * Package: com.lovecoding.bean
+ * Description:
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/19 15:56
+ * @Version 1.0
+ */
+public class Users {
+
+    private Integer id;
+    private String username;
+    private BigDecimal account;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public BigDecimal getAccount() {
+        return account;
+    }
+
+    public void setAccount(BigDecimal account) {
+        this.account = account;
+    }
+
+    @Override
+    public String toString() {
+        return "Users{" +
+                "id=" + id +
+                ", username='" + username + '\'' +
+                ", account=" + account +
+                '}';
+    }
+}

+ 38 - 0
02_MySql/jdbc-day03/src/com/lovecoding/dao/DepartmentDao.java

@@ -0,0 +1,38 @@
+package com.lovecoding.dao;
+
+import com.lovecoding.bean.Department;
+
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * ClassName: DepartmentDao
+ * Package: com.lovecoding.dao
+ * Description:
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 18:42
+ * @Version 1.0
+ */
+public interface DepartmentDao {
+
+    //接口中定义方法 5个方法
+    //添加部门信息
+    int addDepartment(Department department) throws SQLException;
+
+    //修改方法 id
+    int updateDepartment(Department department) throws SQLException;
+
+    //删除方法
+    int deleteDepartmentById(Integer did) throws SQLException;
+
+    //查询方法 查询单个
+    Department getDepartmentById(Integer did) throws SQLException;
+
+    //查询方法 查询多个
+    List<Department> getDepartmentList() throws SQLException;
+
+
+
+
+}

+ 39 - 0
02_MySql/jdbc-day03/src/com/lovecoding/dao/UsersDao.java

@@ -0,0 +1,39 @@
+package com.lovecoding.dao;
+
+import com.lovecoding.bean.Department;
+import com.lovecoding.bean.Users;
+
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * ClassName: UsersDao
+ * Package: com.lovecoding.dao
+ * Description:
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 18:42
+ * @Version 1.0
+ */
+public interface UsersDao {
+
+    //接口中定义方法 5个方法
+    //添加部门信息
+    int addUsers(Users users) throws SQLException;
+
+    //修改方法 id
+    int updateUsers(Users users) throws SQLException;
+
+    //删除方法
+    int deleteUsersById(Integer id) throws SQLException;
+
+    //查询方法 查询单个
+    Users getUsersById(Integer id) throws SQLException;
+
+    //查询方法 查询多个
+    List<Users> getUsersList() throws SQLException;
+
+    //查询数量
+    Long getCount() throws SQLException;
+
+}

+ 135 - 0
02_MySql/jdbc-day03/src/com/lovecoding/dao/impl/BaseDAOImpl.java

@@ -0,0 +1,135 @@
+package com.lovecoding.dao.impl;
+
+import com.lovecoding.utils.JDBCTools;
+import com.lovecoding.utils.JDBCTools2;
+
+import java.lang.reflect.Field;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * ClassName: BaseDAOImpl
+ * Package: com.lovecoding.dao.impl
+ * Description: 操作(增、删、改、查)代码重复度很高,所以可以抽取公共代码,给这些DAO的实现类可以抽取一个公共的父类,我们称为BaseDAOImpl.
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 19:28
+ * @Version 1.0
+ */
+public abstract class BaseDAOImpl {
+
+    //五个方法
+    //三个 update
+
+    /**
+     * 增删改通用方法
+     * @param sql sql语句
+     * @param params 参数
+     * @return
+     */
+    public int update( String sql, Object ... params ) throws SQLException {
+        // sql  ??
+        //获取链接
+        Connection connection = JDBCTools2.getConnection();
+        //sql执行对象
+        PreparedStatement pst = connection.prepareStatement(sql);
+        //设置参数
+        for (int i = 1; i <= params.length; i++) {
+            //索引从1开始
+            //params数组索引从0开始
+            pst.setObject(i,params[i-1]);
+        }
+        //执行sql
+        return pst.executeUpdate();
+    }
+
+
+    //两个 query
+
+    /**
+     * 查询单个的方法
+     * @param clazz 封装的对象类型
+     * @param sql
+     * @param params
+     * @param <T>
+     * @return
+     */
+    public <T> T getBean(Class<T> clazz, String sql, Object ... params) throws SQLException {
+        List<T> list = getList(clazz, sql, params);
+
+        if (list != null && list.size() > 0 ){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    /**
+     * 查询多个的方法
+     * @param clazz
+     * @param sql
+     * @param params
+     * @param <T>
+     * @return
+     */
+    public  <T> List<T> getList(Class<T> clazz, String sql, Object[] params) throws SQLException {
+        //返回对象
+        ArrayList<T> list = new ArrayList<>();
+        //获取链接
+        Connection connection = JDBCTools.getConnection();
+        //sql执行对象
+        PreparedStatement pst = connection.prepareStatement(sql);
+        //设置参数
+        if (params != null && params.length > 0){
+            for (int i = 1; i <= params.length; i++) {
+                //索引从1开始
+                //params数组索引从0开始
+                pst.setObject(i,params[i-1]);
+            }
+        }
+
+        //执行查询方法
+        ResultSet rs = pst.executeQuery();
+        //根据反射
+
+        //metaData 表头的信息
+        ResultSetMetaData metaData = rs.getMetaData();
+
+        //遍历
+        while (rs.next()){
+            //反射创建对象
+            try {
+                T t = clazz.newInstance();
+                //列的数量
+                int columnCount = metaData.getColumnCount();
+
+                for (int i = 1; i <= columnCount; i++) {
+                    //设置属性值
+                    //属性名称 值
+                    Object val = rs.getObject(i);
+                    //getColumnLabel 别名的中
+                    //getColumnName  列名 = 属性名
+                    String columnLabel = metaData.getColumnLabel(i);
+                    //注入值
+                    Field declaredField = clazz.getDeclaredField(columnLabel);
+                    //破解
+                    declaredField.setAccessible(true);
+                    //值
+                    declaredField.set(t,val);
+
+                }
+                //添加到list集合
+                list.add(t);
+            } catch (InstantiationException e) {
+                e.printStackTrace();
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            } catch (NoSuchFieldException e) {
+                e.printStackTrace();
+            }
+        }
+
+        return list;
+    }
+
+}

+ 79 - 0
02_MySql/jdbc-day03/src/com/lovecoding/dao/impl/BaseDAOImplV2.java

@@ -0,0 +1,79 @@
+package com.lovecoding.dao.impl;
+
+import com.lovecoding.utils.JDBCTools;
+import com.lovecoding.utils.JDBCTools2;
+import org.apache.commons.dbutils.QueryRunner;
+import org.apache.commons.dbutils.handlers.BeanHandler;
+import org.apache.commons.dbutils.handlers.BeanListHandler;
+import org.apache.commons.dbutils.handlers.ScalarHandler;
+
+import java.lang.reflect.Field;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * ClassName: BaseDAOImpl
+ * Package: com.lovecoding.dao.impl
+ * Description: 操作(增、删、改、查)代码重复度很高,所以可以抽取公共代码,给这些DAO的实现类可以抽取一个公共的父类,我们称为BaseDAOImpl.
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 19:28
+ * @Version 1.0
+ */
+public abstract class BaseDAOImplV2 {
+
+    //五个方法
+    //三个 update
+    private QueryRunner qr = new QueryRunner();
+    /**
+     * 增删改通用方法
+     * @param sql sql语句
+     * @param params 参数
+     * @return
+     */
+    public int update( String sql, Object ... params ) throws SQLException {
+        //连接
+        Connection connection = JDBCTools2.getConnection();
+        //执行添加修改
+        return qr.update(connection, sql, params);
+    }
+
+
+    /**
+     * 查询单个的方法
+     * @param clazz 封装的对象类型
+     * @param sql
+     * @param params
+     * @param <T>
+     * @return
+     */
+    public <T> T getBean(Class<T> clazz, String sql, Object ... params) throws SQLException {
+        //连接
+        Connection connection = JDBCTools2.getConnection();
+        //查询
+        return qr.query(connection,sql,new BeanHandler<>(clazz),params);
+    }
+
+    /**
+     * 查询多个的方法
+     * @param clazz
+     * @param sql
+     * @param params
+     * @param <T>
+     * @return
+     */
+    public  <T> List<T> getList(Class<T> clazz, String sql, Object[] params) throws SQLException {
+        //连接
+        Connection connection = JDBCTools2.getConnection();
+        //查询
+        return  qr.query(connection,sql,new BeanListHandler<>(clazz),params);
+    }
+
+    public  Long getValue( String sql, Object[] params) throws SQLException {
+        //连接
+        Connection connection = JDBCTools2.getConnection();
+        //查询
+        return  (Long) qr.query(connection,sql,new ScalarHandler<>(),params);
+    }
+}

+ 54 - 0
02_MySql/jdbc-day03/src/com/lovecoding/dao/impl/DepartmentDaoImpl.java

@@ -0,0 +1,54 @@
+package com.lovecoding.dao.impl;
+
+import com.lovecoding.bean.Department;
+import com.lovecoding.dao.DepartmentDao;
+
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * ClassName: DepartmentDaoImpl
+ * Package: com.lovecoding.dao.impl
+ * Description:
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 20:00
+ * @Version 1.0
+ */
+public class DepartmentDaoImpl  extends BaseDAOImpl  implements DepartmentDao {
+
+
+    @Override
+    public int addDepartment(Department department) throws SQLException {
+        String sql = " insert into t_department values(null,?,?); ";
+        return update(sql,department.getDname(),department.getDescription());
+    }
+
+    @Override
+    public int updateDepartment(Department department) throws SQLException {
+        String sql = " update t_department set dname=?,description=? where did=?; ";
+        return update(sql,department.getDname(),department.getDescription(),department.getDid());
+    }
+
+    @Override
+    public int deleteDepartmentById(Integer did) throws SQLException {
+        String sql = " delete from t_department where did = ?; ";
+        return update(sql,did);
+    }
+
+    @Override
+    public Department getDepartmentById(Integer did) throws SQLException {
+
+        String sql = " select * from t_department where did = ?; ";
+
+        return getBean(Department.class,sql,did);
+    }
+
+    @Override
+    public List<Department> getDepartmentList() throws SQLException {
+        String sql = " select * from t_department  ";
+        return getList(Department.class,sql,null);
+    }
+
+
+}

+ 68 - 0
02_MySql/jdbc-day03/src/com/lovecoding/dao/impl/UsersDaoImpl.java

@@ -0,0 +1,68 @@
+package com.lovecoding.dao.impl;
+
+import com.lovecoding.bean.Department;
+import com.lovecoding.bean.Users;
+import com.lovecoding.dao.DepartmentDao;
+import com.lovecoding.dao.UsersDao;
+import com.lovecoding.utils.JDBCTools2;
+import org.apache.commons.dbutils.QueryRunner;
+import org.apache.commons.dbutils.handlers.ScalarHandler;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * ClassName: DepartmentDaoImpl
+ * Package: com.lovecoding.dao.impl
+ * Description:
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 20:00
+ * @Version 1.0
+ */
+public class UsersDaoImpl extends BaseDAOImplV2  implements UsersDao {
+
+    @Override
+    public int addUsers(Users users) throws SQLException {
+        //sql
+        String sql = " INSERT INTO `lovecoding`.`t_users` ( `username`, `account`) VALUES ( ?,?) ";
+        //添加
+        return update(sql,users.getUsername(),users.getAccount());
+    }
+
+    @Override
+    public int updateUsers(Users users) throws SQLException {
+        String sql = " UPDATE `lovecoding`.`t_users` SET `username` = ?, `account` = ? WHERE `id` = ? ";
+        //修改
+        return update(sql,users.getUsername(),users.getAccount(),users.getId());
+    }
+
+    @Override
+    public int deleteUsersById(Integer id) throws SQLException {
+        String sql = " DELETE FROM t_users WHERE id = ?   ";
+        //修改
+        return update(sql,id);
+    }
+
+    @Override
+    public Users getUsersById(Integer id) throws SQLException {
+        String sql = " SELECT * FROM t_users WHERE id = ? ";
+        return getBean(Users.class,sql,id);
+    }
+
+    @Override
+    public List<Users> getUsersList() throws SQLException {
+        String sql = " SELECT * FROM t_users ";
+        return getList(Users.class,sql,null);
+    }
+
+    @Override
+    public Long getCount() throws SQLException {
+        //qr
+
+        String sql = " SELECT count(1) FROM t_users ";
+
+        return getValue(sql,null);
+    }
+}

+ 112 - 0
02_MySql/jdbc-day03/src/com/lovecoding/test/TestDepartmentDao.java

@@ -0,0 +1,112 @@
+package com.lovecoding.test;
+
+import com.lovecoding.bean.Department;
+import com.lovecoding.dao.impl.DepartmentDaoImpl;
+import com.lovecoding.utils.JDBCTools;
+import com.lovecoding.utils.JDBCTools2;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * ClassName: TestDepartmentDao
+ * Package: com.lovecoding.test
+ * Description:
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 20:08
+ * @Version 1.0
+ */
+public class TestDepartmentDao {
+
+    /*
+    演示 事务问题
+    1、事务 一组sql看成一个执行单元,要成功都成功,失败都失败。
+    2、开启事务
+        通过链接过去事务,
+        connection.setAutocommit(false) 开启手动事务
+        commit() 提交事务
+        rollback() 回滚事务
+    3、让sql 出问题。
+        写两条sql语句
+        让其中一条失败,看另外一条是否能执行成功。
+
+   4、 sql 修改id为1的部门名称为 开发部 dev
+       sql 修改id为2的部门名称为 开发部 dev
+
+   5、演示问题
+        连接问题
+        在update中有一个连接 ,在update外 获取连接, 这两个连接不是同一个连接。
+        所以事务设置 手动形式 是失败的。 最后没有事务控制。
+
+   6、解决问题
+        ThreadLocal 类 多线程
+        ThreadLocal用于保存某个线程共享变量
+        A线程连接a  下一个方法的时候 A线程获取连接a
+
+        线程执行过程中一直让它获取同一个连接。
+        连接放到 线程中 ThreadLocal。
+
+        map 存储。 key 就是线程自己 当前线程   value 存储成连接。
+
+        key 线程 value 连接
+
+        ThreadLocal
+            提供了 get 方法  set 方法 remove 删除
+
+     */
+
+    @Test
+    public void test02() throws SQLException {
+        DepartmentDaoImpl departmentDao = new DepartmentDaoImpl();
+        //链接
+        Connection connection = JDBCTools2.getConnection();
+
+        try {
+            //手动事务
+            connection.setAutoCommit(false);
+
+            Department department = new Department();
+            department.setDid(1);
+            department.setDname("dev");
+            //修改id为1的部门名称为 开发部   成功
+            departmentDao.updateDepartment(department);
+
+            //修改id为2的部门名称为 开发部
+            department.setDid(2);
+            department.setDname("dev");
+            //修改id为1的部门名称为 开发部
+            //由于 有唯一约束 报错
+            departmentDao.updateDepartment(department);
+            //提交事务
+            connection.commit();
+        } catch (SQLException e) {
+            //出现异常  回滚事务
+            connection.rollback();
+            e.printStackTrace();
+        }
+    }
+
+
+    @Test
+    public void test01() throws SQLException {
+        DepartmentDaoImpl departmentDao = new DepartmentDaoImpl();
+
+        Department department = new Department();
+        department.setDid(1);
+        department.setDname("dev");
+        //修改id为1的部门名称为 开发部   成功
+        departmentDao.updateDepartment(department);
+
+        //修改id为2的部门名称为 开发部
+        department.setDid(2);
+        department.setDname("dev");
+        //修改id为1的部门名称为 开发部
+        //由于 有唯一约束 报错
+        departmentDao.updateDepartment(department);
+
+    }
+
+}

+ 50 - 0
02_MySql/jdbc-day03/src/com/lovecoding/test/TestUsersDao.java

@@ -0,0 +1,50 @@
+package com.lovecoding.test;
+
+import com.lovecoding.bean.Department;
+import com.lovecoding.bean.Users;
+import com.lovecoding.dao.UsersDao;
+import com.lovecoding.dao.impl.DepartmentDaoImpl;
+import com.lovecoding.dao.impl.UsersDaoImpl;
+import com.lovecoding.utils.JDBCTools2;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * ClassName: TestDepartmentDao
+ * Package: com.lovecoding.test
+ * Description:
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 20:08
+ * @Version 1.0
+ */
+public class TestUsersDao {
+
+    @Test
+    public void test01() throws SQLException {
+        UsersDaoImpl usersDao= new UsersDaoImpl();
+
+        Users usersById = usersDao.getUsersById(1);
+        System.out.println(usersById);
+    }
+
+    @Test
+    public void test02() throws SQLException {
+        UsersDaoImpl usersDao= new UsersDaoImpl();
+
+        List<Users> usersList = usersDao.getUsersList();
+        System.out.println(usersList);
+    }
+
+
+    @Test
+    public void test03() throws SQLException {
+        UsersDaoImpl usersDao= new UsersDaoImpl();
+
+        Long count = usersDao.getCount();
+        System.out.println(count);
+    }
+}

+ 65 - 0
02_MySql/jdbc-day03/src/com/lovecoding/utils/JDBCTools.java

@@ -0,0 +1,65 @@
+package com.lovecoding.utils;
+
+import com.alibaba.druid.pool.DruidDataSourceFactory;
+
+import javax.sql.DataSource;
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Properties;
+
+/**
+ * ClassName: JDBCTools
+ * Package: com.lovecoding.utils
+ * Description: //通过工具获取链接 释放
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 18:50
+ * @Version 1.0
+ */
+public class JDBCTools {
+
+    //数据源
+    private static DataSource dataSource = null;
+
+    //静态代码
+    static {
+        try {
+            //druid 配置文件 Properties
+            Properties properties = new Properties();
+            //类加载器
+            InputStream file = JDBCTools.class.getClassLoader().getResourceAsStream("druid.properties");
+            //读取
+            properties.load(file);
+            //德鲁伊
+            dataSource = DruidDataSourceFactory.createDataSource(properties);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 获取方法
+     * @return
+     * @throws SQLException
+     */
+    public static Connection getConnection() throws SQLException {
+        return  dataSource.getConnection();
+    }
+
+
+    /**
+     * 释放方法
+     * @return
+     * @throws SQLException
+     */
+    public static void free(Connection connection  ) throws SQLException {
+        if (connection != null){
+            //改为自动提交
+            connection.setAutoCommit(true);
+            connection.close();
+        }
+    }
+
+}

+ 94 - 0
02_MySql/jdbc-day03/src/com/lovecoding/utils/JDBCTools2.java

@@ -0,0 +1,94 @@
+package com.lovecoding.utils;
+
+import com.alibaba.druid.pool.DruidDataSourceFactory;
+
+import javax.sql.DataSource;
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Properties;
+
+/**
+ * ClassName: JDBCTools
+ * Package: com.lovecoding.utils
+ * Description: //通过工具获取链接 释放
+ *
+ * @Author 爱扣钉-陈晨
+ * @Create 2023/4/12 18:50
+ * @Version 2.0
+ */
+public class JDBCTools2 {
+
+    //数据源
+    private static DataSource dataSource = null;
+
+    //静态代码
+    static {
+        try {
+            //druid 配置文件 Properties
+            Properties properties = new Properties();
+            //类加载器
+            InputStream file = JDBCTools2.class.getClassLoader().getResourceAsStream("druid.properties");
+            //读取
+            properties.load(file);
+            //德鲁伊
+            dataSource = DruidDataSourceFactory.createDataSource(properties);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+    //设置ThreadLocal
+    private static ThreadLocal<Connection> threadLocal = new ThreadLocal<>();
+
+    /**
+     * 获取方法
+     * @return
+     * @throws SQLException
+     */
+    public static Connection getConnection() throws SQLException {
+        //通过ThreadLocal获取
+        Connection connection = threadLocal.get();
+        //判断
+        if (connection == null){
+            //设置
+            threadLocal.set(dataSource.getConnection());
+            //获取
+            connection = threadLocal.get();
+        }
+        //返回
+        return connection;
+    }
+
+    /**
+     * 释放方法
+     * @return
+     * @throws SQLException
+     */
+    public static void freeConn() throws SQLException {
+        Connection connection = threadLocal.get();
+        if (connection != null){
+            //改为自动提交
+            connection.setAutoCommit(true);
+            connection.close();
+            //删掉
+            threadLocal.remove();
+        }
+    }
+
+
+    /**
+     * 释放方法
+     * @return
+     * @throws SQLException
+     */
+    public static void free(Connection connection  ) throws SQLException {
+
+        if (connection != null){
+            //改为自动提交
+            connection.setAutoCommit(true);
+            connection.close();
+        }
+    }
+
+}

+ 8 - 0
02_MySql/jdbc-day03/src/druid.properties

@@ -0,0 +1,8 @@
+#key=value
+driverClassName=com.mysql.jdbc.Driver
+url=jdbc:mysql://localhost:3306/lovecoding?serverTimezone=UTC&rewriteBatchedStatements=true
+username=root
+password=root
+initialSize=5
+maxActive=10
+maxWait=1000

BIN
02_MySql/out/production/jdbc-day01/com/lovecoding/jdbc/TestJdbc03.class


BIN
02_MySql/out/production/jdbc-day01/com/lovecoding/jdbc/TestJdbc04.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/bean/Department.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/bean/Users.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/dao/DepartmentDao.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/dao/UsersDao.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/dao/impl/BaseDAOImpl.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/dao/impl/BaseDAOImplV2.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/dao/impl/DepartmentDaoImpl.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/dao/impl/UsersDaoImpl.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/test/TestDepartmentDao.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/test/TestUsersDao.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/utils/JDBCTools.class


BIN
02_MySql/out/production/jdbc-day03/com/lovecoding/utils/JDBCTools2.class


+ 8 - 0
02_MySql/out/production/jdbc-day03/druid.properties

@@ -0,0 +1,8 @@
+#key=value
+driverClassName=com.mysql.jdbc.Driver
+url=jdbc:mysql://localhost:3306/lovecoding?serverTimezone=UTC&rewriteBatchedStatements=true
+username=root
+password=root
+initialSize=5
+maxActive=10
+maxWait=1000