搭建过程
1.根据需求设计数据库
- 概念设计:使用ER图等工具设计数据库概念模型,明确实体、属性、关系。
- 逻辑设计:将概念模型转换为数据库表结构,确定主键、外键、索引等。
- 物理设计:根据数据库管理系统的特性进行物理存储设计,如文件组织、存储分配等(通常由数据库管理系统自动处理)。
- 编写SQL脚本:创建数据库、表、视图、存储过程等。
=========================================================================

=========================================================================
2.后端导入德鲁伊的proprities文件

=========================================================================
3.书写德鲁伊工具类简化后去datasouse
=========================================================================
public class druidUtils {
private static DataSource dataSource;
static {
Properties properties =new Properties();
try {
properties.load(druidUtils.class.getClassLoader().getResourceAsStream("JDBC_durid/druid.properties"));
dataSource= DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private druidUtils(){}//私有构造,防止外部实例化此类
public static Connection getConnection() throws SQLException {//获取链接模块
return dataSource.getConnection();
}
public static void close(Connection con, PreparedStatement pst){
if (con!=null){
try {
con.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
if (pst!=null){
try {
pst.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
public static DataSource getDataSource(){
return dataSource;
}
public static void close(Connection con, PreparedStatement pst, ResultSet rst) {
close(con,pst);
if (rst!=null){
try {
rst.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
}
=========================================================================
4.BaseDao接口设计
=========================================================================
package JDBC_durid;
import java.util.List;
public interface bookBaseDao {
public int select();//显示图书
public int update(book b);//更新操作
public int add(book b);//新增
public int deleat();//删除
public List<book> selectname();
public int brow();//借书
public int huan();//归还书
}
5.设计与数据库中存储对象相同的类
=========================================================================
6.设计BaseDao接口实现类
=========================================================================
public class bookBaseDaoImp implements bookBaseDao {
static Scanner scanner =new Scanner(System.in);
JdbcTemplate jdbcTemplate =null;
public bookBaseDaoImp(){
jdbcTemplate=new JdbcTemplate(druidUtils.getDataSource());
}
@Override
public int select() {
List<book> arr= jdbcTemplate.query("select count, bookname,author,price,type from book",new BeanPropertyRowMapper<book>(book.class));
for (book b:arr
) {
if (b.getCount()>0){
System.out.println("book{bookname = " + b.getBookname() + ", author = " + b.getAuthor() + ", price = " + b.getPrice() + ", type = " + b.getType()+" 还剩"+b.getCount()+"本书 }");
}else if (b.getCount()==0){
System.out.println("book{bookname = " + b.getBookname() + ", author = " + b.getAuthor() + ", price = " + b.getPrice() + ", type = " + b.getType()+" 已借阅! }");
}
}
return 0;
}
@Override
public int update(book b) {
jdbcTemplate.update("insert into book values (?,?,?,?,?)",b.getCount(), b.getBookname(),b.getAuthor(),b.getPrice(),b.getType());
return 1;
}
@Override
public int add(book b) {
return 0;
}
@Override
public int deleat() {
System.out.println("请输入删除图书的名称:");
String name =scanner.next();
jdbcTemplate.update("delete from book where bookname=?;",name);
return 1;
}
@Override
public List<book> selectname(){
System.out.println("请输入查询图书的名称:");
String name =scanner.next();
return jdbcTemplate.query("select * from book where bookname=? ",new BeanPropertyRowMapper<book>(book.class),name);
}
@Override
public int brow() {
String s =scanner.next();
List<book> arr= jdbcTemplate.query("select * from book where bookname=?",new BeanPropertyRowMapper<book>(book.class),s);
int count =arr.get(0).getCount();
if (count==0){
return 0;
}
else if (arr.get(0).getCount()>0){
System.out.println("已借阅!");
jdbcTemplate.update("update book set count = ? where bookname = ?",count-1,s);
}
return --count;
}
@Override
public int huan() {
String s =scanner.next();
List<book> arr= jdbcTemplate.query("select * from book where bookname=?",new BeanPropertyRowMapper<book>(book.class),s);
book b = arr.get(0);
int a = jdbcTemplate.update("update book set count = ? where bookname = ?",b.getCount()+1,s);
return b.getCount()+1;
}
}
7.设计前端交互
=========================================================================
public class choise {
static Scanner scanner =new Scanner(System.in);
static bookBaseDaoImp bookImpDao=null;
static {
bookImpDao= new bookBaseDaoImp();
}
public static void main(String[] args) {
System.out.println("请输入选择你的你的姓名:");
String user =scanner.next();
System.out.println("请输入选择你的身份:1-》管理员 , 2-》普通用户");
int num =scanner.nextInt();
if (num==2){
while (true){
if (usersystem(user)) break;
}
} else if (num==1) {
while (true){
if (managerSystem(user)) break;
}
}
}
private static boolean usersystem(String user) {
System.out.println("hello ,用户:"+ user +"欢迎来到图书小练习系统");
System.out.println("=====用户菜单=====");
System.out.println("1.查找图书");
System.out.println("2.借阅图书");
System.out.println("3.归还图书");
System.out.println("0.退出系统");
System.out.println("=====用户菜单=====");
System.out.println("请输入你的操作:");
int choise1= scanner.nextInt();
if (choise1==1){
List<book> arr= bookImpDao.selectname();
System.out.println(arr.get(0));
}
if (choise1==2){
System.out.println("请输入借阅图书的名称:");
int a = bookImpDao.brow();
System.out.println("此书还剩"+a+"本!");
}
if (choise1==3){
System.out.println("请输入归还图书的名称:");
System.out.println("已归还,书库中还剩"+bookImpDao.huan()+"本!");
}
if (choise1==0){
return true;
}
return false;
}
private static boolean managerSystem(String user) {
System.out.println("hello ,管理员:"+ user +"欢迎来到图书小练习系统");
System.out.println("=====管理员菜单=====");
System.out.println("1.查找图书");
System.out.println("2.新增图书");
System.out.println("3.删除图书");
System.out.println("4.显示图书");
System.out.println("0.退出系统");
System.out.println("=====管理员菜单=====");
System.out.println("请输入你的操作:");
int choise1= scanner.nextInt();
if (choise1==1){
List<book> arr= bookImpDao.selectname();
System.out.println(arr.get(0));
}
if (choise1==2){
book book1=new book();
System.out.println("请输入新增图书的数量:");
int count = scanner.nextInt();
book1.setCount(count);
System.out.println("请输入新增图书的名称:");
String name =scanner.next();
book1.setBookname(name);
System.out.println("请输入新增图书的作者:");
String auther =scanner.next();
book1.setAuthor(auther);
System.out.println("请输入新增图书的价格:");
int price = scanner.nextInt();
book1.setPrice(price);
System.out.println("请输入新增图书的种类:");
String type =scanner.next();
book1.setType(type);
int a = bookImpDao.update(book1);
System.out.println(a);
}
if (choise1==3){
bookImpDao.deleat();
}
if (choise1==4){
System.out.println("显示图书");
bookImpDao.select();
}
if (choise1==0){
return true;
}
return false;
}
}
总结:
1.需求分析一定要尽可能全面,不然后续的修改麻烦;
2.清晰的三层架构可以使我们有条理的连接数据库;
3.对于错误的分析尽可能少依赖AI,先自己检查问题!












![[Linux CMD] 查看系统资源 (持续更新中)](https://i-blog.csdnimg.cn/direct/c77dbc494ebb4944a6c2814fdef927f1.png)



