Spring学习笔记(六)利用Spring的jdbc实现学生管理系统的用户登录功能

一、案例分析

本案例要求学生在控制台输入用户名密码,如果用户账号密码正确则显示用户所属班级,如果登录失败则显示登录失败。

(1)为了存储学生信息,需要创建一个数据库。

(2)为了程序连接数据库并完成对数据的增删改查操作,需要在XML配置文件中配置数据库连接和事务等信息。

(3)在Dao层实现查询用户信息的方法。

(4)在Controller层处理业务逻辑,如判断用户输入的用户名与密码是否正确 。

二、实现步骤

首先利用idea创建Maven项目,在pom.xml中进行如下配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>Springjdbc</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies>
<!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><!--            Spring的基本包 ioc相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.26</version></dependency>
<!--        jdbc相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.26</version></dependency>
<!--        spring事务相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.3.26</version></dependency>
<!--        springAOP相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>6.0.9</version></dependency></dependencies>
</project>

注意配置完后要重新构建Maven项目

1、在数据库中创建数据表student

2、编写实体类

创建Student类,在该类中定义id、username、password和course属性,以及属性对应的getter/setter方法

package org.example.entity;
//编写实体类
public class Student {//定义学生idprivate Integer id;//定义学生姓名private  String username;//定义学生密码private  String password;//定义学生课程private  String course;public Integer getId() {return id;}public void setId(Integer 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 getCourse() {return course;}public void setCourse(String course) {this.course = course;}@Overridepublic String toString() {return "Student{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", course='" + course + '\'' +'}';}
}

3、编写配置文件:

创建配置文件applicationContext-student.xml,在该文件中配置id为dataSource的数据源Bean和id为jdbcTemplate的JDBC模板Bean,并将数据源注入到JDBC模板中

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
<!--    数据源--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><!-- 数据库驱动 --><property name="driverClassName" value="com.mysql.jdbc.Driver"/><!-- 连接数据库url --><property name="url" value="jdbc:mysql://localhost:3306/Spring"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><!-- 2.配置JDBC模板 --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!-- 3.配置注入类 --><bean id="studentDao" class="org.example.dao.impl.StudentDaoImpl"><property name="jdbcTemplate" ref="jdbcTemplate"></property></bean>
</beans><!--Beans模块:提供了BeanFactory类,是工厂模式的经典实现,Beans模块的主要作用是创建和管理Bean对象。--><!--可作为配置文件模板--><!--XML文件包含了很多约束信息-->

4、编写Dao层方法:

创建StudentDao接口,在StudentDao接口中声明查询所有用户信息的方法。

package org.example.dao;import org.example.entity.Student;
//dao层开发关联数据库,创建接口,定义方法findStudent
public interface StudentDao {public Student findStudentByUsernameAndPassword(String username,String password);
}

5、实现Dao层方法:

创建StudentDaoImpl实现类,在StudentDaoImpl类中实现StudentDao接口中的findAllStudent()方法。

package org.example.dao.impl;
import org.example.dao.StudentDao;
import org.example.entity.Student;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
//在StudentDaoImpl类中实现StudentDao接口中的findAllStudent()方法。
public class StudentDaoImpl implements StudentDao {//实现数据库private JdbcTemplate jdbcTemplate;public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@Overridepublic Student findStudentByUsernameAndPassword(String username, String password) {
//        数据库操作String sql = "select * from student where username=? and password=?";Student student = null;try {student = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Student.class), username, password);} catch (EmptyResultDataAccessException e) {
//            如果没查到数据就返回空return null;}return student;}
}

6、编写Controller层:

创建StudentController类,用于实现用户登录操作。

package org.example.controller;
import org.example.dao.StudentDao;
import org.example.entity.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.util.Scanner;//实现业务
public class StudentController {public static void main(String[] args) {
//关联配置,实现dao层接口ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext-student.xml");StudentDao studentDao=(StudentDao) ac.getBean("studentDao");Scanner sc= new Scanner(System.in);System.out.println("欢迎来到学生管理系统");System.out.println("请输入用户名:");
//        接收输入String username=sc.next();System.out.println("请输入用户密码:");String password=sc.next();
//        逻辑查询,从数据库中查询Student student= studentDao.findStudentByUsernameAndPassword(username,password);if (student == null) {
//            没有查询到数据,查询的用户或密码有误System.out.println("没有查询到数据,查询的用户或密码有误");}else {
//         查询到数据,查询的用户或密码正确System.out.println("登入成功");System.out.println(username+"是"+student.getCourse()+"班的");}}
}

7、查看运行结果:

在IDEA中启动StudentController类,在控制台按照提示输入账号密码进行登录。

三、总结spring jdbc知识

 数据库用于处理持久化业务产生的数据,应用程序在运行过程中经常要操作数据库。一般情况下,数据库的操作由持久层(Dao层)来实现。作为扩展性较强的一站式开发框架,Spring也提供了持久层Spring JDBC功能,Spring JDBC可以管理数据库连接资源,简化传统JDBC的操作,进而提升程序数据库操作的效率

1、JDBCTemplate作用

针对数据库操作,Spring框架提供了JdbcTemplate类,JdbcTemplate是一个模板类,Spring JDBC中的更高层次的抽象类均在JdbcTemplate模板类的基础上创建。 JdbcTemplate类提供了操作数据库的基本方法,包括添加、删除、查询和更新。在操作数据库时,JdbcTemplate类简化了传统JDBC中的复杂步骤,这可以让开发人员将更多精力投入到业务逻辑中。

2、Spring JDBC的配置

Spring对数据库的操作都封装在了core、dataSource、object和support这4个包中,想要使用Spring JDBC,就需要对这些包进行配置。 在Spring中,JDBC的配置是在配置文件applicationContext.xml中完成的,包括配置数据源、配置JDBC模板和配置注入类。

3、 excute()方法

在Spring JDBC中,execute()方法是JdbcTemplate类的一部分。该方法允许您执行任何SQL语句,无论是查询还是更新操作。execute()方法是一种多功能方法,可用于执行任何类型的SQL操作。

基本语法格式:jdTemplate.execute("SQL 语句");

4、update()方法

update()方法是JdbcTemplate类的一个重要方法,用于执行SQL语句来更新数据库中的数据。这个方法通常用于执行INSERT、UPDATE、DELETE等需要修改数据库记录的操作

5、query()方法

query()方法是JdbcTemplate类的一个重要方法,用于执行SELECT查询并返回一个结果集。这个方法通常用于从数据库中检索数据

6、 事务管理的核心接口

spring-tx-5.2.8.RELEAS依赖包的3个接口

    PlatformTransactionManager接口:可以根据属性管理事务。  

    TransactionDefinition接口:用于定义事务的属性。    

    TransactionStatus接口:用于界定事务的状态

7、事务管理的方式

  Spring中的事务管理分为两种方式,一种是传统的编程式事务管理,另一种是声明式事务管理。        编程式事务管理:通过编写代码实现的事务管理,包括定义事务的开始、正常执行后的事务提交和异常时的事务回滚。    

   声明式事务管理:通过AOP技术实现的事务管理,其主要思想是将事务管理作为一个“切面”代码单独编写,然后通过AOP技术将事务管理的“切面”代码植入到业务目标类中。

 其中声明式事务管理有两种解决方式:基于xml的配置和基于注解的实现,如:

1.创建配置文件:创建配置文件applicationContext-annotation.xml,在该文件中声明事务管理器等配置信息。

<!-- 1.配置数据源:数据库驱动;连接数据库的url;连接数据库的用户名;连接数据库的密码 -->
<!-- 2.配置JDBC模板:默认必须使用数据源 -->
<!--3.定义id为accountDao的Bean:将jdbcTemplate注入到AccountDao实例中 -->		
<!-- 4.事务管理器,依赖于数据源 -->
<!-- 5.注册事务管理器驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

2、修改Dao层实现类:在AccountDaoImpl类的某实现方法上添加事务注解@Transactional。

@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, readOnly = false)

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

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

相关文章

洛谷P1927防护伞

题目描述 据说 20122012 的灾难和太阳黑子的爆发有关。于是地球防卫小队决定制造一个特殊防护伞&#xff0c;挡住太阳黑子爆发的区域&#xff0c;减少其对地球的影响。由于太阳相对于地球来说实在是太大了&#xff0c;我们可以把太阳表面看作一个平面&#xff0c;中心定为(0,0…

C 基本语法

我们已经看过 C 程序的基本结构&#xff0c;这将有助于我们理解 C 语言的其他基本的构建块。 C 的令牌&#xff08;Token&#xff09; C 程序由各种令牌组成&#xff0c;令牌可以是关键字、标识符、常量、字符串值&#xff0c;或者是一个符号。例如&#xff0c;下面的 C 语句…

30天自制操作系统(第23天)

23.1 编写malloc 参考第22天的内容&#xff0c;在绘制窗口前先分配了150*50个字节大小的内存&#xff0c;所以导致该文件经编译后有7.6k左右&#xff0c;能否在其中使用指针呢&#xff1f;当需要开辟空间时&#xff0c;移动指针即可。在之前的章节中也有函数memman_alloc函数可…

php源码 单色bmp图片取模工具 按任意方式取模 生成字节数组 自由编辑点阵

http://2.wjsou.com/BMP/index.html 想试试chatGPT4生成&#xff0c;还是要手工改 php 写一个网页界面上可以选择一张bmp图片&#xff0c;界面上就显示这张bmp图片&#xff0c; 点生成取模按钮&#xff0c;在图片下方会显示这张bmp图片的取模数据。 取模规则是按界面设置的&a…

Linux 的交换空间(swap)是什么?有什么用?

目录 swap是什么&#xff1f;swap有什么用&#xff1f;swap使用典型场景如何查看你的系统是否用到交换空间呢&#xff1f;查看系统中swap in/out的情况 swap是什么&#xff1f; swap就是磁盘上的一块区域。它和Windows系统中的交换文件作用类似&#xff0c;但是它是一段连续的…

03、MongoDB -- MongoDB 权限的设计

目录 MongoDB 权限的设计演示前准备&#xff1a;启动 mongodb 服务器 和 客户端 &#xff1a;1、启动单机模式的 mongodb 服务器2、启动 mongodb 的客户端 MongoDB 权限的设计1、MongoDB 的每个数据库都可以保存用户&#xff0c;不止admin数据库可以保存用户。2、保存用户的数据…

Linux 学习笔记(8)

八、 启动引导 1 、 Linux 的启动流程 1) BIOS 自检 2) 启动 GRUB/LILO 3) 运行 Linux kernel 并检测硬件 4) 挂载根文件系统 5) 运行 Linux 系统的第一个进程 init( 其 PID 永远为 1 &#xff0c;是所有其它进程的父进程 ) 6) init 读取系统引导配置文件…

GD25Q32驱动

GD25Q32是一款基于SPI的Flash芯片&#xff0c;容量为32/84M bytes。它的引脚如下&#xff1a; 该芯片支持多种SPI操作方式&#xff0c;包括&#xff1a;Standard SPI(标准SPI)、Dual SPI(双线 SPI)和Quad SPI(四线 SPI) 。有关SPI的介绍可以参考&#xff1a; SPI通信原理-CSDN…

flutter 文字一行显示,超出换行

因为app有多语言&#xff0c;中文和其他语言长度不一致&#xff0c;可能导致英文会很长。 中文样式 英文样式 代码 Row(mainAxisAlignment: MainAxisAlignment.end,crossAxisAlignment: CrossAxisAlignment.end,children: [Visibility(visible: controller.info.fee ! null,ch…

探寻2024年国内热门低代码平台排行!| 功能特点一览

低代码开发是一项革命性的技术&#xff0c;主要目的是尽量避免程序研发的复杂性&#xff0c;让外行开发者也能加入到应用程序的搭建中。低代码平台的核心概念和构成部分通常包括用户界面和拖拽设计、预构件和模块、自动化工作内容与数据库集成和扩展应用&#xff0c;应用低代码…

web前端css基本内容

web前端css 当我们用html的语法给内容规划布局样式时&#xff0c;可能会出现许多个相似的内容需要运用同一种样式&#xff0c;复制粘贴太麻烦而且如果后期要改动的话比如把许多个地方从红色改成蓝色&#xff0c;就需要一个一个改了&#xff0c;这时候就需要引入css来操作了 把…

java-使用jacob删除指定文件夹的邮件

总结见文章最后,具体代码如下: ActiveXComponent outlook = new ActiveXComponent("Outlook.Application");Dispatch myNamespace = Dispatch.call(outlook, "GetNamespace", "MAPI").toDispatch();//指定搜索特定的文件Dispatch allFolders =…

我耀学IT—day05-Bootstrap下拉菜单与导航

一、Bootstrap5 下拉菜单 下拉菜单是可切换的&#xff0c;是以列表格式显示链接的上下文菜单。 例&#xff1a; <div class"dropdown"><button type"button" class"btn btn-primary dropdown-toggle" data-bs-toggle"dropdown&…

U盘弹出提示“该设备正在使用中”:原因与解决方案

在日常使用U盘时&#xff0c;我们可能会遇到一个问题&#xff1a;当尝试安全弹出U盘时&#xff0c;系统提示“该设备正在使用中”。这种情况可能会让用户感到困惑&#xff0c;担心数据是否安全或是否会导致U盘损坏。本文旨在探讨这一现象背后的原因&#xff0c;并提供相应的解决…

【前端素材】推荐优质后台管理系统网页Stisla平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理和控制网站、应用程序或系统的管理界面。它通常被设计用来让网站或应用程序的管理员或运营人员管理内容、用户、数据以及其他相关功能。后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;通常由管理员使…

铅冶炼作业VR虚拟现实互动培训平台降低实操风险

在钢铁工业中&#xff0c;焦炉作业是一个关键的环节&#xff0c;也是一项技术要求高、操作复杂的任务。传统焦炉作业的培训通常需要在实际的焦炉上进行&#xff0c;这不仅对学员的身体素质和心理素质提出了较高的要求&#xff0c;而且也存在一定的安全风险。基于VR虚拟现实制作…

React富文本编辑器开发(三)

现在我们的编辑器显示的内容很单一&#xff0c;这自然不是我们的目标&#xff0c;让呈现的内容多元化是我们的追求。这就需要让编辑器能够接收多元素的定义。从初始数据的定义我们可以推断数据的格式远不止一种&#xff0c;那么其它类型的数据如何定义及呈现的呢&#xff0c;我…

基于单片机的AGV机器人设计的设计要求

基于单片机的AGV机器人设计的设计要求 1. 引言 本设计要求旨在设计一种基于单片机的自动导航车&#xff08;AGV&#xff09;机器人。AGV机器人可以在工厂、仓库等场景中进行自动导航、物料搬运等任务。本设计要求包括机器人的硬件设计要求和软件设计要求两个方面。 2. 硬件设…

(Aliyun AI ACP 02)阿里云人工智能产品体系

文章目录 阿里云人工智能工程师ACP认证考试知识点辅助阅读&#xff08;Aliyun AI ACP 02&#xff09;阿里云人工智能产品体系引言阿里云AI产品总体架构基础设施层&#xff1a;平台层&#xff1a;算法与模型层&#xff1a;应用层&#xff1a;组成部分详述&#xff1a;PAI产品家族…

手把手教你免费用Flashduty做消息通知

为什么需要消息通知&#xff1f; 如果有重要的情况发生&#xff0c;希望能通过各种媒介通知我们。可以举几个例子&#xff1a; 家里燃气费没有了&#xff0c;希望能有短信或者app通知api频繁500报错&#xff0c;希望及时感知&#xff0c;及时修复公司网站是https自签名证书&a…