@TOC
使用mysql、springboot、mybatis等技术,完成由数据库到线性表再到数据库的简单数据交互。
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.7.0version>
<relativePath/>
parent>
<groupId>com.bookgroupId>
<artifactId>BookSystemartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>BookSystemname>
<description>BookSystemdescription>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.2.8version>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.2.2version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-testartifactId>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
exclude>
excludes>
configuration>
plugin>
plugins>
build>
project>
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/book
username: root
password: rjj1125
logging:
level:
com: error
package com.book.mapper;
import com.book.pojo.Books;
import com.book.utils.SequenceList;
import org.apache.ibatis.annotations.*;
import java.awt.print.Book;
import java.util.List;
/**
* @author rjj
* @date 2022/9/6 - 20:38
*/
@Mapper
public interface BooksMapper{
@Select("select * from books")
List<Books> list();
@Insert("insert into books value (#{isbn}, #{name}, #{author}, #{press}, #{price}) ")
void updateDatabase(Books books);
@Delete("delete from books")
void clear();
}
package com.book.pojo;
import lombok.Data;
/**
* @author rjj
* @date 2022/9/6 - 20:29
*/
@Data
public class Books {
private Long isbn;
private String name;
private String author;
private String press;
private float price;
}
package com.book.service;
import com.book.pojo.Books;
/**
* @author rjj
* @date 2022/9/8 - 17:50
*/
public interface BooksService{
void init();
String add(Books books);
String delete(Long isbn);
void end();
String find(Long isbn);
String update(Books book);
String sort();
String count();
void show();
}
package com.book.service;
import com.book.mapper.BooksMapper;
import com.book.pojo.Books;
import com.book.utils.SequenceList;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.awt.print.Book;
import java.util.Arrays;
import java.util.List;
/**
* @author rjj
* @date 2022/9/6 - 21:36
*/
@Service
public class BooksServiceImpl implements BooksService {
@Resource
private BooksMapper booksMapper;
private SequenceList<Books> books;
public void init() {
//获取数据库中已有书的数据存入线性表中
this.books = new SequenceList<Books>();
List<Books> list = booksMapper.list();
for (Books book : list) {
books.insert(book);
}
}
public String add(Books book) {
//TODO 要添加的书的isbn是否已存在与表中
//存在
for (int i = 0; i < books.length(); i++) {
if (book.getIsbn().equals(books.get(i).getIsbn()))
return "该图书已存在!";
}
//不存在
books.insert(book);
return "已成功添加";
}
public String delete(Long isbn) {
for (int i = 0; i < books.length(); i++) {
if (isbn.equals(books.get(i).getIsbn())) {
books.remove(i);
return "删除成功!";
}
}
return "不存在此书!";
}
public String find(Long isbn) {
for (int i = 0; i < books.length(); i++) {
if (isbn.equals(books.get(i).getIsbn())) {
return books.get(i).toString();
}
}
return "不存在此书!";
}
public String update(Books book) {
for (int i = 0; i < books.length(); i++) {
if (book.getIsbn().equals(books.get(i).getIsbn())) {
books.update(i, book);
return "修改成功!";
}
}
return "不存在此书!";
}
public String sort() {
for (int i = 0; i < books.length() - 1; i++) {
for (int j = 0; j < books.length() - i - 1; j++) {
if (books.get(j).getIsbn() > books.get(j + 1).getIsbn()) {
Books temp = books.get(j);
books.update(j, books.get(j + 1));
books.update(j + 1, temp);
}
}
}
return "排序成功!";
}
public String count(){
return "已有图书"+books.length()+"个!";
}
public void show(){
books.showAll();
}
public void end() {
//先清空表中数据
booksMapper.clear();
//在将最新线性表加入数据库
for (int i = 0; i < books.length(); i++) {
booksMapper.updateDatabase(books.get(i));
}
}
}
public class SequenceList<T>{
//创建数组
private T[] ListArray;
//记录当前元素个数
private int N;
public SequenceList(int capacity) {
//初始化数组
this.ListArray = (T[]) new Object[capacity];
//初始化长度
this.N = 0;
}
public SequenceList(){
//定义默认长度
this(10);
}
public void update(int i, T t){
ListArray[i] = t;
}
public void clear() {
this.N = 0;
}
public boolean isEmpty() {
return this.N == 0;
}
public int length() {
return N;
}
public T get(int i) {
return ListArray[i];
}
public void insert(T t) {
//位置不够进行扩容
if (N == ListArray.length) {
resize(ListArray.length * 2);
}
ListArray[N++] = t;
}
public void insert(int i, T t) {
if (i<0 || i>N)
throw new RuntimeException("插入位置不合法!");
//位置不够进行扩容
if (N == ListArray.length) {
resize(ListArray.length * 2);
}
//先将i处元素及其后面元素依次向后移动一位
for (int index = N - 1; index > i; index--) {
ListArray[index] = ListArray[index - 1];
}
//将添加元素放入i索引处
ListArray[i] = t;
N++;
}
public T remove(int i) {
if (i<0 || i>N)
throw new RuntimeException("删除位置不合法!");
T current = ListArray[i];
//被删除元素后的每一个元素向前移动一位
for (int index = i; index < N - 1; index++) {
ListArray[index] = ListArray[index + 1];
}
N--;
if (N > 0 && N < ListArray.length / 4) {
resize(ListArray.length / 2);
}
return current;
}
//打印当前线性表的元素
public void showAll() {
for (int i = 0; i < N; i++) {
System.out.println(ListArray[i] + " ");
}
}
//改变容量
private void resize(int newSize) {
//记录旧数组
T[] temp = ListArray;
//创建新数组
ListArray = (T[]) new Object[newSize];
//把旧数组中的元素拷贝到新数组
for (int i = 0; i < N; i++) {
ListArray[i] = temp[i];
}
}
}
package com.book;
import com.book.pojo.Books;
import com.book.service.BooksService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.Scanner;
@SpringBootApplication
public class BookSystemApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(BookSystemApplication.class, args);
BooksService booksService = run.getBean(BooksService.class);
System.out.println("--------------图书信息管理系统------------");
System.out.println();
Scanner sc = new Scanner(System.in);
//初始化线性表,将数据库已有信息导入
booksService.init();
while (true){
System.out.println("1.插入 2.删除 3.查找 4.修改 5.排序 6.计数 7.导入 8.保存 9.打印 10.退出");
System.out.println();
int choice = sc.nextInt();
if (choice == 1) {
Books book = new Books();
System.out.println("请输入书籍isbn:");
long isbn = sc.nextLong();
book.setIsbn(isbn);
System.out.println("请输入书籍名:");
String name = sc.next();
book.setName(name);
System.out.println("请输入作者:");
String author = sc.next();
book.setAuthor(author);
System.out.println("请输入出版社:");
String press = sc.next();
book.setPress(press);
System.out.println("请输入价格");
float price = sc.nextFloat();
book.setPrice(price);
System.out.println(booksService.add(book));
}
else if (choice == 2) {
System.out.println("请输入删除书籍isbn:");
Long isbns = sc.nextLong();
System.out.println(booksService.delete(isbns));
}
else if (choice == 3) {
System.out.println("请输入查找书籍的isbn:");
long isbnss = sc.nextLong();
System.out.println(booksService.find(isbnss));
}
else if (choice == 4) {
Books subBook = new Books();
System.out.println("请输入要修改书籍的isbn:");
long subIsbn = sc.nextLong();
subBook.setIsbn(subIsbn);
System.out.println("请输入修改后书籍名:");
String subName = sc.next();
subBook.setName(subName);
System.out.println("请输入修改后作者:");
String subAuthor = sc.next();
subBook.setAuthor(subAuthor);
System.out.println("请输入修改后出版社:");
String subPress = sc.next();
subBook.setPress(subPress);
System.out.println("请输入修改后价格:");
float subPrice = sc.nextFloat();
subBook.setPrice(subPrice);
System.out.println(booksService.update(subBook));
}
else if (choice == 5) {
System.out.println(booksService.sort());
}
else if (choice == 6) {
System.out.println(booksService.count());
}
else if (choice == 7) {
booksService.init();
System.out.println("已成功导入!");
}
else if (choice == 8) {
booksService.end();
System.out.println("已成功保存!");
}
else if (choice == 9) {
booksService.show();
}
else if (choice == 10){
System.out.println("感谢使用本系统!");
booksService.end();
break;
}
else {
System.out.println("输入不合法!");
}
}
}
}