基于Mybatis+Maven+(*)的图书管理系统

该博客详细记录了如何使用MyBatis框架搭建一个简单的图书管理系统,包括数据库设计、配置文件设置、接口定义及主函数实现。通过学生类和书籍类的定义,实现了学生信息和书籍信息的录入功能,并利用日志系统记录操作。测试结果显示功能正常运行。
摘要由CSDN通过智能技术生成

实现的需求(暂时,后续会添加):

  • 在线录入学生信息和书籍信息      √
  • 查询书籍信息列表
  • 查询学生信息列表
  • 查询借阅信息列表
  • 完整的日志系统

项目准备阶段

数据库准备阶段

项目取名为BookManger,在Navicat中创建数据库为book_manage,包含三个表分别为学生,书籍,将学生与书籍连接起来的借阅表如下图

 

程序准备阶段

在IDEA创建BookManage,配置maven,导入如下坐标

<?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>BookManger</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
    </dependencies>

</project>

将创建时的配置文件删除,自己定义使用mapper的配置文件,连接上述所述的数据库如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/book_manage"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="book.manage.mapper.BookMapper"/>
    </mappers>
</configuration>

定义接口BookMapper用于传递具体书籍学生信息(注释实现)

package book.manage.mapper;

import book.manage.entity.Book;
import book.manage.entity.Student;
import org.apache.ibatis.annotations.Insert;

public interface BookMapper {
    @Insert("insert into student(name,sex,grade) values(#{name},#{sex},#{grade})")
    int addStudent(Student student);
    @Insert("insert into book(title,`desc`,price) values(#{title},#{desc},#{price})")
    int addBook(Book book);
}

定义调用配置文件的类SqlUtil.java

package book.manage.sql;

import book.manage.mapper.BookMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.util.function.Consumer;

public class SqlUtil {
    private SqlUtil(){}
    private static SqlSessionFactory factory;
    static{
        try{
            factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void doSqlWork(Consumer<BookMapper> consumer){
        try(SqlSession sqlSession= factory.openSession(true)){
            BookMapper bookMapper = sqlSession.getMapper(BookMapper.class);
            consumer.accept(bookMapper);
        }
    }
}

功能实现阶段

初始功能

如上配置过程暂且告一段落,接下来是具体的实现:

首先定义学生类:

package book.manage.entity;

import lombok.Data;

@Data
public class Student {
    int sid;
    final String name;
    final String sex;
    final int grade;
}

以及书籍类:

package book.manage.entity;

import lombok.Data;

@Data
public class Book {
    int bid;
    final String title;
    final String desc;
    final double price;
}

实现过程在main函数如下:

package book.manage;

import book.manage.entity.Book;
import book.manage.entity.Student;
import book.manage.sql.SqlUtil;
import lombok.extern.java.Log;
import org.apache.ibatis.io.Resources;

import java.io.IOException;
import java.util.Scanner;
import java.util.logging.LogManager;

@Log
public class Main {
    public static void main(String[] args) throws IOException {
        try (Scanner scanner = new Scanner(System.in)) {
            LogManager manager = LogManager.getLogManager();
            manager.readConfiguration(Resources.getResourceAsStream("logging.properties"));
            while (true) {
                System.out.println("********************");
                System.out.println("1.录入学生信息");
                System.out.println("2.录入书籍信息");
                System.out.println("输入您想要执行的操作,输入其他任意数字退出");
                int input;
                try {
                     input = scanner.nextInt();
                }catch (Exception e){
                    return;
                }
                scanner.nextLine();
                    switch (input) {
                        case 1:
                            addStudent(scanner);
                            break;
                        case 2:
                            addBook(scanner);
                            break;
                        default:
                            return;
                    }

            }
        }
    }
    private static void addBook(Scanner scanner){
        System.out.println("请输入书籍名字");
        String title =scanner.nextLine();
        System.out.println("请输入书籍介绍");
        String desc =scanner.nextLine();
        System.out.println("请输入书籍价格");
        String price =scanner.nextLine();
        double p = Integer.parseInt(price);
        Book book =new Book(title,desc,p);
        SqlUtil.doSqlWork(mapper ->{
            int i=mapper.addBook(book);
            if(i>0) {
                System.out.println("书籍信息录入成功");
                log.info("新添加一条新书籍信息" + book);
            }else System.out.println("书籍信息录入失败");

        });
    }
    private static void addStudent(Scanner scanner){
        System.out.println("请输入学生名字");
        String name =scanner.nextLine();
        System.out.println("请输入学生性别(男/女)");
        String sex =scanner.nextLine();
        System.out.println("请输入学生年级");
        String grade =scanner.nextLine();
        int g = Integer.parseInt(grade);
        Student student =new Student(name,sex,g);
        SqlUtil.doSqlWork(mapper ->{
            int i=mapper.addStudent(student);
            if(i>0) {
                System.out.println("学生信息录入成功");
                log.info("新添加一条新学生信息" + student);
            }else System.out.println("学生信息录入失败");

        });
    }
}

测试结果:

 添加日志功能:

使用的是Properties配置日志文件

定义新文件为logging.properties

handlers= java.util.logging.FileHandler
.level= ALL
java.util.logging.FileHandler.pattern=console.log
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter

在main函数添加注释并在相应位置添加对应弹出日志提示信息:

 

 

 

测试结果

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值