当前位置: 首页 > web >正文

Spring配置JDBC,使用JdbcTemplate套件和Druid套件

Spring配置JDBC,使用JdbcTemplate套件和Druid套件

摘要:本文介绍了Spring框架中配置JDBC的两种方式,使用JdbcTemplate和Druid数据源。通过XML文件配置数据源和JdbcTemplate,包括基础配置和通过.properties文件动态加载配置的进阶方法。提供了Druid连接池的可选参数配置示例,并展示了如何使用JdbcTemplate执行CRUD操作,包括插入数据、查询单行结果和查询列表结果。查询部分演示了RowMapper的标准写法和lambda简化写法,以及使用BeanPropertyRowMapper自动映射列名和属性名的方法。

XML配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置Spring的JDBC模板 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/spring_ioc_xml_practice_02?useSSL=false&amp;serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="123456"/><!-- 可选配置 --><property name="initialSize" value="5"/><property name="maxActive" value="20"/><property name="minIdle" value="5"/><property name="maxWait" value="60000"/></bean>
<!--    配置--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/><!-- 可选配置 --><property name="fetchSize" value="100"/><property name="maxRows" value="1000"/><property name="queryTimeout" value="30"/></bean><!--    _______________________________________________________________________________________- -->
<!--    进阶-->
<!--    读取 .properties文件配置信息 然后 value中使用 value = "${key}" 的格式,动态配置--><!--导入:       xmlns:context="http://www.springframework.org/schema/context"-->
<!--    多个配置文件 用逗号分割 classpath:jdbc.properties,classpath:jdbc.properties--><context:property-placeholder location="classpath:jdbc.properties"/><bean id="dataSource1" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.jdbcurl}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean>
</beans>

properties文件配置

jdbc.jdbcurl = jdbc:mysql://localhost:3306/jdbc?useSSL=false&serverTimezone=UTC
jdbc.username = root
jdbc.password = 123456
jdbc.driverClassName = com.mysql.cj.jdbc.Driver

Test方法

    /*** 通过ioc容器读取配置的JdbcTemplate组件*/@Testpublic void testForIoC() {// 1.创建ioc容器ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-01.xml");// 2. 获取JdbcTemplate组件JdbcTemplate jdbcTemplate = applicationContext.getBean("dataSource1", JdbcTemplate.class);// 3. 进行数据库的curd动作int rows = jdbcTemplate.update("INSERT INTO test(name,age,class) values (?,?,?)", "张三", 18, "A1");System.out.println(rows);/*** 查询 返回单行值* 参数1:sql语句,可以使用?* 参数2:RowMapper 列名和属性名的映射器接口* 参数3:sql语句的参数*/String sql = "SELECT name,age,class FROM test where name = ?";// 标准写法  注:RowMapper 实际开发中推荐使用BeanPropertyRowMapper"Student student2 = jdbcTemplate.queryForObject(sql, new RowMapper<Student>() {@Overridepublic Student mapRow(ResultSet rs, int rowNum) throws SQLException {// rs 结果集// rowNum 行数// rs 结果集中获取列的值,赋值给实体类对象Student student = new Student();student.setName(rs.getString("name"));student.setAge(rs.getInt("age"));student.setClasses(rs.getString("class"));return student;}}, "张三");// lambda简化版Student student1 = jdbcTemplate.queryForObject(sql, (rs, rowNum) -> {// rs 结果集// rowNum 行数// rs 结果集中获取列的值,赋值给实体类对象Student student = new Student();student.setName(rs.getString("name"));student.setAge(rs.getInt("age"));student.setClasses(rs.getString("class"));return student;}, "张三");
//        查询所有学生的信息sql = "SELECT name,age,class as classes FROM test";//        BeanPropertyRowMapper 是 RowMapper 的实现类 会自动映射列名跟属性名,要求列名跟属性名一致,不一致,自己起别名List<Student> studentList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Student.class));}
http://www.xdnf.cn/news/17215.html

相关文章:

  • java回顾八股文中想起的知识点
  • Docker使用的常见问题
  • 开源密码恢复实用程序 Hashcat 7.0.0 发布
  • cf.训练
  • 数据结构 实现单链表
  • STM32学习笔记2-GPIO的输出模式
  • 机器学习通关秘籍|Day 03:决策树、随机森林与线性回归
  • 去哪儿StarRocks实践
  • 2025国赛数学建模C题详细思路模型代码获取,备战国赛算法解析——层次分析法
  • RabbitMQ削峰填谷详解:让系统在流量洪峰中“稳如泰山”
  • 零基础人工智能学习规划之路
  • 从LCM到SomeIP,再到DDS:技术演进与工作原理剖析
  • NuGet03-私有仓库搭建
  • 虚幻GAS底层原理解剖二 (GE)
  • NumPy 重要知识点总结
  • 【RabbitMQ】高级特性—消息确认详解
  • PYQT学习笔记:signal 和 slot(信号与槽)
  • 数学建模算法-day[15]
  • 【web自动化测试】实战
  • scikit-learn工具介绍
  • Android Framework代码屏蔽未接来电振动及声音通知
  • 【Linux系统编程】线程概念与控制
  • 【力扣 Hot100】 刷题日记
  • 微服务架构及常见微服务技术栈
  • 【motion】HumanML3D 的安装2:psbody-mesh安装成功
  • ubuntu24中部署k8s 1.30.x-底层用docker
  • 海信IP810N/海信IP811N_海思MV320-安卓9.0主板-TTL烧录包-可救砖
  • 第13届蓝桥杯Scratch_选拔赛_初级组_真题2022年1月22日
  • AcWing 3690:求交点 ← 复旦大学考研机试题 + 克莱姆法则
  • DHCP 握手原理