目录
12.BookTypeManagerInterFrm.java
本次设计基于eclipse+Javaswing+windowBuilder+JDBC+mysql实现,我会从头到尾对整个实现过程进行详细的讲解,最后我也会献上我的全部文件希望对大家有所帮助!!
1.前置软件以及开发环境:
安装流程我就不在这里多说了,网上都有,我这里将一些要点。
eclipse:博主选用的是2022-12的版本比较稳定,其他版本也可以,IDEA也是可以的,不是很建议用vscode,虽然集成但是终归没有专门的软件好使。
Java swing以及window Builder:这些都是插件,具体步骤可以去网上搜,Javaswing是一个库,安装完毕不需要管,这边着重讲一下window Builder。
首先就是安装:很多人安装的时候看软件右下角的进度条读完或者等不及了就直接退出eclipse了,这样子是不对的,一定要等安装成功后会有一个小弹窗出来让你重启eclipse,这样子才会成功,如果你要是安装失败了,要么重装eclipse,要么就打开eclipse等待一会儿,看看能否继续安装,博主就是第二种情况,打开后等待几分钟就安装好了。
然后是使用:
找到你们的项目位置,右键src选择新建,然后最底下有个选项“其他”,找到其中的windowBuilder就可以创建窗口了,具体可以自己操作下。
Mysql:这个应该不用我多说,大家都有安装的肯定,这边讲一下好用的操作端,博主用的是datagrip,但是这个要付费大家可以去搜搜破解版(博主自己就是破解的)。还有就是Navicat也是不错的,实际上都是可以的只要能够建立数据库即可。
注意:有很多小伙伴开始做的时候啥也不会,认为eclipse一定要连接数据库什么的,实际上完全不需要,这些我们会在代码里面进行操作。
2.开发过程讲解
首先我们需要建立至少四个包,如下图:
第一次写这个可能都不是很了解我就简单讲一下我的理解:
1.dao层,就是用于导入导出数据的,简单点来说我们要在里面写一些数据库的sql语句
2.model层,就是模型层,就是在里面写具体的实体类,再明白点就是你可以把你数据库里面的一个表看成一种类,几个表就建几个类。
3.util层,这个是工具层,你可以在里面写一些方法以便里面的使用,我后续也会进行讲解。
4.view层,这个就是视图层,你的窗口都写在这个里面,一般来说你的程序也会从这个里面的主界面开始运行。
5.至于image:这个就是用来存放你的一些图片方便调用
最后一点:一定要下载最后的那个引用的库,这边可以去网上找然后直接拖拽进去就好了,当然最后我也会将文件分享给大家,这个是数据库连接驱动,没下可连接不了哦。
代码环节:
数据库代码
首先先给大家一个数据库生成代码防止大家搞不出数据库:
下面没写创建数据库的语句,额就自己创建一下,数据库名称叫db_book,写错了代码可就跑不动了。
create table t_booktype
(
id int auto_increment
primary key,
bookTypeName varchar(20) null,
bookTpeDesc varchar(1000) null
);
create table t_book
(
id int auto_increment
primary key,
bookName varchar(20) not null,
author varchar(20) null,
sex varchar(10) null,
price float null,
bookTypeId int null,
bookDesc varchar(1000) null,
constraint t_book_t_booktype_id_fk
foreign key (bookTypeId) references t_booktype (id)
);
create table t_user
(
id int auto_increment
primary key,
username varchar(20) not null,
password varchar(20) not null
);
直接粘贴在你的数据库查询台里就行了,可以自己看看效果,数据不重要可以自己添加。
这个其实也不是很好讲,我就一个一个来了,先给大家看下整个代码的样子(如果大家最后发现字符集什么的不行导致乱码就建议直接粘贴代码跑一下比较好):
如果有需要特别注意的地方我会指出,其他的无脑复制即可。
1.BookDao.java
package com.java1234.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.text.html.HTMLDocument.HTMLReader.ParagraphAction;
import com.java1234.model.Book;
import com.java1234.util.Stringutil;
/**
* book添加和删除
* @author 46476
*
*/
public class BookDao {
/**
* 图书添加
* @param con
* @param book
* @return
* @throws Exception
*/
public int add(Connection con,Book book)throws Exception{
String sql="insert into t_book values(null,?,?,?,?,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, book.getBookName());
pstmt.setString(2, book.getAuthor());
pstmt.setString(3, book.getSex());
pstmt.setFloat(4, book.getPrice());
pstmt.setInt(5, book.getBookTypeId());
pstmt.setString(6, book.getBookTypeDesc());
return pstmt.executeUpdate();
}
/**
* 图书信息查询
* @param con
* @param book
* @return
* @throws Exception
*/
public ResultSet list(Connection con,Book book)throws Exception{
StringBuffer sb=new StringBuffer("select * from t_book b,t_bookType bt where b.bookTypeId=bt.id");
if(Stringutil.isNotEmpty(book.getBookName())) {
sb.append(" and b.bookName like '%"+book.getBookName()+"%'");
}
if(Stringutil.isNotEmpty(book.getAuthor())) {
sb.append(" and b.author like '%"+book.getAuthor()+"%'");
}
if(book.getBookTypeId()!=null&&book.getBookTypeId()!=-1) {
sb.append(" and b.bookTypeId="+book.getBookTypeId());
}
PreparedStatement pstmt=con.prepareStatement(sb.toString());
return pstmt.executeQuery();
}
/**
* 删除记录条数
* @param con
* @param id
* @return
* @throws Exception
*/
public int delete(Connection con,String id)throws Exception{
String sql="delete from t_book where id=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, id);
return pstmt.executeUpdate();
}
public int updata(Connection con,Book book)throws Exception {
String sql="update t_book set bookName=?,author=?,sex=?,price=?,bookTypeId=?,bookDesc=? where id=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, book.getBookName());
pstmt.setString(2, book.getAuthor());
pstmt.setString(3, book.getSex());
pstmt.setFloat(4, book.getPrice());
pstmt.setInt(5, book.getBookTypeId());
pstmt.setString(6, book.getBookTypeDesc());//这边之前写错了应该是bookDesc
pstmt.setInt(7, book.getId());
return pstmt.executeUpdate();
}
/**
* 指定图书类别下是否存在图书
* @param con
* @param bookTypeId
* @return
* @throws Exception
*/
public boolean existBook(Connection con,String bookTypeId)throws Exception {
String sql="select * from t_book where bookTypeId=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, bookTypeId);
ResultSet rs=pstmt.executeQuery();
return rs.next();
}
}
2.BookTypeDao.java
package com.java1234.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.java1234.model.BookType;
import com.java1234.util.Stringutil;
/**
* 图书类别dao类
* @author 46476
*
*/
public class BookTypeDao {
/**
* 图书类别添加
* @param con
* @param bookType
* @return
* @throws Exception
*/
public int add(Connection con,BookType bookType)throws Exception{
String sql="insert into t_bookType value(null,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, bookType.getBookTypeName());
pstmt.setString(2,bookType.getBookTypeDesc() );
return pstmt.executeUpdate();
}
/**
* 查询图书类别
* @param con
* @param bookType
* @return
* @throws Exception
*/
public ResultSet list(Connection con,BookType bookType)throws Exception{
StringBuffer sb=new StringBuffer("select * from t_bookType");
if(Stringutil.isNotEmpty(bookType.getBookTypeName())) {
sb.append(" and bookTypeName like '%"+bookType.getBookTypeName()+"%'");
}
PreparedStatement pstmt=con.prepareStatement(sb.toString().replaceFirst("and", "where"));
return pstmt.executeQuery();
}
/**
* 删除图书类别
* @param con
* @param id
* @return
* @throws Exception
*/
public int delete(Connection con,String id)throws Exception{
String sql="delete from t_bookType where id=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, id);
return pstmt.executeUpdate();
}
/**
* 跟新图书类别
* @param con
* @param bookType
* @return
* @throws Exception
*/
public int updata(Connection con,BookType bookType)throws Exception{
String sql="update t_bookType set bookTypeName=?,bookTpeDesc=? where id=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, bookType.getBookTypeName());
pstmt.setString(2, bookType.getBookTypeDesc());
pstmt.setInt(3, bookType.getId());
return pstmt.executeUpdate();
}
}
3.UserDao.java
package com.java1234.dao;
import java.nio.channels.SelectableChannel;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.java1234.model.User;
/**
* 用户dao类
* @author 46476
*
*/
public class UserDao {
public User login(Connection con,User user)throws Exception {
User resultUser=null;
String sql="select * from t_user where userName=? and password=?";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, user.getUserNameString());
pstmt.setString(2, user.getPasswordString());
ResultSet rs=pstmt.executeQuery();
if(rs.next()) {
resultUser=new User();
resultUser.setId(rs.getInt("id"));
resultUser.setUserNameString(rs.getString("userName"));
resultUser.setPasswordString(rs.getString("password"));
}
return resultUser;
}
}
4.Book.java
package com.java1234.model;
import java.sql.Connection;
import com.mysql.cj.protocol.a.NativeConstants.StringLengthDataType;
public class Book {
private int id;
private String bookName;
private String author;
private String sex;
private Float price;
private Integer bookTypeId;
private String bookTypeName;
private String bookTypeDesc;
public Book() {
super();
// TODO 自动生成的构造函数存根
}
public Book(int id, String bookName, String author, String sex, Float price, Integer bookTypeId,
String bookTypeDesc) {
super();
this.id = id;
this.bookName = bookName;
this.author = author;
this.sex = sex;
this.price = price;
this.bookTypeId = bookTypeId;
this.bookTypeDesc = bookTypeDesc;
}
public Book(String bookName, String author, Integer bookTypeId) {
super();
this.bookName = bookName;
this.author = author;
this.bookTypeId = bookTypeId;
}
public Book(String bookName, String author, String sex, Float price, Integer bookTypeId, String bookTypeDesc) {
super();
this.bookName = bookName;
this.author = author;
this.sex = sex;
this.price = price;
this.bookTypeId = bookTypeId;
this.bookTypeDesc = bookTypeDesc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
public Integer getBookTypeId() {
return bookTypeId;
}
public void setBookTypeId(Integer bookTypeId) {
this.bookTypeId = bookTypeId;
}
public String getBookTypeName() {
return bookTypeName;
}
public void setBookTypeName(String bookTypeName) {
this.bookTypeName = bookTypeName;
}
public String getBookTypeDesc() {
return bookTypeDesc;
}
public void setBookTypeDesc(String bookTypeDesc) {
this.bookTypeDesc = bookTypeDesc;
}
}
5.BookType.java
package com.java1234.model;
/**
* 图书类别实体
* @author 46476
*
*/
public class BookType {
private int id;//编号
private String bookTypeName;//图书类别名称
private String bookTypeDesc;//图书备注
public BookType() {
super();
}
public BookType(int id, String bookTypeName, String bookTypeDesc) {
super();
this.id = id;
this.bookTypeName = bookTypeName;
this.bookTypeDesc = bookTypeDesc;
}
public BookType(String bookTypeName,String bookTypeDesc) {
// TODO 自动生成的构造函数存根
this.bookTypeName=bookTypeName;
this.bookTypeDesc=bookTypeDesc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBookTypeName() {
return bookTypeName;
}
public void setBookTypeName(String bookTypeName) {
this.bookTypeName = bookTypeName;
}
public String getBookTypeDesc() {
return bookTypeDesc;
}
public void setBookTypeDesc(String bookTypeDesc) {
this.bookTypeDesc = bookTypeDesc;
}
public String toString() {
return this.bookTypeName;
}
}
6.User.java
package com.java1234.model;
/**
* 用户实体
* @author 46476
*
*/
public class User {
private int id;//编号
private String userNameString;//用户名
private String passwordString;//密码
public User() {
super();
}
public User(String userNameString, String passwordString) {
super();
this.userNameString = userNameString;
this.passwordString = passwordString;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserNameString() {
return userNameString;
}
public void setUserNameString(String userNameString) {
this.userNameString = userNameString;
}
public String getPasswordString() {
return passwordString;
}
public void setPasswordString(String passwordString) {
this.passwordString = passwordString;
}
}
7.DbUtil.java
这里注意啦!!!!!!!!!!!!!!!
这里面的用户名以及密码都是要填写自己的数据库用户名以及密码,也就是我打xxxx的地方。
package com.java1234.util;
import java.sql.Connection;
import java.sql.DriverManager;
/**
* 数据库工具类
* @author 46476
*
*/
public class DbUtil {
private String dbUrl="jdbc:mysql://localhost:3306/db_book?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8";//数据库地址
private String dbUserName="xxxxxx";//用户名
private String dbPassword="xxxxxxxx";//密码
private String jdbcNameString="com.mysql.cj.jdbc.Driver";//驱动名称
public Connection getCon()throws Exception{
Class.forName(jdbcNameString);
Connection con=DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
return con;
}
public void closeCon(Connection con)throws Exception{
if(con!=null)
con.close();
}
public static void main(String[] args) {
DbUtil dbUtil=new DbUtil();
try {
dbUtil.getCon();
System.out.println("数据库连接成功");
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
System.out.println("连接失败");
}
}
}
8.Stringutil.java
package com.java1234.util;
/**
* 字符串工具类
* @author 46476
*
*/
public class S