SpringJdbcTemplate

配置文件

1、依赖坐标

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency> <!-- 添加相关的依赖坐标 -->
<!-- spring 框架坐标依赖添加 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- spring 测试环境 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.4.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- aop -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
<!-- spring jdbc -->
<dependency>
<!-- 添加 jdbc 配置文件-->
<!-- 在src/main/resources目录下新建jdbc.properties配置文件,并设置对应的配置信息-->
<!-- 以下为可选配置-->
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- spring事物 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- mysql 驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!-- c3p0 连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.4.RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency> </dependencies>

2、配置环境

<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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- Spring扫描注解的配置 -->
<context:component-scan base-package="com.geo" />
<!-- 加载properties 配置文件 -->
<context:property-placeholder location="jdbc.properties" />
<!-- 配置 c3p0 数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- property标签的value属性对应的是jdbc.properties中的值 -->
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean> <!-- 配置JdbcTemplate实例,并注入一个dataSource数据源-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>

3、提取properties

# 驱动名
jdbc.driver=com.mysql.cj.jdbc.Driver
# 数据库连接
jdbc.url=jdbc:mysql://localhost:3306/jdbcprac?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
# 数据库用户名称
jdbc.user= root
# 数据库用户密码
jdbc.password=0610

实体类

package com.geo.bean;

import lombok.*;
import org.springframework.stereotype.Component; /**
* Created with IntelliJ IDEA.
*
* @Author: Suhai
* @Date: 2022/04/06/16:13
* @Description:
*/
@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Component("user")
public class User {
private String id;
private String name;
private String sex;
private String classno;
private int age; @Override
public String toString() {
return "[" +
"学号=" + id +
", 姓名='" + name + '\'' +
", 性别='" + sex + '\'' +
", 班号='" + classno + '\'' +
", 年龄=" + age +
']';
}
}

1、接口类

package com.geo.Dao;

import com.geo.bean.User;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository; import javax.annotation.Resource;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List; /**
* Created with IntelliJ IDEA.
*
* @Author: Suhai
* @Date: 2022/04/11/18:42
* @Description:
*/
@Repository("userDao")
public class UserDao {
@Resource(name = "jdbcTemplate")
JdbcTemplate jdbcTemplate; /**
* 批量插入6条记录
* @param userList
*/
public void addUserBatch(List<User> userList) {
String sql = "insert into user(id,name,sex,classno,age) values(?,?,?,?,?)";
int rows = jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter()
{
@Override
public void setValues(PreparedStatement preparedStatement, int i)
throws SQLException {
// 设置参数
preparedStatement.setString(1,userList.get(i).getId());
preparedStatement.setString(2,userList.get(i).getName());
preparedStatement.setString(3,userList.get(i).getSex());
preparedStatement.setString(4,userList.get(i).getClassno());
preparedStatement.setInt(5,userList.get(i).getAge());
} @Override
public int getBatchSize() {
return userList.size();
}
}).length;
// 调用对象的添加方法,返回主键
System.out.println("受影响的行数:" + rows);
System.out.println("执行成功输出:UserDao成功执行插入操作!");
} /**
* 修改第一条记录为你的学号,姓名,性别,班号,年龄,执行成功输出:xxx成功执行修改操作
*
* @param id
*/
public void updateUserById(String id) {
int rows = jdbcTemplate.update("update user set id = ?, name = ?,sex = ?,classno = ?, age = ? where id = ?",
"419109070419","xxx","m","4191090502",21, id);
System.out.println("受影响的行数:" + rows);
System.out.println("执行成功输出:UserDao成功执行更新操作!");
} /**
* 删除第5条记录,执行成功输出:xxx成功执行删除操作
* @param id
*/
public void deleteUserById(String id) {
int rows = jdbcTemplate.update("delete from user where id = ?",
id);
System.out.println("受影响的行数:" + rows);
System.out.println("执行成功输出:UserDao成功执行删除操作!");
} /**
* 查找你的记录并输出,格式为:[学号:xxxx 姓名:xxx 性别:xxx 班号:xxx 年龄:xxx]
* @param id
*/
public void queryUserById(String id) {
String sql = "select * from user where id = ?";
User user = jdbcTemplate.queryForObject(sql, new Object[]
{id}, (resultSet, i) -> {
User user1 = new User();
user1.setId(resultSet.getString("id"));
user1.setName(resultSet.getString("name"));
user1.setSex(resultSet.getString("sex"));
user1.setClassno(resultSet.getString("classno"));
user1.setAge(resultSet.getInt("age"));
return user1;
});
System.out.println("执行成功输出:UserDao成功执行查询封装操作!");
System.out.println(user); }
}

2、Service类

package com.geo.Dao;

import com.geo.bean.User;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.util.List; /**
* Created with IntelliJ IDEA.
*
* @Author: Suhai
* @Date: 2022/04/11/18:43
* @Description:
*/
@Service("userService")
public class UserService {
@Resource(name = "userDao")
UserDao userDao; public void addUserBatch(List<User> userList) {
userDao.addUserBatch(userList);
} public void updateAUserById(String id) {
userDao.updateUserById(id);
} public void deleteUserById(String id) {
userDao.deleteUserById(id);
} public void queryUserById(String id) {
userDao.queryUserById(id);
}
}

测试类

package com.geo.Test;

import com.geo.Dao.UserDao;
import com.geo.Dao.UserService;
import com.geo.bean.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.ArrayList;
import java.util.List; /**
* Created with IntelliJ IDEA.
*
* @Author: Suhai
* @Date: 2022/04/11/19:12
* @Description:
*/
public class Test01 {
ApplicationContext ac = new ClassPathXmlApplicationContext("springjdbc.xml");//读取配置文件
UserService userService = (UserService) ac.getBean("userService"); @Test
public void addUserBatch(){
User user1 = new User("1","aaa","f","3",22);
User user2 = new User("2","bbb","f","3",22);
User user3 = new User("3","ccc","f","3",22);
User user4 = new User("4","ddd","f","3",22);
User user5 = new User("5","eee","f","3",22);
User user6 = new User("6","fff","f","3",22);
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userList.add(user5);
userList.add(user6);
userService.addUserBatch(userList);
} // 修改第一条记录为你的学号,姓名,性别,班号,年龄,执行成功输出:xxx成功执行修改操作
@Test
public void updateUserById(){
userService.updateAUserById("1");
} // 删除第5条记录,执行成功输出:xxx成功执行删除操作
@Test
public void deleteUserById( ){
userService.deleteUserById("5");
} // 查找你的记录并输出,格式为:[学号:xxxx 姓名:xxx 性别:xxx 班号:xxx 年龄:xxx]
@Test
public void queryUserById(){
userService.queryUserById("419109070419");
}
}

SpringJdbcTemplate简单实现的更多相关文章

  1. Intellij IDEA +MAVEN+Jetty实现SpringMVC简单查询功能

    利用 Intellij IDEA +MAVEN+Jetty实现SpringMVC读取数据库数据并显示在页面上的简单功能 1 新建maven项目,配置pom.xml <project xmlns= ...

  2. common-jdbc:一个基于SpringJdbcTemplate的高性能数据库操作工具类库

    项目地址:https://gitee.com/cnsugar/common-jdbc 一.简介 基于SpringJdbcTemplate的高性能数据库操作工具类库,支持mysql.oracle数据库, ...

  3. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  4. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  5. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  6. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  7. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  8. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  9. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

随机推荐

  1. MyBatis 与 Hibernate 有哪些不同?

    1.Mybatis 和 hibernate 不同,它不完全是一个 ORM 框架,因为 MyBatis 需要 程序员自己编写 Sql 语句. 2.Mybatis 直接编写原生态 sql,可以严格控制 s ...

  2. SpringBoot 日志

    springboot日志简介 SpringBoot使用的日志是sl4j + logback,sl4j是抽象层,不做具体的实现.实现主要是logback来做.SpringBoot同时也整合了其他框架的日 ...

  3. Kafka新建的分区会在哪个目录下创建?

    在启动 Kafka 集群之前,我们需要配置好 log.dirs 参数,其值是 Kafka 数据的存放目录,这个参数可以配置多个目录,目录之间使用逗号分隔,通常这些目录是分布在不同的磁盘上用于提高读写性 ...

  4. Oracle入门基础(三)一一单行函数

    SQL> --字符函数 SQL> select lower('Hello World') 转小写,upper('Hello World') 转大写,initcap('hello world ...

  5. redis有哪些功能

    基于本机内存的缓存 为了解决调用API依然需要2秒的问题,经过排查,其主要原因在于使用SQL获取热点新闻的过程中消耗了将近2秒的时间,于是乎,我们又想到了一个简单粗暴的解决方案,即把SQL查询的结果直 ...

  6. Netty学习摘记 —— 再谈EventLoop 和线程模型

    本文参考 本篇文章是对<Netty In Action>一书第七章"EventLoop和线程模型"的学习摘记,主要内容为线程模型的概述.事件循环的概念和实现.任务调度和 ...

  7. Python - 函数的五大参数

    Python的函数参数挺重要的,总结一下: (1)位置参数:没啥好说的,就是普通的参数. (2)默认参数: 参数形式:def power(x, n = 3): (在函数定义时通过对一个形参赋值的形式, ...

  8. Spring系列28:@Transactional事务源码分析

    本文内容 @Transactional事务使用 @EnableTransactionManagement 详解 @Transactional事务属性的解析 TransactionInterceptor ...

  9. ip地址与子网掩码概述

    IP地址: IP地址(Internet Protocol):IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异. IP地址分为五 ...

  10. PIC16F877A.H头文件详细注释

    /* * Header file for the Microchip  * PIC 16F873A chip * PIC 16F874A chip * PIC 16F876A chip * PIC 1 ...