一、DBUtils框架

mybatis、Hibernate、mybatis-plus、mybatis-fast这些框架都是别人封装好的对数据库进行增删改查的框架。

DButils封装的BaseDao比我们自己封装的好。

使用需要导包:

  1. 1.导包dbutils mysql druid
  2. 为什么不导BeanUtilslongging?使用的BaseDao用框架替换了,所以不用这俩包了
  3. 2.druid.properties配置文件复制进来,
  4. 3.创建utils工具包,把JdbcUtils.class复制过来

1.1增删改

  1. @Test
  2. public void testAdd() throws SQLException {
  3. //1.获取connection对象
  4. Connection connection = JdbcUtil.getConnection();
  5. //2.实例化DBUtils的核心类 QueryRunner
  6. QueryRunner queryRunner = new QueryRunner();
  7. //3.调用增删改的方法
  8. // int update = queryRunner.update(connection, "insert into work(name,age,info) values ('博儿',23,'呼叫博儿')");
  9. // System.out.println(update);
  10. //用预处理的方法写 uptate(connection,sql,赋值1,赋值2,……) 预处理的有几个?就赋几次值
  11. String sql = "insert into work(name,age,info) values (?,?,?)";
  12. int update1 = queryRunner.update(connection, sql,"哈哈",100,"哈哈哈");
  13. String sql2 = "delete from work where id = ?";
  14. int update2 = queryRunner.update(connection, sql2,10);
  15. String sql3 = "update work set name=?,age=?,info=? where id = ?";
  16. int update3 = queryRunner.update(connection, sql3,"路飞",11,"海贼王",9);
  17. }

1.2查询一条信息1

  1. @Test
  2. public void testSelect1() throws SQLException {
  3. Connection connection = JdbcUtil.getConnection();
  4. QueryRunner queryRunner = new QueryRunner();
  5. String sql = "select * from work where id = ?";
  6. //query(Connection c,String sql,Object parameter,ResultSrtHandler<T> rsh)
  7. Work work = queryRunner.query(connection, sql, 9, new ResultSetHandler<Work>() {
  8. Work work = null;
  9. @Override
  10. public Work handle(ResultSet resultSet) throws SQLException {
  11. while (resultSet.next()){
  12. int id = resultSet.getInt("id");
  13. String name = resultSet.getString("name");
  14. int age = resultSet.getInt("age");
  15. String info = resultSet.getString("info");
  16. work = new Work();
  17. work.setId(id);
  18. work.setName(name);
  19. work.setAge(age);
  20. work.setInfo(info);
  21. }
  22. return work;
  23. }
  24. });
  25. System.out.println(work);
  26. }

1.3查询一条信息2

  1. //查询一条数据
  2. @Test
  3. public void testSelectOne() throws SQLException {
  4. Connection connection = JdbcUtil.getConnection();
  5. String sql = "select * from work where id = ?";
  6. Object[] objects = {2};
  7. QueryRunner queryRunner = new QueryRunner();
  8. Work work = queryRunner.query(connection, sql, objects, new BeanHandler<Work>(Work.class));
  9. System.out.println(work);
  10. }

1.4查询,返回List集合

  1. //查询多条数据 返回值是list集合
  2. @Test
  3. public void testSelectAll() throws SQLException {
  4. Connection connection = JdbcUtil.getConnection();
  5. String sql = "select * from work";
  6. QueryRunner queryRunner = new QueryRunner();
  7. List<Work> list = queryRunner.query(connection, sql, new BeanListHandler<Work>(Work.class));
  8. for (Work w:list
  9. ) {
  10. System.out.println(w);
  11. }
  12. }

1.5查询,返回Map集合

  1. //查询多条数据 返回值是map集合
  2. @Test
  3. public void testMapAll() throws SQLException {
  4. Connection connection = JdbcUtil.getConnection();
  5. String sql = "select * from work";
  6. QueryRunner queryRunner = new QueryRunner();
  7. //new BeanMapHandler<Integer, Work>(Work.class,"id")
  8. //"id" id作为map集合中的键
  9. Map<Integer, Work> workMap = queryRunner.query(connection, sql, new BeanMapHandler<Integer, Work>(Work.class,"id"));
  10. // keySet() values() entrySet()
  11. Set<Map.Entry<Integer,Work>> set = workMap.entrySet();
  12. for (Map.Entry<Integer,Work> m: set
  13. ) {
  14. System.out.println(m);
  15. }
  16. }

1.6查询,返回数组

  1. //查询多条数据 返回值是数组集合
  2. @Test
  3. public void testShuzuAll() throws SQLException {
  4. Connection connection = JdbcUtil.getConnection();
  5. String sql = "select * from work";
  6. QueryRunner queryRunner = new QueryRunner();
  7. List<Object[]> list = queryRunner.query(connection, sql, new ArrayListHandler());
  8. //iter 快捷键 出foreach
  9. for (Object[] objects : list) {
  10. System.out.println(Arrays.toString(objects));
  11. }
  12. }

二、回顾JDBC

2.1JDBC前置知识点

1.如何操作数据库

  1. 使用可视化工具获取小黑屏访问数据库,需要手动建立连接,输入用户名和密码,编写SQL语句,点击执行查看执行的结果(结果集或者受影响的行数)

2.什么是JDBC

  1. JavaDatabase connectivity 使用java代码对数据库进行增删改查的

3.JDBC的核心

  1. 1.由数据库厂商提供驱动连接数据
  2. mysql-connector-java-5.1.x.jar 适用于数据库服务器的版本 5.X<br />
  3. mysql-connector-java-8.0.x.jar 适用于数据库服务器的版本 8.X
  4. 2.JDBC的核心类的和接口
  5. java.sql.DriverManaver 管理数据库驱动的类<br />
  6. java.sql.Conection 代表数据库连接对象的,如果是null证明没有连接上数据库<br />
  7. java.sqlStatement 发送SQL语句到数据库的工具(搬运工)<br />
  8. java.sql.ResultlSet 保存SQL语句查询数据库数据的一个接口<br />
  9. java.sql.SQLException 处理SQL异常的一个类
  10. 3.关于JDBC环境搭建
  11. 1.新建项目
  12. 2.src下创建lib文件夹
  13. 3.mysql的驱动文件mysql-conector-java-5.1.47.jar复制到lib文件夹中
  14. 4.选中jar包,右键 add as library

4.JDBC开发步骤

  1. 1.注册驱动
  2. Class.forName(“com.mysql.jdbc.Driver”);
  3. 2.连接数据库
  4. url = jdbcmysql:[//localhost](//localhost):3306/库名?useSSL=false
  5. user = root
  6. password = 123456
  7. 通过DriverManager.getConnectionurluserpassword
  8. 3.获取发送SQL搬用工对象
  9. connection.createStatement();
  10. 4.执行SQL语句
  11. DML:数据操作语言 增删改 ==》返回值int 受影响的行数
  12. DQL:数据查询语言 查询 ==》 返回值ResultSet结果集
  13. 5.处理结果执行完SQL结果
  14. 1.受影响的行数
  15. 2.查询的结果集
  16. 迭代 依次获取数据
  17. resultSet.next();指针,第一个在第一列前面
  18. resultSet.getXXX(字段名字);根据列名回去数据
  19. 6.释放资源
  20. 遵循掀开开后关原则

5.SQL注入

  1. 当用户在书写SQL语句的时候,删和改的时候,写了一个条件or 1=1 恒成立的条件,对数据库影响极大,这就是SQL注入
  2. 如何预防SQL注入:
  3. 使用预处理的搬运工对象 PreparedStatement,可以预编译,效率高,防止SQL注入

6.封装的思想

  1. 当再写获取连接对象的时候,和数据库里面增删改查的时候,发现重复代码比较多。
  2. 在实际开发中可以通过调用工具类来实现功能并减少冗余的代码。
  3. 实现类具有重复利用的价值
  4. JdbcUtil工具类:
  5. 1.获取Connection对象
  6. 2.关闭资源
  7. BaseDao工具类:
  8. 1.update 增删改
  9. 2.query 查询

7.连接池

  1. JDBC每次连接数据库的时候,都要获取连接数据库的Connection对象,重新连接和重新关闭,极大的浪费资源和容易内存益出。
  2. 德鲁伊druid的好处:
  3. 1.亚秒级的查询
  4. 2.实时数据的注入
  5. 3.可扩展内存
  6. 4.多环境部署
  7. 5.有丰富的社区
  8. druid的使用
  9. 1.src下面书写druid.properties
  10. 2.导包 druid.jar

8.事务的处理

  1. 1.开启事务 setAutocommitfalse
  2. 2.事务提交的两种方式
  3. 提交 commit
  4. 回滚 rollback

9.Apache组织的框架DBUtils

  1. 也是做增删改查的,已经停止更新了。