一.什么是JDBC?(JAVA DataBase Connectivity 由java语言编写的类和接口组成)

    1.JDBC是JAVA封装的数据库操作,我理解的JDBC是一种连接工具,java通过它能够与各种数据库进行连接,从而进行一些需要的操作,而JDBC由很多类和接口组成,从而也定义了一套针对数据库操作的规范

    二.JDBC的基本操作

    1.与数据库进行连接步骤:

    ①先导入jar包
    ②加载注册驱动
    ③获取连接对象
    ④创建语句对象
    ⑤执行sql语句
    ⑥释放资源

    因为其中重复的代码太多,我们可以对代码进行优化和抽取

    2.从而引入DAO思想,什么是DAO?

    答:DAO就是面向对象的一套数据库接口,其中封装了一套针对数据库数据进行增删改查的操作的API,主要是要注意建包规范

    三.预编译语句

    1.preparedStatement是statement的子接口,表示预编译sql语句的对象,可以多次编译sql语句

    2.和statement的区别,statement语句只能执行一次,而且当字段很多时,获取字段十分复杂,而预编译语句可以执行多次sql语句,且提供占位符,能简化操作,增加代码的可读性,预编译语句还能防止sql注入的问题

    四.抽取JdbcUtil工具类

    1.抽取db.properties

    创建resources文件目录,将数据库四要素(driverClassName,url,username,password,)写入到db.properties中

    2.抽取获取连接对象

    通过DriverManger.getConnection方法获取

    1. Connection conn = DriverManager.getConnection(
    2. p.getProperty("url"),
    3. p.getProperty("username"),
    4. p.getProperty("password"));
    5. return conn;

    3.抽取释放资源的方法

    包括结果集,语句对象,连接对象的释放

    4.抽取加载配置文件和注册驱动

    通过创建properties文件对象,避免绝对路径问题,通过线程的方法将配置文件加载到类中,

    1. InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
    2. p = new Properties();

    获取配置文件中的信息,注册加载驱动

    1. p.load(in);
    2. dataSource = DruidDataSourceFactory.createDataSource(p);

    五.JDBC事务

    1.事务就是防止业务发生异常造成损失,而产生的一套操作,事务将多个业务联系在一起,不可分割,要么同时失败,要么同时成功

    2.事务的特点:

    ①原子性:一个事务中含多个业务,原子性操作,不可再分割,同生共死

    ②隔离性:事务之间相互隔离,不影响彼此

    ③一致性:事务执行结果与预期结果相符

    ④持久性:当 事务完成后,被更新的数据会持久到磁盘中

    3.事务的操作步骤:

    ①定义事务,不设置则是自动提交,conn.setAutoCommit(false);

    ②所有操作完成后,提交事务 conn.commit();

    ③遇到异常回滚事务conn.rollback();

    六.连接池:

    1.主要是增加了连接对象的复用性,以及提高了性能

    七.Druid连接池使用

    1.导包

    2.通过调用dataSource = DruidDataSourceFactory.createDataSource(p);工厂方法获取配置文件中的数据库四要素

    八.注解

    1.注解是什么?

    ^^贴在类/方法/方法的形参/字段/构造器/包
    ^^标识该元数据对象的作用,对元数据对象进行增强(注解本身+被贴的对象+赋能的代码)

    注解就类似于一种标注,一种标签,可以用在方法,类,字段上面,声明对应的作用

    2.注解的作用

    注解要产生作用,不仅需要所注明的元素,注解本身,还需要有一块代码提供注解增强的功能的实现

    3.怎么创建注解

    @Target(ElementType.METHOD) // ElementType.METHOD | ElementType.FIELD | ElementType.CLASS | ElementType.PARAMETER

    @Retention(RetentionPolicy.RUNTIME) // SOURCE:源码时期、CLASS:字节码时期、RUNTIME:运行时期

    public @interface 注解名 {
    // 注解中以抽象方法的方式定义属性
    String value() default “”; // 在使用注解时,如果是 value 属性,并且只有一个属性,可以不写属性名称
    int[] levels();
    }

    4.获取注解

    获取注解:(通过反射)
    注解 对象 = method.getAnnotation(注解.class);