【JavaEE框架】spring之配置数据源和JdbcTemplate

news2024/11/28 14:53:27

 

目录

一、数据准备

1、在pom.xml种导入依赖包

2、 建立数据库表

 二、测试数据源(操作数据库) 

三、在spring中使用数据源

 四、增删改查操作数据库

 五、测试

六、部分代码具体分析


一、数据准备

1、在pom.xml种导入依赖包

<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-jdbc</artifactId>
  		<version>5.3.23</version>
  	</dependency>
  	<dependency>
  		<groupId>com.mchange</groupId>
  		<artifactId>c3p0</artifactId>
  		<version>0.9.5.4</version>
  	</dependency>
  	<dependency>
  		<groupId>mysql</groupId>
  		<artifactId>mysql-connector-java</artifactId>
  		<version>8.0.27</version>
  	</dependency>

2、 建立数据库表

步骤:

 二、测试数据源(操作数据库) 

package cn.edu.aaa.dao;

import java.beans.PropertyVetoException;
import java.util.List;

import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import cn.edu.cqwu.entity.Student;
import com.mchange.v2.c3p0.ComboPooledDataSource;
//数据源操作数据库
public class StudentTest {
	@Test
	public void testDB() throws PropertyVetoException {
		ComboPooledDataSource dataSource=new ComboPooledDataSource();
		dataSource.setJdbcUrl("jdbc:mysql://localhost:3308/spring?useUnicode=true"
				+ "&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false");
		dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
		dataSource.setUser("root");
		dataSource.setPassword("root");
		JdbcTemplate jbdcTemplate=new JdbcTemplate();
		jbdcTemplate.setDataSource(dataSource);
		List<Student> students =jbdcTemplate.query("select * from student",
				new BeanPropertyRowMapper<Student>(Student.class));
		System.out.println(students);
		dataSource.close();

	}
}

三、在spring中使用数据源

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context.xsd
   http://www.springframework.org/schema/aop 
   http://www.springframework.org/schema/aop/spring-aop.xsd
   ">
   <!-- 在spring中使用数据源 -->
    <context:component-scan base-package="cn.edu.aaa.utils"></context:component-scan> 
   <context:component-scan base-package="cn.edu.aaa.dao"></context:component-scan>
   <context:component-scan base-package="cn.edu.aaa.biz"></context:component-scan>
   <!-- 属性文件的使用 xml配置-->
   <context:property-placeholder location="jdbc.properties"/>
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
   		<property name="jdbcUrl" value="${url}"></property>
   		<property name="driverClass" value="${driver}"></property>
   		<property name="user" value="${user}"></property>
   		<property name="password" value="${password}"></property>
   </bean> 
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
   		<property name="dataSource" ref="dataSource"></property>
   </bean> 

   
  <bean id="dao" class="cn.edu.aaa.dao.impl.StudentDaoImpl">
   		<property name="jdbcTemplate" ref="jdbcTemplate"></property>
   </bean>   
</beans>

 四、增删改查操作数据库

StudentDaoImpl.java

package cn.edu.aaa.dao.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import cn.edu.aaa.dao.StudentDao;
import cn.edu.aaa.entity.Student;
@Repository
@Scope("singleton")
public class StudentDaoImpl implements StudentDao{
	@Autowired
	private JdbcTemplate jdbcTemplate;

	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	public List<Student> findAll() {
		// TODO Auto-generated method stub
		return jdbcTemplate.query("select * from student",
				new BeanPropertyRowMapper<Student>(Student.class));
	}

	public Student findByTd(int id) {
		// TODO Auto-generated method stub
		return jdbcTemplate.queryForObject("select * from student where student_id=?",
				new BeanPropertyRowMapper<Student>(Student.class),id);
	}

	public int save(Student student) {
		// TODO Auto-generated method stub
		return jdbcTemplate.update("insert into student values(null,?,?)",student.getName(),student.getAge());
	}

	public int update(Student student) {
		// TODO Auto-generated method stub
		return jdbcTemplate.update("update student set name=?,age=? where student_id=?",
				student.getName(),student.getAge(),student.getStudent_id());
	}

	public int deleteById(int id) {
		// TODO Auto-generated method stub
		return jdbcTemplate.update("delete from student where student_id=?",id);
	}

	
	
	
}

 五、测试

stuSqlTest .java

package cn.edu.aaa.test;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.experimental.theories.suppliers.TestedOn;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.PropertySource;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


import cn.edu.aaa.dao.StudentDao;
import cn.edu.aaa.entity.Student;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:beans.xml")

public class stuSqlTest {
	@Autowired
	private StudentDao studentDao;
	
	@Test
	public void testQuery() {
		System.out.println(studentDao.findAll());
		System.out.println(studentDao.findByTd(1));
	}
	@Test
	public void testInsert() {
		Student student=new Student();
		student.setAge(19);
		student.setName("jerry");
		System.out.println(studentDao.save(student));
		
	}
	
	@Test
	public void testUpdate() {
		Student student=new Student();
		student.setAge(30);
		student.setName("杰瑞");
		student.setStudent_id(3);
		System.out.println(studentDao.update(student));
		testQuery();
	}
	
	@Test
	public void testDelete() {
		System.out.println(studentDao.deleteById(1));
		testQuery();
	}

}

六、部分代码具体分析

JdbcTemplate jbdcTemplate=new JdbcTemplate();
jbdcTemplate.setDataSource(dataSource);
List<Student> students =jbdcTemplate.query("select * from student",
new BeanPropertyRowMapper<Student>(Student.class));
System.out.println(students);
dataSource.close();

 1、创建JdbcTemplate实例

 JdbcTemplate jbdcTemplate = new JdbcTemplate();

这里创建了一个新的JdbcTemplate实例。

2、设置数据源

jbdcTemplate.setDataSource(dataSource);

将数据源dataSource设置到JdbcTemplate实例中。数据源通常包含了数据库连接池和连接数据库所需的信息(如URL、用户名、密码等)。

3、执行查询并映射结果

List<Student> students = jbdcTemplate.query("select * from student", new BeanPropertyRowMapper<Student>(Student.class));

 使用query方法执行SQL查询,并指定BeanPropertyRowMapper作为结果集的映射器。BeanPropertyRowMapper会根据SQL查询的结果自动将每一行数据映射到Student类的实例中。这里假设Student类中的字段与数据库表student的列名匹配,并且字段类型也是兼容的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1577731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java设计模式:外观模式之优雅门面(九)

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在软件工程中&#xff0c;设计模式是解决常见设计问题的经验总结&#xff0c;它为开发者提供了一种通用的、可复用的解决方案。外…

同样是测痛仪有什么不一样?大小鼠足底光热刺痛仪VS大小鼠鼠尾测痛仪

简单介绍&#xff1a; ZL-024E大小鼠足底光热刺痛仪是应用在痛觉生理学、药理学等痛觉研究的仪器。可自动测定大/小鼠在自由状态下足底光热刺激痛阈时间&#xff0c;操作简便&#xff0c;并且可自动得出测定结果&#xff0c;是用于药理实验中研究镇痛**的理想实验仪器。 详情…

编程网站推荐

这里是我的一些喜欢用的编程可以用到的网站 json在线格式化校验工具 随机密码生成

关于近期上架过包的一些总结分享

近期过包包体很多&#xff0c;所以遇到的一些问题也是很多很杂&#xff0c;但是基本上都解决了。少部分因为政策原因导致的包体问题封号&#xff0c;这类就只能先排查问题&#xff0c;再重新制作了。对于拒审问题的解决&#xff0c;希望各位开发者能留下相关流程截图&#xff0…

使用nodejs搭建脚手架工具并发布到npm中

使用nodejs搭建脚手架工具并发布到npm中 一、安装环境依赖及脚手架搭建过程二、搭建Monorepo 风格的脚手架工程三、脚手架的必备模块命令参数模块获取命令参数设置子命令用户交互模块文件拷贝模块脚手架中的路径处理目录守卫文件拷贝模块动态文件生成模块mustache简介自动安装依…

Java 开发篇+一个简单的数据库管理系统ZDB

说明&#xff1a;本文供数据库爱好者和初级开发人员学习使用 标签&#xff1a;数据库管理系统、RDBMS、Java小程序、Java、Java程序 系统&#xff1a;Windows 11 x86 CPU &#xff1a;Intel IDE &#xff1a;IntelliJ IDEA Community Edition 2024 语言&#xff1a;Java语言 标…

在线JSON工具

功能支持 ctrls json格式化游览器本地保存ctrla ctrlc 自动检测选中范围是否是全选&#xff0c;然后按照格式化方式添加到粘贴板中json 粘贴JSON自动格式化json可视化修改json压缩复制json层级折叠json关键key 搜索(自动提示高亮)满足某些近视的可以自行调整字体大小, 并且会游…

React复习全攻略:重温旧知,收获新知

简介 大背景&#xff1a; 起源于 Facebook 的内部项目&#xff0c;因为对市面上所有JS MVC框架不满意&#xff0c;就自己开发了一套&#xff0c;用来开发Instagram项目。&#xff08;开源时间&#xff1a;2013年5月&#xff09; 三句话解释&#xff1a; 是用于构建 Web 和原…

MWeb Pro For Mac v4.5.9 强大的 Markdown 软件中文版

MWeb 是专业的 Markdown 写作、记笔记、静态博客生成软件&#xff0c;目前已支持 Mac&#xff0c;iPad 和 iPhone。MWeb 有以下特色&#xff1a; 软件下载&#xff1a;MWeb Pro For Mac v4.5.9 软件本身&#xff1a; 使用原生的 macOS 技术打造&#xff0c;追求与系统的完美结合…

OpenImageDebugger - CLion研究

在windows下有vistual studio&#xff0c;针对opencv有image watch&#xff0c;在ubuntu下用Clion插件Image Watch要收费&#xff0c;遂研究OpenImageDebugger与CLion问题&#xff0c;还有些未研究透彻&#xff0c;先记录当前部分。 Open Image Debugger Open Image Debugger …

Linux文件IO(4):目录操作和文件属性获取

目录 1. 前言 2. 函数介绍 2.1 访问目录 – opendir 2.2 访问目录 – readdir 2.3 访问目录 – closedir 2.4 修改文件访问权限 – chmod/fchmod 2.5 获取文件属性 – stat/lstat/fstat 2.5.1 文件属性 – struct stat 2.6 文件类型 – st_mode 3. 代码练习 3.1 要求 3.2 代…

深度挖掘商品信息,jd.item_get API助您呈现商品全面规格参数

深度挖掘商品信息&#xff0c;特别是在电商平台上&#xff0c;对于商家、开发者和用户来说都至关重要。jd.item_get API作为京东开放平台提供的一个强大工具&#xff0c;能够帮助用户轻松获取商品的全面规格参数&#xff0c;进而为商品分析、推荐、比较等提供有力的数据支撑。 …

灵猫论文靠谱不 #职场发展#职场发展

对于许多学生和研究人员来说&#xff0c;写论文是一个耗时且具有挑战性的任务。在撰写论文的过程中&#xff0c;除了要进行繁琐的写作工作外&#xff0c;还需要花费大量时间来查找资料、整理文献、检查语法和格式等。为了帮助大家轻松完成论文写作&#xff0c;现在有了许多写作…

【QT入门】Qt自定义控件与样式设计之QPushButton常用qss

往期回顾 【QT入门】Qt自定义控件与样式设计之qss介绍(Qt style sheet)-CSDN博客 【QT入门】 Qt自定义控件与样式设计之qss选择器-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QLineEdit的qss使用-CSDN博客 【QT入门】Qt自定义控件与样式设计之QPushButton常用qss 这里我们主…

本地电脑渲染不行怎么解决?自助式渲染助你渲染无忧

有时候&#xff0c;即使购买了昂贵的新电脑&#xff0c;我们也可能会遇到渲染速度缓慢、画质不佳或渲染失败等问题。这些问题可能由多种因素引起。针对该问题&#xff0c;为大家推荐了自助式的渲染&#xff0c;解决你本地电脑渲染不佳问题。 电脑渲染不行原因 新电脑渲染效果不…

亚马逊AWS上怎么创建Linux 服务器?操作难不难?

AWS(Amazon Web Services)是全球领先的云服务器提供商之一。你可以使用 AWS 平台在一分钟内设置完服务器。在 AWS 上&#xff0c;你可以微调服务器的许多技术细节&#xff0c;如 CPU 数量&#xff0c;内存和磁盘空间&#xff0c;磁盘类型(更快的 SSD 或者经典的 IDE)等。关于 A…

【linux】set ff=unix、linux设置文件格式

文章目录 一、文件格式二、如何查看文件格式三、设置文件格式、set ffunix四、查看unix与dos的区别 一、文件格式 当我们打开sh脚本时发现有时候格式是unix(LF) ,有时候是windows(CR LF) 。如下图&#xff1a; 文件格式影响了文件中的换行符 linux中sh类型的文件一般要设置为…

测试必备:网站崩溃原因大揭秘!12种常见问题一网打尽

网站崩溃是研发团队最怕看到的情况&#xff0c;但是由于种种原因却时常出现&#xff0c;作为测试人员&#xff0c;我们更应该比一般人了解网站崩溃的原因及排查方法&#xff0c;这是我们测试工作的重要一环。接下来我就谈谈12种常见的网站崩溃原因以及如何跟踪和解决它们。 你的…

纯小白蓝桥杯备赛笔记--DAY10(字符串)

文章目录 KMP字符串哈希算法简介&#xff1a;斤斤计较的小z--2047字符串hash Manacher回文串的性质算法简介最长回文子串 字典树基础朴素字符串查找步骤前缀判定--1204 01tire算法简介&#xff1a;例题1&#xff1a;例题2&#xff1a; KMP字符串哈希 算法简介&#xff1a; 真前…

js将对象数组中的某个属性值,批量替换成另一个数值

前提&#xff1a;对接口数据进行替换。把对应的数值或者字符串替换成中文。。。 核心代码&#xff1a; const toStr {sh: "沪",sz: "深", };myArr.map((item) > {const placeCode item.placeCode;item.placeCode toStr[placeCode] ? toStr[placeC…