使用所学Spring知识,实现简易的图书查询系统功能。实现查询全部图书。 根据书籍编号查询信息。 根据书名查询书籍信息。 根据状态查询书籍信息。

简介: 使用所学Spring知识,实现简易的图书查询系统功能。实现查询全部图书。 根据书籍编号查询信息。 根据书名查询书籍信息。 根据状态查询书籍信息。

实现要求:


使用所学Spring知识,实现简易的图书查询系统功能。


要求如下:

  • 查询全部图书。
  • 根据书籍编号查询信息。
  • 根据书名查询书籍信息。
  • 根据状态查询书籍信息。


运行结果:


image.png


实现思路:


具体实现步骤:

(1)在MySQL数据库中创建t00_book表,代码如下:


-- ----------------------------
-- Table structure for t00_book
-- ----------------------------
DROP TABLE IF EXISTS `t00_book`;
CREATE TABLE `t00_book`  (
  `bookId` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图书编号',
  `bookName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图书名字',
  `author` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '作者',
  `pages` int(11) NULL DEFAULT NULL COMMENT '页数',
  `flag` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态(0-借出,1-在库)'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;


(2)在t00_book表中插入初始化数据,代码如下:


-- ----------------------------
-- Records of t00_book
-- ----------------------------
INSERT INTO `t00_book` VALUES ('1000', '《西游记》', '吴承恩', 324, '1');
INSERT INTO `t00_book` VALUES ('1002', '《红楼梦》', '曹雪芹', 425, '1');
INSERT INTO `t00_book` VALUES ('1003', '《三国演义》', '罗贯中', 346, '1');
INSERT INTO `t00_book` VALUES ('1004', '《水浒传》', '施耐庵', 298, '1');
INSERT INTO `t00_book` VALUES ('1005', '《儒林外史》', '吴敬梓', 234, '1');
INSERT INTO `t00_book` VALUES ('1006', '《离骚》', '屈原', 186, '1');
INSERT INTO `t00_book` VALUES ('1007', '《牡丹亭》', '汤显祖', 168, '1');
INSERT INTO `t00_book` VALUES ('1007', 'Python高级编程', '张大大', 322, '1');


(3)引入jar包:


31.png


(4)在applicationContext.xml配置文件中打开注解扫描功能,代码如下:


<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.2.xsd ">
  <!-- 开启注解扫描功能  -->
  <context:component-scan base-package="com.mhys.book"></context:component-scan>
</beans>


(5)在com.mhys.book.pojo包下创建DataSource类,添加driverClassName,url,username,password4个属性,然后又注入属性值,代码如下:


package com.mhys.book.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class DataSource {
  @Value("com.mysql.jdbc.Driver")
  private String driverClassName;
  @Value("jdbc:mysql://127.0.0.1:3306/t00_book")
  private String url;
  @Value("root")
  private String username;
  @Value("123456")
  private String password;
  public String getDriverClassName() {
    return driverClassName;
  }
  public void setDriverClassName(String driverClassName) {
    this.driverClassName = driverClassName;
  }
  public String getUrl() {
    return url;
  }
  public void setUrl(String url) {
    this.url = url;
  }
  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;
  }
}


(6)在com.mhys.book.pojo包下创建Book类,添加bookId,bookName,author,pages,flag5个属性,然后注入属性值,代码如下


package com.mhys.book.pojo;
public class Book {
  private String bookId;
  private String bookName;
  private String author;
  private int pages;
  private String flag;
  public String getBookId() {
    return bookId;
  }
  public void setBookId(String bookId) {
    this.bookId = bookId;
  }
  public String getBookName() {
    return bookName;
  }
  public void setBookName(String bookName) {
    this.bookName = bookName;
  }
  public String getAuthor() {
    return author;
  }
  public void setAuthor(String author) {
    this.author = author;
  }
  public int getPages() {
    return pages;
  }
  public void setPages(int pages) {
    this.pages = pages;
  }
  public String getFlag() {
    return flag;
  }
  public void setFlag(String flag) {
    this.flag = flag;
  }
}


(7)在com.mhys.book.dao包下创建BaseDao类,添加dataSource属性并注入属性值,然后声明getCounection()方法,代码如下:


package com.mhys.book.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.annotation.PostConstruct;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.mhys.book.pojo.DataSource;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class BaseDao {
  @Autowired
  private DataSource dataSource;
  @PostConstruct
  public Connection getConnection() throws Exception{
    Class.forName(dataSource.getDriverClassName());
    String url = dataSource.getUrl();
    String user = dataSource.getUsername();
    String password = dataSource.getPassword();
    Connection connection = DriverManager.getConnection(url, user, password);
    return connection;
  }
  public void close(ResultSet rs,PreparedStatement ps,Connection conn) throws Exception{
    if(rs != null){
      rs.close();
    }
    if(ps != null){
      ps.close();
    }
    if(conn != null){
      conn.close();
    }
  }
}


(8)在com.mhys.book.dao包下创建BookDao类,声明getAllBooksInfo()方法、getBooksInfoByid()方法,添加getBooksInfoByBookName()方法和getBooksInfoByflag()方法,代码如下:


package com.mhys.book.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.junit.Test;
import org.springframework.stereotype.Component;
@Component
public class BookDao extends BaseDao {
  //查询全部
  public ResultSet getAllBooksInfo() throws Exception{
    String sql = "select bookId,bookName,author,pages,flag from t00_book";
    Connection connection = this.getConnection();
    PreparedStatement ps = connection.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();
    return rs;
  }
  //根据书籍编号查询信息
  public ResultSet getBooksInfoById(String bookId) throws Exception{
    String sql = "select bookId,bookName,author,pages,flag from t00_book where bookId=?";
    Connection connection = this.getConnection();
    PreparedStatement ps = connection.prepareStatement(sql);
    ps.setString(1, bookId);
    ResultSet rs = ps.executeQuery();
    return rs;
  }
  //根据书名查询书籍信息
  public ResultSet getBooksInfoByBookName(String bookName) throws Exception{
    String sql = "select bookId,bookName,author,pages,flag from t00_book where bookName like ?";
    Connection connection = this.getConnection();
    PreparedStatement ps = connection.prepareStatement(sql);
    ps.setString(1, "%"+bookName+"%");
    ResultSet rs = ps.executeQuery();
    return rs;
  }
  //根据状态查询书籍信息
  public ResultSet getBooksInfoByflag(String flag) throws Exception{
    String sql = "select bookId,bookName,author,pages,flag from t00_book where flag=?";
    Connection connection = this.getConnection();
    PreparedStatement ps = connection.prepareStatement(sql);
    ps.setString(1, flag);
    ResultSet rs = ps.executeQuery();
    return rs;
  }
}


(9)在com.mhys.book.service包下创建BookService类,添加bookDao属性并注入属性值,然后声明 getAllBooksInfo() 方法和 getBooksInfoById()方法、getBooksInfoByBookName()方法、getBooksInfoByflag()方法、和print()方法,代码如下:


package com.mhys.book.service;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.mhys.book.dao.BookDao;
@Component
public class BookService {
  @Autowired
  private BookDao bookDao;
  //查询全部
  public void getAllBooksInfo() throws Exception{
    ResultSet rs =  bookDao.getAllBooksInfo();
    print(rs);
  }
  //根据书籍编号查询信息
  public void getBooksInfoById(String bookId) throws Exception{
    ResultSet rs =  bookDao.getBooksInfoById(bookId);
    print(rs);
  }
  //根据书名查询书籍信息
  public void getBooksInfoByBookName(String bookName) throws Exception{
    ResultSet rs =  bookDao.getBooksInfoByBookName(bookName);
    print(rs);
  }
  //根据状态查询书籍信息
  public void getBooksInfoByflag(String flag) throws Exception{
    ResultSet rs = bookDao.getBooksInfoByflag(flag);
    print(rs);
  }
  //释放资源
  public void close(String flag) throws Exception{
    ResultSet rs = bookDao.getBooksInfoByflag(flag);
    print(rs);
  }
  //打印结果
  public void print(ResultSet rs) throws SQLException{
    if(rs==null){
      System.out.println("查询无结果!");
    }else{
      System.out.println("编号\t\t书名\t\t作者\t\t总页数\t\t状态");
      while (rs.next()) {
          for (int i = 1; i <= 5; i++) {
            String value = "";
            if(i==5){
              value = rs.getString(i).equals("0")?"借出":"在库";
            }else{
              value = rs.getString(i);
            }
            System.out.print(value+"\t\t");
          }
          System.out.println("");
      }
    }
  }
}


(10)在com.mhys.book.main包下创建MainClass类,添加bookService属性并注入属性值,然后声明main()方法、start()方法、printMenu()方法、getAllBooksInfo()方法、getBooksInfoById()方法、getBooksInfoByBookName()方法、getBooksInfoByflag()方法,代码如下:


package com.mhys.book.main;
import java.util.Scanner;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import com.mhys.book.service.BookService;
@Component
public class MainClass {
  @Autowired
  private BookService bookService;
  public static void main(String[] args) throws Exception {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    MainClass main = (MainClass) context.getBean("mainClass");
    main.start();
  }
  public void start() throws Exception{
    Scanner scan = new Scanner(System.in);
    System.out.println("----------欢迎使用图书管理查询系统----------");
    printMenu();
    while(true)
    {
      //读取用户输入
      int choice = scan.nextInt();
      if(choice == 5)
      {
        System.out.println("成功退出系统,欢迎再次光临!");
        break;
      }
      switch(choice)//switch形式
      {
      case 1: getAllBooksInfo(); break;
      case 2: getBooksInfoById(); break;
      case 3: getBooksInfoByBookName(); break;
      case 4: getBooksInfoByflag(); break;
      default: System.out.println("输入非法"); 
      continue;
      }
      printMenu(); 
    }
  }
  public void printMenu(){
    System.out.println("请选择查询条件:1、查询全部\t2、根据书籍编号查询\t3、根据书籍名称查询\t4、根据状态查询\t5、退出系统");
  }
  public void getAllBooksInfo() throws Exception{
    bookService.getAllBooksInfo();
  }
  public void getBooksInfoById() throws Exception{
    Scanner scan = new Scanner(System.in);
    System.out.println("请输入书籍编号:");
    String bookId = scan.next();
    bookService.getBooksInfoById(bookId);
  }
  public void getBooksInfoByBookName() throws Exception{
    Scanner scan = new Scanner(System.in);
    System.out.println("请输入书名:");
    String bookName = scan.next();
    bookService.getBooksInfoByBookName(bookName);
  }
  public void getBooksInfoByflag() throws Exception{
    Scanner scan = new Scanner(System.in);
    System.out.println("请输入状态编号:0、借出\t1、在库");
    String flag = scan.next();
    bookService.getBooksInfoByflag(flag);
  }
}


相关文章
|
19天前
|
XML 安全 Java
|
2月前
|
开发框架 前端开发 网络协议
Spring Boot结合Netty和WebSocket,实现后台向前端实时推送信息
【10月更文挑战第18天】 在现代互联网应用中,实时通信变得越来越重要。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为客户端和服务器之间的实时数据传输提供了一种高效的解决方案。Netty作为一个高性能、事件驱动的NIO框架,它基于Java NIO实现了异步和事件驱动的网络应用程序。Spring Boot是一个基于Spring框架的微服务开发框架,它提供了许多开箱即用的功能和简化配置的机制。本文将详细介绍如何使用Spring Boot集成Netty和WebSocket,实现后台向前端推送信息的功能。
498 1
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
50 0
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
58 4
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
44 0
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
115 62
|
19天前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
43 14
|
21天前
|
SQL Java 数据库连接
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
32 3
|
1月前
|
消息中间件 缓存 Java
手写模拟Spring Boot启动过程功能
【11月更文挑战第19天】Spring Boot自推出以来,因其简化了Spring应用的初始搭建和开发过程,迅速成为Java企业级应用开发的首选框架之一。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,帮助读者深入理解其工作机制。
42 3
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
80 2
下一篇
DataWorks