初探JdbcTemplate操作

news2024/12/26 23:32:35

文章目录

      • 一、创建数据库
      • 二、创建用户
      • 三、打开Spring项目
      • 四、添加数据库相关依赖
      • 五、创建用户实体类
      • 六、创建用户数据访问接口
      • 七、创建用户数据访问接口实现类
      • 八、创建用户服务类
      • 九、创建数据库配置属性文件
      • 十、创建Spring配置文件
      • 十一、创建用户服务测试类
        • 1、测试按编号查询用户方法
        • 2、测试查询全部用户方法
        • 3、测试添加用户方法
        • 4、测试更新用户方法
        • 5、测试删除用户方法
        • 6、测试用户登录方法

一、创建数据库

  • 执行命令:CREATE DATABASE simonshop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

二、创建用户

  • 创建用户表 - 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;

  • 给用户表添加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’);

三、打开Spring项目

  • Spring项目 - SpringDemo

四、添加数据库相关依赖

  • 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>

五、创建用户实体类

  • org.example.spring包里创建day06.bean子包,然后在子包里面创建User类
package org.example.spring.day06.bean;

import java.util.Date;

/**
 * 功能:用户实体类
 */
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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", telephone='" + telephone + '\'' +
                ", registerTime=" + registerTime +
                ", popedom=" + popedom +
                '}';
    }
}

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

  • org.example.spring包里创建day06.dao子包,在子包里创建UserDao接口
package org.example.spring.day06.dao;

import org.example.spring.day06.bean.User;

import java.util.List;

/**
 * 功能:用户数据访问接口
 */
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);
}

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

  • org.example.spring.day06包里创建impl子包,然后在子包里创建UserDaoImpl类
package org.example.spring.day06.dao.impl;

import org.example.spring.day06.bean.User;
import org.example.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;

// 用户数据访问接口实现类
@Repository("userDao")
public class UserDaoImpl implements UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    // 插入用户记录
    @Override
    public int insert(User user) {
        // 定义SQL字符串
        String strSQL = "INSERT INTO t_user (username, password, telephone, " +
                "register_time, popedom) VALUES (?, ?, ?, ?, ?)";
        // 调用模板的更新方法执行SQL语句
        return jdbcTemplate.update(strSQL, user.getUsername(), user.getPassword(),
                user.getTelephone(), user.getRegisterTime(), user.getPopedom());
    }

    // 按编号删除用户记录
    @Override
    public int deleteById(int id) {
        // 定义SQL字符串
        String strSQL = "DELETE FROM t_user WHERE id = ?";
        // 调用模板的更新方法执行SQL语句
        return jdbcTemplate.update(strSQL, id);
    }

    // 更新用户记录
    @Override
    public int update(User user) {
        // 定义SQL字符串
        String strSQL = "UPDATE t_user SET username = ?, password = ?," +
                "telephone = ?, register = ?, popedom = ? WHERE id = ?";
        // 调用模板的更新方法执行SQL语句
        return jdbcTemplate.update(strSQL, user.getUsername(), user.getPassword(),
                user.getTelephone(), user.getRegisterTime(), user.getPopedom(), user.getId());
    }

    // 按编号查新用户记录
    @Override
    public User findById(int id) {
        // 定义SQL字符串
        String strSQL = "SELECT * FROM t_user WHERE id = ?";
        return jdbcTemplate.queryForObject(strSQL, new RowMapper<User>() {
            // 行映射方法(将用户表记录映射成用户实体)
            @Override
            public User mapRow(ResultSet rs, int rowNum) 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;
            }
        },id);
    }


    // 查询全部用户记录
    @Override
    public List<User> findAll() {
        String strSQL = "SELECT * FROM t_user";
        // 查询获取行列表
        List<Map<String, Object>> rows = jdbcTemplate.queryForList(strSQL);
        // 创建用户列表
        List<User> users = new ArrayList<>();
        // 遍历行列表,生成用户列表
        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 users;
    }


    // 用户登录
    @Override
    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);
    }
}

八、创建用户服务类

  • org.example.spring.day06包里创建service子包,然后在子包里创建UserService类
package org.example.spring.day06.service;

import org.example.spring.day06.bean.User;
import org.example.spring.day06.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

// 用户服务类
@Service("userService")
public class UserService {
    @Autowired
    private 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);
    }
}

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

  • resources目录里创建数据库配置属性文件 - jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/simonshop?useSSL=false
jdbc.username=root
jdbc.password=root

十、创建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/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd">

    <!--组件扫描-->
    <context:component-scan base-package="org.example.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>

十一、创建用户服务测试类

  • test/java目录的net.xxr.spring包里创建day06.service子包,然后在子包里创建TestUserService
package net.xxr.spring.day06.service;

import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;

// 测试用户服务类
public class TestUserService {

    private UserService userService; // 用户服务对象
    private ClassPathXmlApplicationContext context; // 应用容器

    @Before
    public void init() {
        // 基于Spring配置文件创建应用容器
        context = new ClassPathXmlApplicationContext("jdbc/spring-config.xml");
        // 根据名称从应用容器里获取用户服务对象
        userService = (UserService) context.getBean("userService");
    }

    
    @After
    public void destroy() {
        // 关闭应用容器
        context.close();
    }
}

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

  • 创建testFindUserById()方法
@Test
    public void testFindUserById() {
        int id = 1;
        try {
            User user = userService.findUserById(id);
            System.out.println(user);
        } catch (Exception e) {
            System.out.println("编号为[" + id + "]的用户未找到!");
        }
    }
  • 运行结果
    在这里插入图片描述

2、测试查询全部用户方法

  • 创建testFindAllUsers()方法
@Test
    public void testFindAllUsers() {
        List<User> users = userService.findAllUsers();
        users.forEach(System.out::println);
    }
  • 运行结果
    在这里插入图片描述

3、测试添加用户方法

  • 创建testAddUser()方法
@Test
    public void testAddUser() {
        User user = new User();
        user.setUsername("萌萌哒");
        user.setPassword("345678");
        user.setTelephone("15890903456");
        user.setRegisterTime(new Date());
        user.setPopedom(1);
        int count = userService.addUser(user);
        if (count > 0) {
            System.out.println("用户记录插入成功!");
        } else {
            System.out.println("用户记录插入失败!");
        }
    }
  • 运行结果
    在这里插入图片描述

4、测试更新用户方法

  • 创建testUpdateUser()方法
@Test
    public void testUpdateUser() {
        int id = 5;
        User user = userService.findUserById(id);
        System.out.println("更新前:" + user);
        user.setUsername("娃哈哈");
        user.setPassword("999999");
        user.setTelephone("13867674560");
        user.setRegisterTime(new Date());
        user.setPopedom(0);
        int count = userService.addUser(user);
        if (count > 0) {
            System.out.println("用户记录更新成功!");
            System.out.println("更新后:" + user);
        } else {
            System.out.println("用户记录更新失败!");
        }
    }
  • 运行结果
    在这里插入图片描述

5、测试删除用户方法

  • 创建testDeleteUserById()方法
@Test
    public void testDeleteUserById() {
        int id = 5;
        User user = userService.findUserById(id);
        System.out.println("待删记录:" + user);
        int count = userService.deleteUserById(id);
        if (count > 0) {
            System.out.println("用户记录删除成功!");
        } else {
            System.out.println("用户记录删除失败!");
        }
    }
  • 运行结果
    在这里插入图片描述

6、测试用户登录方法

  • 创建testLogin()方法
@Test
    public void testLogin() {
        String username = "无心剑";
        String password = "12345";
        try {
            User user = userService.login(username, password);
            System.out.println("恭喜," + username + ",登录成功!");
        } catch (Exception e) {
            System.out.println("遗憾," + username + ",登录失败!");
        }
    }
  • 运行结果
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

Java 管道 (学习代码)

目录 上代码&#xff1a; 输出&#xff1a; 执行流程可以总结如下&#xff1a; 上代码&#xff1a; package cn.net.cdsz.ccb.test;import java.io.IOException; import java.io.PipedReader; import java.io.PipedWriter;public class test {static class ReaderThread imp…

C++回溯算法---图的m着色问题01

C回溯算法---图的m着色问题 图的m着色问题是指给定一个图以及m种不同的颜色&#xff0c;尝试将每个节点涂上其中一种颜色&#xff0c;使得相邻的节点颜色不相同。这个问题可以转化为在解空间树中寻找可行解的问题&#xff0c;其中每个分支结点都有m个儿子结点&#xff0c;最底层…

Flink、Hudi技术选型

Flink CDC 2.2的优势 相比Flink1.x&#xff0c;2.x的版本有如下的特点&#xff1a; 1) 并发读取&#xff0c;全量数据的读取性能可以水平扩展。 2) 全程无锁&#xff0c;不对线上业务产生锁的风险。 3) 断点续传&#xff0c;支持全量阶段的 Checkpoint。 Flink SQL的优势 …

MongoDB学习

文章目录前言0 MongoDB和Redis区别1 简介MongoDB2 MongoDB的安装(需要使用Docker)3 MongoDB 概念解析3.1 数据库3 .2 文档3.3 集合3.4 MongoDB 数据类型3.5适用场景4 常用操作4.1 INSERT4.2 Query4.3 Update4.4 Remove4.5 aggregate4.6 索引5 整合Springboot使用5.1 导入依赖5.…

多比特信号跨时钟域同步处理

多比特信号跨时钟域同步处理 当在时钟域之间传递多比特数据时&#xff0c;普通的同步器并不能保证数据传递的安全性。在多时钟设计中&#xff0c;工程师往往容易犯一个错误&#xff0c;即同一事务处理含有需要从一个时钟域向另一个时钟域传递的多位跨时钟数据,并忽略了同步采样…

腾讯云物联网开发平台 LoRaWAN 透传接入 更新版

前言 之前有一篇文章介绍LoRaWAN透传数据&#xff0c;不过还是用物模型云端数据解析脚本&#xff0c;不是真正的透传。腾讯云物联网开发平台也支持对LoRaWAN原始数据的透传、转发。今天来介绍下。腾讯云 IoT Explorer 是腾讯云主推的一站式物联网开发平台&#xff0c;IoT 小能手…

大话数据结构-C(1)

一&#xff1a;数据结构绪论 1.1 数据&#xff1a; 描述客观事物的符号&#xff0c;计算机中可以操作的对象&#xff0c;能被计算机识别并输入给计算机处理的符号集合。 1.2 数据元素 是组成数据的、有一定意义的基本单位&#xff0c;在计算机中通常作为整体处理。也被称为记…

Linux系统如何设置开机自启脚本

Linux系统开启自启脚本的配置&#xff0c;我这里记录了三种办法&#xff0c;对于绝大多数linux系统&#xff0c;这三种方法里肯定有合适的。 1. 设置/etc/rc.local文件 /etc/rc.local文件是 /etc/rc.d/rc.local文件的软连接&#xff0c;rc.local文件本质上就是一个shell脚本 …

电商TO B背后:谁在重构产业带?

在这盘产业带大旗里&#xff0c;京东、淘宝、拼多多正在成为鲜活的新注解。 作者|思杭 编辑|皮爷 出品|产业家 有一座城&#xff0c;这里的百姓在40年前靠“鸡毛换糖”起家&#xff0c;他们聚集了全国各地的商品&#xff0c;再转卖出去。这样一来&#xff0c;就形成了销路…

金三银四最近一次面试,被阿里P8测开虐惨了.....

都说金三银四涨薪季&#xff0c;我是着急忙慌的准备简历——5年软件测试经验&#xff0c;可独立测试大型产品项目&#xff0c;熟悉项目测试流程...薪资要求&#xff1f;5年测试经验起码能要个20K吧 我加班肝了一页半简历&#xff0c;投出去一周&#xff0c;面试电话倒是不少&a…

itop-3568开发板驱动学习笔记(17)内核中断

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录中断基础中断中断上下文中断号中断源类型内核中断 API获取中断号中断申请释放中断禁止中断使能中断实验程序中断基础 中断 CPU 在正常运行期间&#xff0c;由外部或者内部引起的事件&#xff0c;让 CPU 停下…

研报精选230411

目录 【行业230411华安证券】智能家居行业深度&#xff1a;ChatGPT等大模型催化智能家居行业进一步发展【行业230411信达证券】食品饮料行业2023年第12周周报&#xff1a;从当前时间点看今年液奶的投资机会【行业230411东方财富证券】食品饮料行业专题研究&#xff1a;BC两端需…

2023年信息安全推荐证书

随着网络安全行业的不断升温&#xff0c;相关的认证数量也不断增加&#xff0c;对于在网络安全行业发展的人才来说&#xff0c;提升职业竞争力最有效的办法之一&#xff0c;就是取得权威认证。 那么如何从繁多的适合网络安全从业者的证书中选择含金量高、发展潜力大的证书&…

Java分布式事务(七)

文章目录 🔥Seata提供XA模式实现分布式事务_业务说明🔥Seata提供XA模式实现分布式事务_下载启动Seata服务🔥Seata提供XA模式实现分布式事务_搭建聚合父工程构建🔥Seata提供XA模式实现分布式事务_转账功能实现上🔥Seata提供XA模式实现分布式事务_转账功能实现下🔥Se…

什么是车规级芯片?

目录 1、AEC-Q系列标准 2、ISO26262功能安全标准 芯片按照应用场景&#xff0c;通常可以分为消费级、工业级、车规级和军工级四个等级&#xff0c;其要求依次为&#xff1a;军工>车规>工业>消费。 车规级芯片&#xff0c;顾名思义&#xff0c;是应用到汽车中的芯片…

GMP调度

目录 A1 基础 协程 映射关系 N:1关系 1:1关系 M:N关系 概念 G M P go协程 GM模型 GMP模型 设计策略 复用线程 并行利用 抢占 全局G队列 "go func()"调度过程 ​编辑 特殊的M0和G0 M0 G0 Go调度器执行过程全解析 场景1 场景2 场景3 场景…

栈实现学生信息管理(C语言)

文章目录Stack.hmain.cStack.c用栈实现学生信息管理。这里放一下有哪些文件。Stack.h #pragma once防止库函数的重复引用&#xff0c;因为库函数会在预编译的时候在程序中展开&#xff0c;会增大程序的体积。   通过typedef对数据重命名&#xff0c;之后需要修改数据就十分方…

C/C++|物联网开发入门+项目实战|C语言基础|玩转c代码---从输入输出开始-学习笔记(6)

文章目录玩转c代码---从输入输出开始参考教程&#xff1a;C语言编程:一本全面的C语言入门教程&#xff08;第3版)第16章需要掌握的内容需要了解的内容常见的人机交互接口串口的输入输出PC常用的几个输入输出函数示例代码3 printf函数使用难点分析A.格式控制字符串的基本形式:示…

【毕业论文】| 基于Unity3D引擎的冒险游戏的设计与实现

&#x1f4e2;博客主页&#xff1a;肩匣与橘 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由肩匣与橘编写&#xff0c;首发于CSDN&#x1f649; &#x1f4e2;生活依旧是美好而又温柔的&#xff0c;你也…

NVIDIA CUDA核函数编写注意事项之In-place

CUDA系列文章目录 文章目录CUDA系列文章目录前言总结参考资料前言 CUDA&#xff08;Compute Unified Device Architecture&#xff0c;统一计算架构&#xff09;是由NVIDIA所推出的一种集成技术&#xff0c;是其对于GPGPU&#xff08;A General-Purpose Graphics Processing U…