1.6 初探JdbcTemplate操作

news/2025/2/13 2:22:02/

一、JdbcTemplate案例演示

1、创建数据库与表

(1)创建数据库

执行命令:CREATE DATABASE simonshop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
或者利用菜单方式创建数据库 - simonshop
在这里插入图片描述

打开数据库simonshop
在这里插入图片描述

(2)创建用户表

创建用户表 - t_user
在这里插入图片描述

CREATE TABLE `t_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(20) NOT NULL,`password` varchar(20) DEFAULT NULL,`telephone` varchar(11) DEFAULT NULL,`register_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,`popedom` int(11) DEFAULT NULL COMMENT '0:管理员;1:普通用户',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4;

(3)用户表添加记录

给用户表添加4条记录
在这里插入图片描述

INSERT INTO `t_user` VALUES ('1', 'admin', '12345', '15734345678', '2016-12-02 08:40:35', '0');
INSERT INTO `t_user` VALUES ('2', '郑晓红', '11111', '13956567889', '2016-12-20 09:51:43', '1');
INSERT INTO `t_user` VALUES ('3', '温志军', '22222', '13956678907', '2016-12-20 09:52:36', '1');
INSERT INTO `t_user` VALUES ('4', '涂文艳', '33333', '15890905678', '2016-12-05 09:52:56', '1');

(4)查看用户表内容

用户表 - t_user有4条记录
在这里插入图片描述

2、打开Spring项目

Spring项目 - SpringDemo
在这里插入图片描述

3、添加数据库相关依赖

在pom.xml文件里添加相关依赖
在这里插入图片描述

<!--Spring数据库支持-->                                  
<dependency>                                        <groupId>org.springframework</groupId>          <artifactId>spring-jdbc</artifactId>            <version>5.3.25</version>            
</dependency>                                       
<!--数据库驱动工具包-->                                     
<dependency>                                        <groupId>mysql</groupId>                        <artifactId>mysql-connector-java</artifactId>   <version>5.1.49</version>                       
</dependency>                                       
<!--数据库连接池框架-->                                     
<dependency>                                        <groupId>com.alibaba</groupId>                  <artifactId>druid</artifactId>                  <version>1.2.16</version>                       
</dependency>       

4、创建用户实体类

ORM(Object Relation Mapping)对象关系映射
用户表t_user对应的用户实体类User ,表里的字段对应实体类的属性,一条表记录对应一个实体对象
在net.hf.spring包里创建day06.bean子包,然后在子包里面创建User类
在这里插入图片描述

package net.hf.spring.day06.bean;import java.util.Date;/*** 功能:用户实体类* 作者:hf* 日期:2023年03月01日*/
public class User {private int id;private String username;private String password;private String telephone;private Date registerTime;private int popedom;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getTelephone() {return telephone;}public void setTelephone(String telephone) {this.telephone = telephone;}public Date getRegisterTime() {return registerTime;}public void setRegisterTime(Date registerTime) {this.registerTime = registerTime;}public int getPopedom() {return popedom;}public void setPopedom(int popedom) {this.popedom = popedom;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", telephone='" + telephone + '\'' +", registerTime=" + registerTime +", popedom=" + popedom +'}';}
}

5、创建用户数据访问接口

DAO(Data Access Object)数据访问对象
在net.hf.spring包里创建day06.dao子包,在子包里创建UserDao接口
在这里插入图片描述

package net.hf.spring.day06.dao;import net.hf.spring.day06.bean.User;import java.util.List;/*** 功能:用户数据访问接口* 作者:hf* 日期:2023年03月01日*/
public interface UserDao {int insert(User user);int deleteById(int id);int update(User user);User findById(int id);List<User> findAll();User login(String username, String password);
}

6、创建用户数据访问接口实现类

Impl - Implementation 实现
在net.hf.spring.day06.dao包里创建impl子包,然后在子包里创建UserDaoImpl类
在这里插入图片描述

package net.hf.spring.day06.dao.impl;import net.hf.spring.day06.bean.User;
import net.hf.spring.day06.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;/*** 功能:用户数据访问接口实现类* 作者:hf* 日期:2023年03月01日*/
@Repository("userDao")
public class UserDaoImpl implements UserDao {@Autowiredprivate JdbcTemplate jdbcTemplate;/*** 插入用户记录** @param user* @return 插入记录数*/public int insert(User user) {// 定义字符串String strSQL = "INSERT INTO t_user (username, password, telephone, " +"register_time, popedom) VALUES (?, ?, ?, ?, ?)";// 调用模板的更新方法执行SQL语句return jdbcTemplate.update(strSQL, user.getUsername(),user.getTelephone(), user.getRegisterTime(), user.getPopedom());}/*** 按编号删除用户记录** @param id* @return 删除记录数*/public int deleteById(int id) {// 定义SQL字符串String strSQL = "DELETE FROM t_user WHERE id = ?";// 调用模板的更新方法执行SQL语句return jdbcTemplate.update(strSQL, id);}/*** 更新用户记录** @param user* @return 更新记录数*/public int update(User user) {// 定义SQL字符串String strSQL = "UPDATE t_user SET username = ?, password = ?, " +"telephone = ?, register_time = ?, popedom = ? WHERE id = ?";// 调用模板的更新方法执行SQL语句return jdbcTemplate.update(strSQL, user.getUsername(), user.getPassword(),user.getTelephone(), user.getRegisterTime(), user.getPopedom(), user.getId());}/*** 按编号查询用户记录** @param id* @return 用户对象*/public User findById(int id) {String strSQL = "SELECT * FROM t_user WHERE id = ?";return jdbcTemplate.queryForObject(strSQL, new RowMapper<User>() {// 行映射方法(将用户表记录映射成用户实体)@Overridepublic User mapRow(ResultSet rs, int row) throws SQLException {// 创建用户表User user = new User();// 从结果获取字段值设置用户对象属性user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));user.setTelephone(rs.getString("telephone"));user.setRegisterTime(rs.getTimestamp("register_time"));user.setPopedom(rs.getInt("popedom"));// 返回用户对象return null;}}, id);}/*** 查询全部用户记录** @return 用户列表*/public List<User> findAll() {// 创建用户列表List<User> users = new ArrayList<>();// 定义SQL字符串String strSQL = "SELECT * FROM t_user";// 查询获取行列表List<Map<String, Object>> rows = jdbcTemplate.queryForList(strSQL);// 遍历行列表,生成用户列表for (Map<String, Object> row : rows) {// 创建用户对象User user = new User();// 从行获取列值设置用户对象属性user.setId((Integer) row.get("id"));user.setUsername((String) row.get("username"));user.setPassword((String) row.get("password"));user.setTelephone((String) row.get("telephone"));user.setRegisterTime((Date) row.get("register_time"));user.setPopedom((Integer) row.get("popedom"));// 将用户对象添加到用户列表users.add(user);}// 返回用户列表return null;}/*** 用户登录** @param username* @param password* @return 用户实体(null:登录失败,not null:登录成功)*/public User login(String username, String password) {String strSQL = "SELECT * FROM t_user WHERE username = ? AND password = ?";return jdbcTemplate.queryForObject(strSQL, new RowMapper<User>() {// 行映射方法(将用户表记录映射成用户实体)public User mapRow(ResultSet rs, int row) throws SQLException {// 创建用户对象User user = new User();// 从结果集获取字段值设置用户对象属性user.setId(rs.getInt("id"));user.setUsername(rs.getString("username"));user.setPassword(rs.getString("password"));user.setTelephone(rs.getString("telephone"));user.setRegisterTime(rs.getTimestamp("register_time"));user.setPopedom(rs.getInt("popedom"));// 返回用户对象return user;}}, username, password);}
}

7、创建用户服务类

在net.hf.spring.day06包里创建service子包,然后在子包里创建UserService类
在这里插入图片描述

package net.hf.spring.day06.service;import net.hf.spring.day06.bean.User;
import net.hf.spring.day06.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** 功能:用户服务类* 作者:hf* 日期:2023年03月07日*/@Service("userService")
public class UserService {@Autowiredprivate UserDao userDao;public int addUser(User user) {return userDao.insert(user);}public int deleteUserById(int id) {return userDao.deleteById(id);}public int updateUser(User user) {return userDao.update(user);}public User findUserById(int id) {return userDao.findById(id);}public List<User> findAllUsers() {return userDao.findAll();}public User login(String username, String password) {return userDao.login(username, password);}
}

8、创建数据库配置属性文件

在resources目录里创建数据库配置属性文件 - jdbc.properties
在这里插入图片描述

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/simonshop?useSSL=false
jdbc.username=root
jdbc.password=p@ssw0rd

注意密码要改成你安装MySQL时候设置的密码

9、创建Spring配置文件

在resources里创建Spring配置文件 - spring-config.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--组件扫描--><context:component-scan base-package="net.hf.spring.day06"/><!--声明属性占位符--><context:property-placeholder location="jdbc.properties"/><!--定义数据源Bean--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><!--定义JDBC模板Bean--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"/></bean>
</beans>

10、创建用户服务测试类

在test/java目录的net.hf.spring包里创建day06.service子包,然后在子包里创建TestUserService类
在这里插入图片描述

package net.hf.spring.day06.service;import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 功能:测试用户服务类* 作者:hf* 日期:2023年03月07日*/
public class TestUserService {private UserService userService; // 用户服务对象private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器@Beforepublic void init() {// 基于Spring配置文件创建应用容器context = new ClassPathXmlApplicationContext("spring-config.xml");// 根据名称从应用容器里获取用户服务对象userService = (UserService) context.getBean("userService");}@Afterpublic void destroy() {// 关闭应用容器context.close();}
}

(1)测试按编号查询用户方法

创建testFindUserById()方法
在这里插入图片描述

运行测试方法testFindUserById(),查看结果
在这里插入图片描述

修改测试方法里的id值,再运行,查看结果
在这里插入图片描述

在这里插入图片描述

修改测试方法,捕获异常,再运行,查看结果
在这里插入图片描述

(2)测试查询全部用户方法

创建testFindAllUsers()方法
在这里插入图片描述

在这里插入图片描述

(3)测试添加用户方法

创建testAddUser()方法
在这里插入图片描述

运行测试方法,查看结果
在这里插入图片描述

查看用户表记录
在这里插入图片描述

(4)测试更新用户方法

创建testUpdateUser()方法
在这里插入图片描述

运行测试方法testUpdateUser(),查看结果
在这里插入图片描述

查看用户表记录
在这里插入图片描述

(5)测试删除用户方法

创建testDeleteUserById()方法
在这里插入图片描述

运行测试方法testDeleteUserById(),查看结果
在这里插入图片描述

查看用户表记录,哇哈哈记录不见了
在这里插入图片描述

4、测试用户登录方法

创建testLogin()方法
在这里插入图片描述

运行测试方法testLogin(),查看结果
在这里插入图片描述

修改testLogin()方法
在这里插入图片描述

运行测试方法,查看结果
在这里插入图片描述


http://www.ppmy.cn/news/113778.html

相关文章

感应雷电浪涌的防线,SPD浪涌保护器

SPD - Surge Protective Device SPD 是防止雷击导致故障的避雷器&#xff0c;代表浪涌保护设备。一般指浪涌保护器&#xff0c;浪涌保护器&#xff0c;也叫防雷器&#xff0c;是一种为各种电子设备、仪器仪表、通讯线路提供安全防护的电子装置。 IEC/ EN61643-11 &#xff08…

服务器阵列卡做RAID10(LSI 9260-8I)

在BISO里按Ctrl H进入阵列卡配置&#xff08;我这里阵列卡型号是LSI 9260-8I带电池版本&#xff09;&#xff0c;使用阵列卡来做RAID性能更好&#xff0c;因为RAID调度都由阵列卡来完成&#xff0c;如果是BIOS里做会大量消耗CPU资源&#xff0c;因为调度都由CPU去完成&#xf…

LSI MegaRAID SAS 9260-8i数据安全测试记录

为了保证硬盘数据安全&#xff0c;考虑使用raid5存储数据&#xff0c;虽然可以使用主板raid5&#xff0c;但如果是主板损坏则可能无法挽回数据&#xff0c;同时raid性能也较差&#xff0c;所以考虑采用硬件raid卡&#xff0c;数据安全为首要目的&#xff0c;性能其次。同时为了…

【ASM9260T】【LINUX-3.10】asm9260t芯片简介

紫芯官网如下&#xff1a; http://www.alphascale.com/index.asp?yfa.html asm9260t, 封装LQFP 176-14x14(21x21) 240MHz ARM926EJ-S 内核 16KBytes 数据 cache,16KBytes 指令 cache, MMU存储器 Nand Flash 控制器,具有 24bits/512 bytes 的 ECC 纠错能力 支持 Quad-SPI 接口…

AT91SAM9260开发板

◆ 采用ATMEL AT91SAM9260 CPU&#xff0c;ARM926EJ-S核处理器; ◆ 具有8Kb指令、数据缓存&#xff0c;主频200MHz&#xff0c;运行时性能可达210MIPS; ◆ 采用3.3V NAND FLASH&#xff0c; 简单、易采购&#xff0c;批量使用成本更低; ◆ 丰富资源&#xff1a;多达7路串口&…

AT91SAM9260手册关于Power Management Controller章节翻译

之前都是看别人的文章&#xff0c;现在自己也记录一下自己的心得&#xff0c;公司应用9260好几年了&#xff0c;最近一段时间出现了问题&#xff0c;系统异常重启&#xff0c;老是kernel panic&#xff0c;考虑到底层驱动内核和u-boot一直没动&#xff0c;出现问题的原因应该是…

ubuntu16.04安装Intel 9260AC无线网卡填坑记录

由于本科毕设环境需要&#xff0c;本人在笔记本上安装了win10ubuntu16.04双系统&#xff0c;但是由于之前给笔记本换过无线网卡&#xff0c;型号是intel 9260AC&#xff0c;当时还是比较新的&#xff0c;但是发现在Ubuntu系统里面无法连接WIFI&#xff0c;折腾了很久&#xff0…

AT91Sam9260的网卡驱动

首先先上电路原理图&#xff0c;关于AT91芯片网卡部分的引脚&#xff1a; 内核源码中对网卡以及其他外设设备的驱动程序&#xff0c;设备的注册都在 Board_sam9260ek_.c文件中。 结构体原型&#xff1a; /* Ethernet (EMAC & MACB) */ struct at91_eth_data { u32phy_…