愿景:"让编程不再难学,让技术与生活更加有趣"
更多架构课程请访问 xdclass.net
目录
第1集 Apache dbcp数据库连接池封装DataSourceUtils案例实战
第3集 BeanHandler和BeanListHandler结果集处理器实战
第4集 MapHandler-ScalarHandler结果集处理器实战
第1集 数据库工具类自定义DBUtils封装
简介:自定义DBUtils工具类封装
- 优化JDBC操作,提高效率
- javaweb项目中,使用jdbc需要添加mysql启动到tomcat里面
/**
* DB工具类
* 小滴课堂 https://xdclass.net
* 讲师微信:xdclass6
*
*/
public class CustomDBUtil {
private static String url;
private static String username;
private static String password;
private static String driver;
static {
try {
Properties properties = new Properties();
properties.load(CustomDBUtil.class.getClassLoader().getResourceAsStream("db.properties"));
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
driver = properties.getProperty("driver");
//加载JDBC驱动程序
Class.forName(driver);
}catch (Exception e){
e.printStackTrace();
}
}
/**
*
* 小滴课堂 https://xdclass.net
* 讲师微信:xdclass6
*
* 获取连接
* @return
* @throws Exception
*/
public static Connection getConnection() throws Exception{
Connection connection = DriverManager.getConnection(url,username,password);
return connection;
}
/**
* 小滴课堂 https://xdclass.net
* 讲师微信:xdclass6
*
* 关闭数据库资源
* @param resultSet
* @param ps
* @param connection
*/
public static void close(ResultSet resultSet, PreparedStatement ps, Connection connection){
try{
if(resultSet!=null){
resultSet.close();
}
if(ps!=null){
ps.close();
}
if(connection!=null){
connection.close();
}
}catch (SQLException e){
throw new RuntimeException();
}
}
}
第2集 性能优化之池化思想你知道多少
简介: 数据库连接池化思想
-
为什么要用连接池
- 数据库建立Connection比较耗时,频繁的创建和释放连接引起的大量性能开销
- 如果数据库连接得到重用,避免这些开销,也提高了系统稳定
- 数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用,对于业务请求处理而言,直接利用现有可用连接,缩减了系统整体响应时间
- 统一的连接管理,避免数据库连接泄漏、超时占用等问题
-
同类对比其他池化思想
- Java线程池
- tomcat连接池
- 对象池(SpringIOC容器)
第3集 javaweb基础+JDBC知识总结回顾
简介: Javaweb基础+JDBC知识点回顾
-
http基础
-
tomcat
-
javaweb
- servlet
- jsp
- httpservletrequest
- httpservletresponse
- 请求转发
- 请求重定向
- el
- session
- cookie
- 文件上传下载
- Listener监听器
- Filter过滤器
- MVC
-
JDBC
第4集 市面上主流的DB工具类和数据库连接池介绍
简介:介绍市面上常见的DB工具类和数据连接池
-
数据库工具类 : Apache commens-dbutils
-
Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,能极大简化jdbc编码的工作量,同时也不会影响程序的性能
-
导入
- 可以添加到tomcat的lib包
- 可以添加到web-inf的lib包
-
-
数据库连接池:c3p0、druid、dbcp
- dbcp: 全称 DataBase connection pool,数据库连接池是 apache 上的一个Java连接池项目
- 地址:http://commons.apache.org/proper/commons-dbcp/
愿景:"让编程不再难学,让技术与生活更加有趣"
更多架构课程请访问 xdclass.net
数据库连接池和Apache DBUtils实战
第1集 Apache dbcp数据库连接池封装DataSourceUtils案例实战
简介:Apache dbcp数据库连接池封装DataSourceUtils实战
-
配置
driverClassName = com.mysql.jdbc.Driver url = jdbc:mysql://127.0.0.1:3306/xd_web?useUnicode=true&characterEncoding=utf-8&useSSL=false username = root password = xdclass.net initialSize=2 //连接池建立时创建的连接的数量 maxActive=15 //连接池同一时间内最多能够分配的活动连接的数量
-
工具类开发
public class DataSourceUtil { private static DataSource dataSource; static { try{ InputStream in = DataSourceUtil.class.getClassLoader().getResourceAsStream("database.properties"); Properties p = new Properties(); p.load(in); dataSource = BasicDataSourceFactory.createDataSource(p); }catch (Exception e){ e.printStackTrace(); throw new ExceptionInInitializerError("初始化DBPC失败"); } } public static DataSource getDataSource(){ return dataSource; } }
第2集 Apache dbutils工具快速入门实战
简介:Apache dbutils工具快速入门实战
-
DbUtils 中的核心类/接口
-
QueryRunner
-
查询执行器,提供对sql语句操作的API
-
update(String sql,Object...params) 可执行 增-INSERT、删-DELETE、改-UPDATE
-
query(String sql,ResultSetHandler rsh,Object...params) 可执行 查询-SELECT
-
-
ResultSetHandler
-
结果集处理类,执行处理一个结果集对象,将数据转变并处理为任何一种形式
- BeanHandler 结果集中的第一行数据封装到一个对应的JavaBean实例
- BeanListHandler 结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里
- MapHandler 结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值
- MapListHandler 结果集中的每一行数据都封装到一个Map里,然后再存放到List
- ScalarHandler 结果集中第一行数据指定列的值,常用来进行单值查询
-
-
-
例子
QueryRunner queryRunner = new QueryRunner(DataSourceUtil.getDataSource()); public User findById(int id) { String sql = "select * from user where id = ? "; User user = null; try { user = queryRunner.query(sql,new BeanHandler<>(User.class,processor),id); } catch (SQLException e) { e.printStackTrace(); } return user; }
第3集 BeanHandler和BeanListHandler结果集处理器实战
简介:BeanHandler和BeanListHandler多个结果集处理器实战
- BeanHandler : 结果集中的第一行数据封装到一个对应的JavaBean实例
/**
* 小滴课堂jdbc实战
*
* 根据id找用户
*
* @param id
* @return
*/
public User findById(int id){
String sql = "select * from user where id=?";
User user = null;
try {
user = queryRunner.query(sql,new BeanHandler<>(User.class,processor),id);
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
- 开启驼峰映射:数据库字段映射Java类
//开启驼峰映射
private BeanProcessor bean = new GenerousBeanProcessor();
private RowProcessor processor = new BasicRowProcessor(bean);
- BeanListHandler: 结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里
public List<User> list(){
String sql = "select * from user";
List<User> list = null;
try {
list = queryRunner.query(sql,new BeanListHandler<>(User.class,processor));
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
第4集 MapHandler-ScalarHandler结果集处理器实战
简介:MapHandler和ScalarHandler结果集处理器实战
-
MapHandler : 结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值
/** * 小滴课堂jdbc实战 * 有问题加讲师微信: xdclass6 * 根据id找用户 MapHandler * * @param id * @return */ public Map<String,Object> findByIdWithMap(int id){ String sql = "select * from user where id=?"; Map<String,Object> map = null; try { map = queryRunner.query(sql,new MapHandler(),id); } catch (SQLException e) { e.printStackTrace(); } return map; }
-
MapListHandler : 结果集中的每一行数据都封装到一个Map里,然后再存放到List
/** * 小滴课堂jdbc实战 https://xdclass.net * 有问题加讲师微信: xdclass6 * 查找全部用户 MapListHandler * * @return */ public List<Map<String,Object>> listWithMap(){ String sql = "select * from user"; List<Map<String,Object>> list = null; try { list = queryRunner.query(sql,new MapListHandler()); } catch (SQLException e) { e.printStackTrace(); } return list; }
-
ScalarHandler : 结果集中第一行数据指定列的值,常用来进行单值查询
public int countUser(){ String sql = "select count(*) from user"; Long count = null; try{ count = (Long)queryRunner.query(sql,new ScalarHandler<>()); }catch (Exception e){ e.printStackTrace(); } return count.intValue(); }
第5集 QueryRunner新增update语法实战
简介:QueryRunner新增记录update实战
-
update新增
public int save(User user) throws Exception { String sql = "insert into user (phone,pwd,sex,img,create_time,role,username,wechat) values(?,?,?,?,?,?,?,?)"; Object [] params = { user.getPhone(), user.getPwd(), user.getSex(), user.getImg(), user.getCreateTime(), user.getRole(), user.getUsername(), user.getWechat() }; // String sql = "delete from user where id= ?"; // Object [] params = { 1}; int i = 0; try{ i = queryRunner.update(sql,params); }catch (Exception e){ e.printStackTrace(); throw new Exception(); } return i; }
干货文档
关注公众号发送:“CSDN干货文档” 即可领取