分析项目结构:概述:本系统借鉴了MVC思想,由Maven构建,使用MyBatis+MySQL作为持久层进行数据存储与处理
由于系统三个部分的功能实现思路类似,本文只说明第一部分的实现思路
- Data.pojo包下有三个实体类bookInfo、readerInfo、borrowInfo,依次代表图书信息,读者信息,借阅信息
- Data.UI包为表现层与逻辑层二合一,bookInfoUI、readerInfoUI、borrowInfoUI三个类依次实现了交互界面的输出和用户请求的处理,并与持久层进行通信
- Data.Mapper包为三个DAO接口,与Mapper配置文件匹配
- resource目录下的三个xml文件为Mapper映射配置文件
使用MyBatis建立与数据库的会话,使用Scanner读入信息,调用DAO(Mapper)接口保存数据库中。
private static void bookInfoAdd() throws Exception {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");//使用输入流对象加载MyBatis配置文件
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//获取SqlSessionFactory工厂方法
SqlSession sqlSession = sqlSessionFactory.openSession();//调用SqlSessionFactory工厂方法,获取数据库通信,打开会话
bookinfoMapper bookinfoMapper = sqlSession.getMapper(bookinfoMapper.class);//获取DAO接口实例
System.out.println("请输入要添加的图书数量:");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
bookInfo bookinfo = new bookInfo();
for (int i = 0; i < n; i++) {
System.out.println("请输入书号:");
bookinfo.setId(scanner.nextInt()); scanner.nextLine();
System.out.println("请输入书名:");
bookinfo.setName(scanner.nextLine());
System.out.println("请输入作者:");
bookinfo.setAuthor(scanner.nextLine());
System.out.println("请输入出版社:");
bookinfo.setPress(scanner.nextLine());
System.out.println("请输入出版日期:");
bookinfo.setDate(scanner.nextLine());
System.out.println("请输入存馆数量:");
bookinfo.setNumber(scanner.nextInt());
System.out.println("请输入定价:");
bookinfo.setPrice(scanner.nextDouble());
bookinfoMapper.bookInfoAdd(bookinfo);
sqlSession.commit();
System.out.println("添加成功!");
}
sqlSession.close(); //关闭数据库会话
showbookInfo(); //返回上一级菜单
}
2.图书信息查询
与功能一思路类似
private static void bookInfoQuery() throws Exception {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
bookinfoMapper bookinfoMapper = sqlSession.getMapper(bookinfoMapper.class);
System.out.println("请输入查询对象:");
System.out.println("1.按书名查询");
System.out.println("2.按作者名");
System.out.println("3.按出版社");
Scanner scanner = new Scanner(System.in);
int choose = scanner.nextInt(); scanner.nextLine();
switch (choose){
case 1 -> {
System.out.println("请输入书的名称:");
String name = scanner.nextLine();
List bookinfo = bookinfoMapper.selectByName(name);
for (bookInfo bookInfo : bookinfo) {
System.out.println(bookInfo);
}
sqlSession.close();
showbookInfo();
}
case 2 -> {
System.out.println("请输入作者:");
String author = scanner.nextLine();
List bookinfo = bookinfoMapper.selectByAuthor(author);
for (bookInfo bookInfo : bookinfo) {
System.out.println(bookInfo);
}
sqlSession.close();
showbookInfo();
}
case 3 -> {
System.out.println("请输入出版社:");
String press = scanner.nextLine();
List bookinfo = bookinfoMapper.selectByPress(press);
for (bookInfo bookInfo : bookinfo) {
System.out.println(bookInfo);
}
sqlSession.close();
showbookInfo();
}
}
}
3.图书信息排序
与功能一思路类似
private static void bookInfoSort() throws Exception {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
bookinfoMapper bookinfoMapper = sqlSession.getMapper(bookinfoMapper.class);
System.out.println("1.按书号进行升序排序");
System.out.println("2.按书名进行升序排序");
System.out.println("请输入要执行的操作:");
Scanner scanner = new Scanner(System.in);
int choose = scanner.nextInt();
switch (choose){
case 1 -> {
List bookinfo = bookinfoMapper.selectByIdUp();
for (bookInfo bookInfo : bookinfo) {
System.out.println(bookInfo);
}
sqlSession.close();
showbookInfo();
}
case 2 ->{
List bookinfo = bookinfoMapper.selectByNameUp();
for (bookInfo bookInfo : bookinfo) {
System.out.println(bookInfo);
}
sqlSession.close();
showbookInfo();
}
}
}
4.图书信息的修改、删除
与功能一思路类似
private static void bookInfoEdit() throws Exception {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
bookinfoMapper bookinfoMapper = sqlSession.getMapper(bookinfoMapper.class);
bookInfo bookinfo = new bookInfo();
System.out.println("1.按书号进行修改");
System.out.println("2.按书名进行修改");
System.out.println("请输入要进行的操作:");
Scanner scanner = new Scanner(System.in);
int choose = scanner.nextInt(); scanner.nextLine();
switch(choose){
case 1 -> {
System.out.println("请输入书号:");
bookinfo.setId(scanner.nextInt()); scanner.nextLine();
System.out.println("请输入书名:");
bookinfo.setName(scanner.nextLine());
System.out.println("请输入作者:");
bookinfo.setAuthor(scanner.nextLine());
System.out.println("请输入出版社:");
bookinfo.setPress(scanner.nextLine());
System.out.println("请输入出版日期:");
bookinfo.setDate(scanner.nextLine());
System.out.println("请输入存馆数量:");
bookinfo.setNumber(scanner.nextInt());
System.out.println("请输入定价:");
bookinfo.setPrice(scanner.nextDouble());
bookinfoMapper.EditById(bookinfo);
sqlSession.commit();
System.out.println("修改成功!");
sqlSession.close();
showbookInfo();
}
case 2 -> {
System.out.println("请输入书名:");
bookinfo.setName(scanner.nextLine());
System.out.println("请输入书号:");
bookinfo.setId(scanner.nextInt()); scanner.nextLine();
System.out.println("请输入作者:");
bookinfo.setAuthor(scanner.nextLine());
System.out.println("请输入出版社:");
bookinfo.setPress(scanner.nextLine());
System.out.println("请输入出版日期:");
bookinfo.setDate(scanner.nextLine());
System.out.println("请输入存馆数量:");
bookinfo.setNumber(scanner.nextInt());
System.out.println("请输入定价:");
bookinfo.setPrice(scanner.nextDouble());
bookinfoMapper.EditByName(bookinfo);
sqlSession.commit();
System.out.println("修改成功!");
sqlSession.close();
showbookInfo();
}
}
}
private static void bookInfoDelete() throws Exception {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
bookinfoMapper bookinfoMapper = sqlSession.getMapper(bookinfoMapper.class);
System.out.println("1.按书号删除");
System.out.println("2.按书名删除");
Scanner scanner = new Scanner(System.in);
int choose = scanner.nextInt(); scanner.nextLine();
switch (choose){
case 1 -> {
System.out.println("请输入书号:");
int id = scanner.nextInt();
bookinfoMapper.bookInfoDeleteById(id);
sqlSession.commit();
System.out.println("删除成功");
sqlSession.close();
showbookInfo();
}
case 2 -> {
System.out.println("请输入书名:");
String name = scanner.nextLine();
bookinfoMapper.bookInfoDeleteByName(name);
sqlSession.commit();
System.out.println("删除成功");
sqlSession.close();
showbookInfo();
}
}
}
DAO接口类
package Data.Mapper;
import Data.pojo.bookInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface bookinfoMapper {
List selectByName(@Param("name") String name);
List selectByAuthor(@Param("author") String author);
List selectByPress(@Param("press") String press);
List selectByNameUp();
List selectByIdUp();
void bookInfoDeleteByName(@Param("name") String name);
void bookInfoDeleteById(@Param("id") int id);
void bookInfoAdd(bookInfo bookinfo);
int bookNumberQuery(@Param("id") int id);
void bookNumberDec(@Param("id") int id, @Param("bookNum") int bookNum);
void bookNumberInc(@Param("id") int id, @Param("bookNum") int bookNum);
void EditById(bookInfo bookinfo);
void EditByName(bookInfo bookInfo);
String getBname(@Param("id") int id);
}
Mapper配置文件



