目录
概述
获取数据库连接:
方式一:
方式二:反射实现动态性。
方式三:
方式四:
方式五:通过配置文件解耦。通过获取系统类加载器,加载文件。
使用PreparedStatement实现CURD
拼接问题:
sql注入:
preparedstatement:
新建类,封装重复的数据库连接会让关闭连接操作:
关闭连接和stetement
实现update:
通用的增删改:减少ps.setobject的不确定:参数放数组里面传递给函数
查询:如何处理返回的结果集,如何实现通用所有表的查询
创建相关类以接收返回值。
接收对象
调用测试:
针对一张表的通用查询实现:把变的东西发进形参,通过反射实现列赋值的动态性。
测试:
当表的列名和orm类的属性名不一致:sql语句加别名,并且改变获取列的别名来操作
针对不同表的通用查询操作:因为不同表,所以不同类需要用参数传进来,并反射获取类属性。
查询返回同一个类的多个对象实现:
preparedstatement如何解决的sql注入:因为prepared已经进行了预编译,所以查询就变成了填空题,逻辑已经确定,
操作Blob数据:
查询blob:
一些特殊情况:插入大图片,在mysql配置文件中配置。
批量数据操作:
插入的方式三:减少和数据库连接操作。非一次插入一条。
方式四:
数据库事务:
传进连接,并且不再操作内部关闭连接。
Java设置数据库隔离级别:以及测试脏读
DAO及其实现类:
BaseDAO里,存放的就是就是之前实现的通用cuid方法。声明为抽象类,本身不可实例化。
然后针对不同的表写dao接口和实现类
实现类:
优化:添加泛型,因为实现类的操作类型是确定的。
获取调用的类的父类的泛型。有点疑问。
数据库连接池
连接池连接:c3p0测试
优化:使用配置文件
DBCP连接池测试:
德鲁伊连接池:
Apache-DBUtils实现crud操作:
查询测试:
接收特殊值。
自定义类型实现resulthandler接口:
调用关闭操作: