搭建图书借阅系统实例

该博客介绍了如何搭建一个图书借阅系统,包括配置环境、创建MySQL数据库、数据库层(MyBatis)、服务层(SpringMVC)、前端页面以及在项目中遇到的问题和解决方案。后续部分探讨了采用Maven SSM(注解驱动)版本,前端使用HTML和AJAX交互。
摘要由CSDN通过智能技术生成

使用springMVC和MyBatis搭建图书借阅系统实例

1.准备jar包

配置好tomcat+eclipse环境,配置好MySQL服务

本文中,tomcat 9.0.43+java version 15.0.1

根据需要选择合适版本的jar包
在这里插入图片描述
如果是maven

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>MyGroup</groupId>
  <artifactId>Combined</artifactId>
  <version>beta</version>
  <packaging>war</packaging>
  <name>tst</name>
  
  <dependencyManagement>
  		<dependencies>
  			<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
			<dependency>
			    <groupId>org.mybatis</groupId>
			    <artifactId>mybatis</artifactId>
			    <version>3.5.3</version>
			</dependency>
  			
  		</dependencies>
  </dependencyManagement>
  
  <dependencies>
  	<dependency>
  		<groupId>org.mybatis</groupId>
  		<artifactId>mybatis</artifactId>
  	</dependency>
  	<dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-core</artifactId>
    <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-context</artifactId>
    <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-aop</artifactId>
    <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-aspects</artifactId>
     <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-beans</artifactId>
    <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-expression</artifactId>
    <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-jdbc</artifactId>
    <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-tx</artifactId>
    <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-web</artifactId>
    <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-webmvc</artifactId>
    <version>4.3.9.RELEASE</version>
    </dependency>
	<dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>jsp-api</artifactId>
    	<version>2.0</version>
	</dependency>
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>servlet-api</artifactId>
	    <version>2.5</version>
	</dependency>
	<dependency>
	    <groupId>commons-logging</groupId>
	    <artifactId>commons-logging</artifactId>
	    <version>1.2</version>
	</dependency>
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis-spring</artifactId>
	    <version>2.0.6</version>
	</dependency>
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>8.0.22</version>
	</dependency>



	
  </dependencies>
</project>

2.创建MySQL数据库

数据库的名字叫“d”。

use d;
drop table if EXISTS records;
drop table if EXISTS booklist;
drop table if EXISTS userlist;
CREATE TABLE booklist(
id int(10) primary key auto_increment,
name VARCHAR(40) not null,
rent bit(1) DEFAULT 0,
comment VARCHAR(500)
);
CREATE TABLE userlist(
uid int(10) primary key auto_increment,
name VARCHAR(25) not null UNIQUE,
password VARCHAR(30) not null
);
CREATE TABLE records(
rid int(10) primary key auto_increment,
bid int(10) not null,
uid int(10) not null,
name VARCHAR(25) not null,
returningbooks bit(1) not null,
date DATE not null,
FOREIGN KEY (uid) REFERENCES userlist(uid),
FOREIGN KEY (bid) REFERENCES booklist(id)
);
INSERT into booklist values(153245,"my book",DEFAULT,null);
INSERT into booklist values(DEFAULT,"another book",DEFAULT,null);
INSERT into userlist values(8438,"my user","123456");
INSERT into records values(9927584,153245,8438,"my user",0,"2021-03-03");
INSERT into records values(DEFAULT,153245,8438,"my user",1,"2021-03-09");

3.数据库层

pojo和util:
在这里插入图片描述

package databaseInterface;

import java.util.List;

public class Book {
   
private int id;
private String name;
private boolean rent;
private String comment;
private List<Record> records;
public int getId() {
   
	return id;
}
public void setId(int id) {
   
	this.id = id;
}
public String getName() {
   
	return name;
}
public void setName(String name) {
   
	this.name = name;
}
public boolean isRent() {
   
	return rent;
}
public void setRent(boolean rent) {
   
	this.rent = rent;
}
public String getComment() {
   
	return comment;
}
public void setComment(String comment) {
   
	this.comment = comment;
}
public List<Record> getRecords() {
   
	return records;
}
public void setRecords(List<Record> records) {
   
	this.records = records;
}
@Override
public String toString() {
   
	String s = "[Book name: "+name+"] [Book id: "+id+"] comment:: "+comment+" rent: "+ rent ;
	if(records!=null) {
   
		s+= "---rentRecords: \n";
		for(Record r : records) {
   
			s+=r.toString();
		}
	}
	
	return s+"\n";
}
}
package databaseInterface;

import java.util.Date;

public class Record {
   
private int rid;
private int bid;
private int uid;
private String name;
private boolean returningbooks;
private Date date;
public int getBid() {
   
	return bid;
}
public void setBid(int bid) {
   
	this.bid = bid;
}
public int getRid() {
   
	return rid;
}
public void setRid(int rid) {
   
	this.rid = rid;
}
public int getUid() {
   
	return uid;
}
public void setUid(int uid) {
   
	this.uid = uid;
}
public String getName() {
   
	return name;
}
public void setName(String name) {
   
	this.name = name;
}
public boolean isReturningbooks() {
   
	return returningbooks;
}
public void setReturningbooks(boolean returningbooks) {
   
	this.returningbooks = returningbooks;
}
public Date getDate() {
   
	return date;
}
public void setDate(Date date) {
   
	this.date = date;
}
@Override
public String toString() {
   
	if(isReturningbooks())return "USER "+uid+" HAS RETURNED A BOOK ON DATE "+ date +" record ID "+ rid + " ("+name + "<<<"+bid+")\n";
	return "USER "+uid+" HAS BORROWED A BOOK ON DATE "+ date +" record ID "+ rid + " ("+name + ">>>"+bid+")\n";
}
}

package databaseInterface;

public class User {
   
private int uid;
private String name;
private String password;
public int getUid() {
   
	return uid;
}
public void setUid(int uid) {
   
	this.uid = uid;
}
public String getName() {
   
	return name;
}
public void setName(String name) {
   
	this.name = name;
}
public String getPassword() {
   
	return password;
}
public void setPassword(String password) {
   
	this.password = password;
}
}

package databaseInterface;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class util {
   
private static SqlSessionFactory factory;
static ThreadLocal<SqlSession> tr;
static {
   
	try {
   
		InputStream is = Resources.getResourceAsStream("batisconf.xml");
		factory = new SqlSessionFactoryBuilder().build(is);
		tr = new ThreadLocal<>();
	} catch (IOException e) {
   
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

public static SqlSession getSession() {
   
	if(tr.get()==null)tr.set( factory.openSession());
	return tr.get();
}
public static void closeSession(SqlSession s) {
   
	if(s==null)return;
	if(tr.get()==null)tr.set(s);
	else s.close();
}
}

Mybatis Config
名字随意,在上面代码中调用

<?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>
	<typeAliases>
		<typeAlias alias="Book" type="databaseInterface.Book"/><!-- 实体类别名配置 -->
		<typeAlias alias="Record" type="databaseInterface.Record"/><!-- 实体类别名配置 -->
		<typeAlias alias="User" type="databaseInterface.User"/><!-- 实体类别名配置 -->
	</typeAliases>

	<environments default="development">
		<environment id="development">
			<!--使用jdbc事务管理 -->
			<transactionManager type="JDBC"/>
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/d?characterEncoding=utf-8"/>
				<!--自己的访问名和密码,这是我的!-->
				<property name="username" value="alapaka"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- 引入映射配置文件 -->
	<mappers>
		<package name="mappackage"/>
	</mappers>
</configuration>

Mappers将sql语句对应到java函数进行执行,配置Mappers
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper 
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mappackage.InterfaceMapper">
	
	<resultMap id="mymap" type="book">
		<id property="rid" column="rid"/>
		<result property="uid" column="uid"/>
		<result property="bid" column="bid"/>
		<result property="name" column="name"/>
		<result property="returningbooks" column="returningbooks"/>
		<result property="date" column="date"/>
	</resultMap>
	<resultMap id="myRecordMap" type="record">
		<id property="id" column="id"/>
		<result property="name" column="name"/>
		<result property="rent" column="rent"/>
		<result property="comment" column="comment"/>
		<collection property="records" select="mappackage.InterfaceMapper.selectRecordByBookId" column="id"></collection>
	</resultMap>
	<select id="selectByBookId" parameterType="int" resultMap="mymap">
		select * from booklist where id = #{bookId}
	</select>
	<select id="selectBook" parameterType="int" resultMap="mymap">
		select * from booklist
		<where>
			<if test="bookId!=null&amp;&amp;bookId!=0">and id = #{bookId}</if>
			<if test="bookName!=null&amp;&amp;bookName!=''">and name = #{bookName}</if>
			<if test="rent!=null">and rent = #{rent}</if>
			<if test="comment!=null&amp;&amp;comment!=''">and comment = #{comment}</if>
		</where>
		limit #{start},#{scope}
	</select>
	<select id="selectRecordByBookId" parameterType="int" resultType="Record">
		select * from records where bid = #{bookId}
	</select>
	<select id="selectUser" resultType="User">
		select * from userlist where name=#{username} and password=#{password}
	</select>
	<select id="selectUserById" resultType="User">
		select * from userlist where id=#{id}
	</select>
	<select id="selectUserByName" resultType="User">
		select * from userlist where name=#{username}
	</select>
	<select id="selectRecord" parameterType="int" resultMap="myRecordMap">
		select * from records
		<where>
			<if test="recordId!=null&amp;&amp;recordId!=0">and rid = #{recordId}</if>
			<if test="bookId!=null&amp;&amp;bookId!=0">and bid = #{bookId}</if>
			<if test="userId!=null&amp;&amp;userId!=0">and uid = #{userId}</if>
			<if test="username!=null&amp;&amp;username!=''">and name = #{username}</if>
			<if test="returningBooks!=null">and returningbooks = #{returningBooks}</if>
			<if test="date!=null&amp;&amp;date!=''">and date = #{date}</if>
		</where>
		limit #{start},#{scope}
	</select>
	<insert id="insertBook">
		insert into booklist values(default,#{bookName},default,#{comment})
	</insert>
	<insert id="insertUser">
		insert into userlist values(default,#{username},#{password})
	</insert>
	<insert id="insertRecord">
		insert into records values(default,#{bookId},#{userId},#{username},#{returningBooks},#{date})
	</insert>
	<update id="updateBook" parameterType="int">
		update booklist set rent = #{to_code} where id = #{bookId}
	</update>
</mapper>
  • .xml文件和.java文件的文件名,文中函数名要匹配,才能生成代理类执行
package mappackage;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import databaseInterface.Book;
import databaseInterface.User;

public interface InterfaceMapper {
   
	
	List<Book> selectByBookId(@Param("bookId")int id);
	List<Book> selectBook(@Param("bookId")int bookId, @Param("bookName")String bookName,
			@Param("rent")boolean rent, @Param("comment")String comment, @Param("start")int start, @Param("scope")int scope);
	List<Record> selectRecordByBookId(@Param("bookId")int id);
	List<databaseInterface.Record> selectRecord(@Param("recordId")int recordId,@Param("bookId")int bookId,@Param("userId")int userId,@Param("username")String userName,
			@Param("returningBooks")boolean returnningBooks, @Param("date")String date, @Param("start")int start, @Param("scope")int scope);
	List<User> selectUser(@Param("username")String name, @Param("password")String pwd);
	List<User> selectUserByName(@Param("username")String name);
	List<User> selectUserById(@Param("id")int id);
	int insertBook (@Param("bookName")String bookName, @Param("comment")String comment);
	int insertUser(@Param("username")String name, @Param("password")String pwd);
	int insertRecord(@Param("bookId")int bookId,@Param("userId")int userId,
			@Param("username")String username, @Param("returningBooks")boolean returnningBooks, @Param("date")String date);
	int updateBook(@Param("bookId")int bookID,@Param("to_code")int i);
}

4.服务层

用springMVC调用controller,配置springMVC和web.xml
在这里插入图片描述
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<servlet>
		<servlet-name>springmvc123</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springMVC.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- 拦截设置 -->
	<servlet-mapping>
		<servlet-name>springmvc123</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	<!--将字符编码改为utf-8防止乱码,可选-->
	<filter>
		<filter-name>encoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

springMVC.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="  
	    http://www.springframework.org/schema/mvc 
	    http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans       
        http://www.springframework.org/schema/beans/spring-beans.xsd  
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context.xsd">

	<bean id="checkService" class="controller.CheckController"></bean>
	<bean id="loginService" class="controller.LoginController"></bean>
	<bean id="registerService" class="controller.RegisterController"></bean>
	<bean id="newBookService" class="controller.NewBookController"></bean>
	<bean id="recordService" class="controller.RecordController"></bean>
	<bean id="newRecordService" class="controller.NewRecordController"></bean>
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
		<property name="urlMap">
			<map>
				<entry key="getChecked" value-ref="checkService"></entry>
				<entry key="getRecords" value-ref="recordService"></entry>
				<entry key="login" value-ref="loginService"></entry>
				<entry key="reg" value-ref="registerService"></entry>
				<entry key="newbook" value-ref="newBookService"></entry>
				<entry key="newrecord" value-ref="newRecordService">
				<!--前面是url,后面是服务名和上面beans一一对应-->
</entry>
			</map>
		</property>
	</bean>
	<mvc:interceptors>
		<bean class="interceptor.MyInterceptor"></bean>
	</mvc:interceptors>
	
</beans>

按顺序配置各个controller
在这里插入图片描述
CheckController

package controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.ibatis.session.SqlSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import databaseInterface.Book;
import mappackage.InterfaceMapper;  
public class CheckController implements Controller{
   
	

	@Override
	public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
   
		System.out.println("---------------check now---------------------");
		//getting paras for SELECT
		HttpSession session = arg0.getSession();
		int start = (int) session.getAttribute("start");
		int scope = (int) session.getAttribute("scope");
		//System.out.println(scope);
		if(arg0.getParameter("start")!=null&&!arg0.getParameter("start").equals(""))start=Integer.parseInt(arg0.getParameter("start")); 
		if(arg0.getParameter("scope")!=null&&!arg0.getParameter("scope").equals(""))scope=Integer.parseInt(arg0.getParameter("scope"));
		if(arg0.getParameter("p")!=null&&!arg0.getParameter("p").equals(""))start=Integer.parseInt(arg0.getParameter("p")); 
		//System.out.println(scope);
		start-=1;//符合网页访问习惯
		if(start<0)start=0;
		Integer id = 0;
		if(!arg0.getParameter("bookid").equals(""))id = Integer.parseInt( arg0.getParameter("bookid"));
		String name = arg0.getParameter("bookname");
		boolean rent = false;
		if(arg0.getParameter("rent")!=null)rent=true;
		String comment = arg0.getParameter("comment");
		
		//SELECT in MySQL :::::::::start page->start No. here
		SqlSession ss = databaseInterface.util.getSession();
		InterfaceMapper mapper = ss.getMapper(mappackage.InterfaceMapper.class);
		List<Book> fls = mapper.selectBook(id, name, rent, comment, start*scope, scope);
		/*System.out.println("id"+id);
		System.out.println("name"+name);
		System.out.println("rent"+rent);
		System.out.println("comment"+comment);
		System.out.println("start"+start);
		System.out.println("scope"+scope);
		System.out.println("p"+arg0.getParameter("p"));
		System.out.println("n"+arg0.getParameter("n"));*/
		
		//returning to the page
		System.out.println(fls.toString());
		String s = "";
		for(Book i : fls) {
   
			s+=i.toString()+"<br>";
		}
		if(s.length()==0)s="NO RESULT";
		ModelAndView mav = new ModelAndView("page");
		mav.addObject("showString", s);
		mav.addObject("bookid", id);
		mav.addObject("bookname", name);
		mav.addObject("start", start+1);
		mav.addObject("scope", scope);
		mav.addObject("comment", comment);
		mav.getModel().remove("rent");
		if(rent==true)mav.addObject("rent", 1);
		return mav;
		
		/*arg0.setAttribute("showString", s);
		arg0.setAttribute("bookid", id);
		arg0.setAttribute("bookname", name);
		arg0.setAttribute("start", start+1);
		arg0.setAttribute("scope", scope);
		arg0.removeAttribute("rent");
		if(rent==true)arg0.setAttribute("rent", 1);
		arg0.setAttribute("comment", comment);
		arg0.getRequestDispatcher("/page.jsp").forward(arg0, arg1);
		return null;*/
	}  
    
    //http://localhost:8080/Combined/login.jsp 
}

LoginController

package controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.ibatis.session.SqlSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import databaseInterface.User;
import mappackage.InterfaceMapper;  
public class LoginController implements Controller{
   
	

	@Override
	public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
   
		System.out.println("--------------login link success-----------------");
		arg0.setAttribute("loginWord", "");
		if(arg0.getParameter("logout")!=null&&arg0.getParameter("logout").equals("true")) {
   
			arg0.getSession().invalidate();
			
			ModelAndView mav = new ModelAndView("login");
			mav.addObject("loginWord","logout success");
			return mav;
			//arg0.setAttribute("loginWord", "logout success");
			//arg0.getRequestDispatcher("/login.jsp").forward(arg0, arg1);
		}
		SqlSession ss = databaseInterface.util.getSession();
		InterfaceMapper mapper = ss.getMapper(mappackage.InterfaceMapper.class);
		String name = arg0.getParameter("name");
		String pwd = arg0.getParameter("pwd");
		List<User> fls = mapper.selectUser(name,pwd);
		if(!fls.isEmpty()) {
   
			HttpSession session =  arg0.getSession();
			session.setAttribute("Uname", name);
			arg0.setAttribute("showString", "");
			if(session.getAttribute("start")==null){
   
				session.setAttribute("start", 1);
			}
			if(session.getAttribute("scope")==null){
   
				session.setAttribute("scope", 10);
			}
			ModelAndView mav = new ModelAndView("main");
			return mav;
		}
		else {
   
			ModelAndView mav = new ModelAndView("login");
			mav.addObject("loginWord","incorrect username or password");
			return mav;
		}
	}  
    
    //http://localhost:8080/Combined/login.jsp  
}

NewBookController

package controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.ibatis.session.SqlSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import mappackage.InterfaceMapper;

public class NewBookController implements Controller{
   

	@Override
	public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
   
		System.out.println("-----------register a new book now---------------");
		
		//get parameters for a new book
		String name = arg0.getParameter("bookname");
		String comment = arg0.getParameter("comment");
		ModelAndView mav = new ModelAndView("newbook");
		
		//MySQL insert
		SqlSession ss = databaseInterface.util.getSession();
		InterfaceMapper mapper = ss.getMapper(mappackage.InterfaceMapper.class);
		if(name!=null&&!name.equals("")) {
   
			mapper.insertBook(name, comment);
			mav.addObject("show", "new book added");
			//arg0.setAttribute("show", "new book added");
		}
		else {
   
			mav.addObject("show", "invalid book name");
			//arg0.setAttribute("show", "invalid book name");
		}
		ss.commit(); 
			
		//Analysis and return pages
		return mav;
	}

}

NewRecordController

package controller;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.ibatis.session.SqlSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import databaseInterface.Book;
import databaseInterface
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要安装PyCharm和MySQL数据库。然后,按照以下步骤操作: 1. 在MySQL数据库中创建一个名为“library”的数据库。 2. 在PyCharm中创建一个名为“library”的项目。 3. 安装PyMySQL库,使用以下命令在PyCharm的终端中进行安装: ``` pip install PyMySQL ``` 4. 创建一个名为“db.py”的Python文件,并编写用于连接到MySQL数据库的代码: ```python import pymysql class Database: def __init__(self): self.host = "localhost" self.user = "root" self.password = "your_password" self.db = "library" self.port = 3306 def connect(self): try: self.connection = pymysql.connect(host=self.host, user=self.user, password=self.password, db=self.db, port=self.port, cursorclass=pymysql.cursors.DictCursor) self.cursor = self.connection.cursor() print("Connection successful") except Exception as e: print("Connection refused: ", e) ``` 注意将“your_password”替换为你的MySQL数据库密码。 5. 创建一个名为“main.py”的Python文件,并编写用于实现图书借阅系统的代码。 例如,你可以创建一个名为“Book”类,并在类中定义以下方法: ```python class Book: def __init__(self, title, author, publisher, isbn): self.title = title self.author = author self.publisher = publisher self.isbn = isbn def add_book(self): query = "INSERT INTO books (title, author, publisher, isbn) VALUES (%s, %s, %s, %s)" values = (self.title, self.author, self.publisher, self.isbn) db.cursor.execute(query, values) db.connection.commit() def delete_book(self, id): query = "DELETE FROM books WHERE id = %s" db.cursor.execute(query, id) db.connection.commit() def update_book(self, id): query = "UPDATE books SET title = %s, author = %s, publisher = %s, isbn = %s WHERE id = %s" values = (self.title, self.author, self.publisher, self.isbn, id) db.cursor.execute(query, values) db.connection.commit() @staticmethod def view_books(): query = "SELECT * FROM books" db.cursor.execute(query) results = db.cursor.fetchall() for book in results: print(book) ``` 这些方法用于添加、删除、更新和查看图书馆中的书籍。 6. 在“main.py”文件中,创建一个名为“db”的Database类实例,并调用其“connect”方法以连接到MySQL数据库。 ```python if __name__ == "__main__": db = Database() db.connect() ``` 7. 在“main.py”文件中,编写使用Book类的代码来实现图书借阅系统的操作,例如: ```python if __name__ == "__main__": db = Database() db.connect() book1 = Book("The Great Gatsby", "F. Scott Fitzgerald", "Scribner", "978-0743273565") book1.add_book() book2 = Book("To Kill a Mockingbird", "Harper Lee", "J. B. Lippincott & Co.", "978-0446310789") book2.add_book() Book.view_books() book1.title = "The Catcher in the Rye" book1.update_book(1) Book.view_books() book2.delete_book(2) Book.view_books() ``` 这些代码将添加两本书,查看所有书籍,更新第一本书的标题,删除第二本书,并再次查看所有书籍。 8. 运行“main.py”文件,以查看图书借阅系统的操作是否成功。 请注意,在实际应用中,你需要添加更多功能和验证,例如添加用户、实现借书和还书等。此外,出于安全原因,你还应该使用密码保护数据库,并对用户输入进行验证和过滤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值