SpringJdbcTemplate简单实现
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简单实现的更多相关文章
- Intellij IDEA +MAVEN+Jetty实现SpringMVC简单查询功能
利用 Intellij IDEA +MAVEN+Jetty实现SpringMVC读取数据库数据并显示在页面上的简单功能 1 新建maven项目,配置pom.xml <project xmlns= ...
- common-jdbc:一个基于SpringJdbcTemplate的高性能数据库操作工具类库
项目地址:https://gitee.com/cnsugar/common-jdbc 一.简介 基于SpringJdbcTemplate的高性能数据库操作工具类库,支持mysql.oracle数据库, ...
- 【造轮子】打造一个简单的万能Excel读写工具
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...
- Fabio 安装和简单使用
Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 使用 Nodejs 搭建简单的Web服务器
使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...
随机推荐
- 什么是 Netflix Feign?它的优点是什么?
Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序. Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其 ...
- 如何从https://developer.mozilla.org上查询对象的属性、方法、事件使用说明和示例
在https://developer.mozilla.org搜索要在前面加上指令 搜索之后点进去 进入之后就是这样的 在页面左边你可以选择自己要查询的对象 里面就是会有属性.方法.事件使用说明和示例.
- MyBatis Plus 2.3 个人笔记-01-代码生成器
sb_mybatis_puls2.3 <?xml version="1.0" encoding="UTF-8"?> <project xmln ...
- 【freertos】007-系统节拍和系统延时管理实现细节
前言 本章节的时钟系统节拍主要分析FreeRTOS内核相关及北向接口层,南向接口层不分析. 本章节的系统延时主要分析任务系统延时实现. 原文:李柱明博客:https://www.cnblogs.com ...
- 一整套PCB设计流程和要点,老板再也不怕我出错!
资料输入阶段 1. 在流程上接收到的资料是否齐全(包括:原理图.*.brd文件.料单.PCB设计说明以及PCB设计或更改要求.标准化要求说明.工艺设计说明文件) 2. 确认PCB模板是最新的 3. 确 ...
- HTML5存储方式
由于之前在参加面试或者笔试的过程中经常会被问到HTML5存储的内容,包括它们之间的区别.特征和应用范围,所以看到一篇介绍不错的文章,把里面的个人觉得适合我的内容按照自己的理解总结如下.方便以后忘记了进 ...
- JavaScript 工作原理之六-WebAssembly 对比 JavaScript 及其使用场景
原文请查阅这里,略有改动,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第六章. 现在 ...
- java中程序,进程和线程的区别
2.程序,进程和线程的区别 马克-to-win:程序,进程和线程的区别是什么?这个问题比较抽象难理解,但又非常重要.我并不想给出一大堆抽象的学术解释,那样只能误国误民.所以我先给大家举一个例子.马克- ...
- Python Turtle库绘制蟒蛇
使用Python Turtle库来绘制蟒蛇 import turtle引入了海龟绘图体系 使用setup函数,设定了一个宽650像素和高350像素的窗体,其位置左上角坐标是200,200 说明位置在距 ...
- uni-app开发的h5 访问url自动添加 #的问题
在manifest.json配置文件修改h5的内容,添加router部分 "h5" : { "title" : "xxx", "d ...