1、连接池
(1)创建连接池对象 druid
DruidDataSource datasource=new ruidDataSource();
(2)设置连接池参数[必须/非必须]
必须:连接数据库驱动类的全限定符[注册驱动] url、user、password
datasource.setUrl("jdbc:mysql://localhost:3306/atxxx");
datasource.setUsrname("root");
datasource.setPassword("root");
datasource.setDruidclassName("com.mysql.cj.jdbc.Driver");
(3)获取连接
[DruidPooled] Connection connection=dataSource.getConnection();
数据库操作
(4)回收连接
connection.close(); 归还连接池
2、软编码
配置文件 ______.properities
key=value 形式且key固定命名
driverClassName=com.mysql.cj.jdbc.Driver
username=root
password=root
url=jdbc:mysql://localhost:3306/atxxx
@test
Public void testsoft(){
(1)读取外部配置文件 Properties
Properties pro =new Properties(); //src下的文件可以直接使用类加载器提供的方法读文件
//DruidUsePart.class 反射技术
InputStream ips=DruidUsePart.class.getClassLoader().getResourceAsStream("____.properties");
pro.load(ips);
(2)使用连接池的工具类的工程模式创建连接池
DataSource datasource=DruidDataSourceFactory.createDataSource(pro);
(3)获取连接 同上
(4)回收连接 同上
}
3、线程本地变量
ThreadLocal 可以为同一个线程存储共享变量
get()获取 set()设置 remove()移除
声明线程:
Private static ThreadLocal(<Connection>) tl=new ThreadLocal();
获取连接:
if(tl.get()==null){
Connection connection=datasource.getvonnection();
tl.set(connection);
}else{
Connection connection=tl.get();
}
回收连接:
Public static freeconnection() throws SQLException{
Connection connection=cl.get();
if(connection!=null){
tl.remove();
connection.setAutoCommit(true);
connection.close();
}
}
4、整理
(1)注册驱动
(2)获取连接
(3)编写sql语句结构
(4)创建Statement
(5)占位符赋值
(6)发送sql语句
(7)结构解析
(8)回收资源
(1)(2)(8)工具类封装
(3)(4)(5)(6)(7)应用层封装BaseDao
5、可变参数当数组使用
下标从1开始
Public int executeUpdate(String sql,Object ...params){
for (int i =1;i<=params.length;i++)
preparedstatement.setObject(i,params[i-1]);
int rows =preparedstatement.executUpdate();
//判断是不是事务,如果是则此处不回收连接
if(connection.getAutoCommit()){
jdbcUtils.freeConnnection();
}
preparedstatement.close();
}
6、反射
调用类的无参构造函数创建对象
T t=clazz.newInstance();
反射给对象的属性值赋值
Filed field=clazz.getDeclaredFiled(propertyName);
field.setAccessible(true); //打破私有属性不可设置的限制
field.set(t,value);
String propertyName=metadata.getColumnLable(i);
Object value=resultSet.getObject(i);