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

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.dtcms.com/a/316943.html

相关文章:

  • IDEA JAVA工程入门
  • CVPR优秀论文 | DashGaussian:在200秒内优化三维高斯点绘制
  • Redis Windows迁移方案与测试
  • 嵌入式学习 双向链表 循坏链表 内核链表
  • Reading Books(Sorting and Searching)
  • Redis备份方案:持久化与外部工具全解析
  • G1系统概括
  • 电脑搜索不到公司无线网络
  • 【C# Winform】 Action事件驱动的多层数据传递
  • 【运维部署篇】OpenShift:企业级容器应用平台全面解析
  • 跑yolov5的train.py时,ImportError: Failed to initialize: Bad git executable.
  • Android 之 Kotlin中的kapt
  • io_uring系统调用及示例
  • Houdini Pyro学习笔记
  • [数组]977.有序数组的平方;209.长度最小的子数组
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-邮箱重置密码
  • 数据结构——双向链表
  • 【学习嵌入式day-17-数据结构-单向链表/双向链表】
  • C语言:预处理、 库文件、 文件IO
  • Python深度学习:从入门到进阶
  • GPT-1、GPT-2、GPT-3 的区别和联系
  • C语言基础_IDE、进制转换、基本数据类型、输入输出函数、运算符
  • 一文搞定JavaServerPages基础,从0开始写一个登录与人数统计页面
  • 模拟面试总结
  • JSP相关Bug解决
  • Vue.js 教程
  • 市场与销售协同:CRM如何打破部门数据孤岛?
  • 思途Mybatis学习 0805
  • 一个小巧神奇的 USB数据线检测仪
  • LabVIEW 2025 安装攻略(附图文教程)适用于测试与自动控制领域