一.什么是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方法获取
Connection conn = DriverManager.getConnection(p.getProperty("url"),p.getProperty("username"),p.getProperty("password"));return conn;
3.抽取释放资源的方法
包括结果集,语句对象,连接对象的释放
4.抽取加载配置文件和注册驱动
通过创建properties文件对象,避免绝对路径问题,通过线程的方法将配置文件加载到类中,
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");p = new Properties();
获取配置文件中的信息,注册加载驱动
p.load(in);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);
