图书管理系统+数据库操作---java小项目

图书管理系统+数据库操作

在这里插入图片描述
1.架包的导入
在这里插入图片描述
这些是我基础时常用的架包,网上也容易找到
有需要的话也可以,评论留言
2、代码块`
Book.java
package cn.kgc.tangcco.book.entity;

import java.util.Date;

import cn.kgc.tangcco.book.common.Utils;
/**

  • 实体类
    */
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Book implements Comparable{
    private String bookid;
    private String bookname ;
    private String author;
    private double money;
    private String factory;
    private Date booktime;

    public String toString() {
    return “图书编号=” + bookid + “,书名=”+bookname +",作者="+author
    +",价格="+money+",出版社="+factory+",出版时间="+booktime;
    }
    @Override
    public int compareTo(Book o) {
    int n = this.getBooktime().compareTo(o.getBooktime());
    return n;
    }
    }`

ObjectFactory.java

package cn.kgc.tangcco.book.common;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * 创建对象的工厂类
 * @author dell
 *
 */
public class ObjectFactory {

	 private static Map<String ,Object> map=new ConcurrentHashMap<String, Object>();
	 //实列一个对象的方法  key别名
	 public static <T>T getInstance(String key) {
		  T obj=null;
		if (map.containsKey(key)) {
			obj = (T) map.get(key);
		} else {
			try {
				// 反射技术
				Class clazz = Class.forName(Constant.getURL(key));
				obj = (T) clazz.newInstance();
				map.put(key, obj);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		  return obj;
	  }
}

Constant.java

package cn.kgc.tangcco.book.common;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Constant {
public final static String FDAO="dao";
public final static String FSER="ser";
  //用xml技术存储类的路径
  private static Map<String,String> map=new HashMap<String, String>();
  //properties  存放数据库的基本信息
  static {
	  try {
	  SAXReader sax=new SAXReader();
	  Document doc=sax.read(new File("src/files/applicationContext.xml"));
	  Element root=doc.getRootElement();
	  List<Element> bs=root.elements();
	  for (Element element : bs) {
		String key=element.attributeValue("id");
		String value=element.attributeValue("class");
		map.put(key, value);
	  }
	  }catch(Exception e) {
		  e.printStackTrace();
	  }
  }
  //根据别名返回类的路径地址
  public static String getURL(String key) {
	  return map.get(key);
  }
}

DataSourceUtil.java

package cn.kgc.tangcco.book.common;
import java.sql.Connection;
import com.mchange.v2.c3p0.ComboPooledDataSource;
//数据源的配置
public class DateSourceUtil {
	private static ComboPooledDataSource ds = new ComboPooledDataSource("book");
	ThreadLocal< Connection> t = new ThreadLocal<Connection>();
	private Connection con;
	public static ComboPooledDataSource getDs() {
		return ds ;
	}
	public Connection getCon() {
		con = t.get();
		try {
			if(con==null) {
				con = ds.getConnection();
				t.set(con);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return con;
	}
}

Utils.java

package cn.kgc.tangcco.book.common;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 字符串和日期的转换
 * @author 10570
 *
 */

public class Utils {
     private static SimpleDateFormat fm=new SimpleDateFormat("yyyy-MM-dd");
     public static String DatetoString(Date date) {
    	 String value="";
    	 value=fm.format(date);
    	 return value;
     }
     
     public static Date StringtoDate(String value) {
    	 Date date=null;
    	 try {
			date=fm.parse(value);
		} catch (ParseException e) {
			e.printStackTrace();
		}
    	 return date;
     }
}

BookDaoImp.java

package cn.kgc.tangcco.book.dao.imp;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import cn.kgc.tangcco.book.common.DateSourceUtil;
import cn.kgc.tangcco.book.dao.BookDao;
import cn.kgc.tangcco.book.entity.Book;
/**
 * 数据操作层
 * @author 10570
 *map集合中要添加元素,删除元素,修改元素
 *查询是返回集合map或list
 */
public class BookDaoImp implements BookDao  {
	
	private QueryRunner qr;
	public BookDaoImp() {
		qr = new QueryRunner(DateSourceUtil.getDs());
	}
	@Override
	public List<Book> query(String sql, Object...objects){ 
		List<Book> list=new ArrayList<Book>();
		try {
			list = qr.query(sql, new BeanListHandler<Book>(Book.class), objects);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	    return list;
	}
	//查询,返回一个集合
	@Override
	public Book select(String sql,Object...objects){
		Book Book=null;
		try {
			Book = qr.query(sql, new BeanHandler<Book>(Book.class), objects);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	    return Book;
	}
	//更新
	@Override
	public int modify(String sql,Object...objects) {
		int i=0;
		try {
			i=qr.update(sql,objects);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return i;
	}
}

BookDao.java

package cn.kgc.tangcco.book.dao;
import java.util.List;
import cn.kgc.tangcco.book.entity.Book;
public interface BookDao {
	//查询所有图书
	public List<Book> query(String sql, Object...objects);
	
	//查询,返回一个集合
	public Book select(String sql,Object...objects);
	
	//更新数据库
	public int modify(String sql,Object...objects);
}

BookServiceImp.java

package cn.kgc.tangcco.book.service.imp;

import java.util.ArrayList;
import java.util.List;
import cn.kgc.tangcco.book.common.Constant;
import cn.kgc.tangcco.book.common.ObjectFactory;
import cn.kgc.tangcco.book.common.Utils;
import cn.kgc.tangcco.book.dao.BookDao;
import cn.kgc.tangcco.book.entity.Book;
import cn.kgc.tangcco.book.service.BookService;
/**|
 * 业务实现类
 *  * @author 10570
 *
 */
public class BookServiceImp implements BookService {
	BookDao bookdao = ObjectFactory.getInstance(Constant.FDAO);
	   /**
	    * 查询业务
	    */
		@Override
		public List<Book> query(){
			String sql="select * from book order by booktime";
			return bookdao.query(sql);
		}
		
		/**
		 * 有条件查询
		 */
		@Override
		public List<Book> select(String bookname,String author){
			String sql="select * from book where bookname=? or author=? ";
			return bookdao.query(sql,bookname,author);
		}
		
		
		/**
		 * 添加业务
		 */
		@Override
		public String add(Book book) {
			String sql="insert into book values(?,?,?,?,?,?)";
			int i=bookdao.modify(sql,book.getBookid(),book.getBookname(),book.getAuthor(),book.getMoney(),book.getFactory(),Utils.DatetoString(book.getBooktime()) );
		    String message=i>0?"添加成功":"添加失败";
		    return message;
		}

}

BookService.java

package cn.kgc.tangcco.book.service;
import java.util.List;
import cn.kgc.tangcco.book.entity.Book;
public interface BookService {

	/**
	* 查询业务
	*/
	List<Book> query();

	/**
	 * 有条件查询
	 */
	List<Book> select(String bookname, String author);

	/**
	 * 添加业务
	 */
	String add(Book book);

}

BookManager.java

package cn.kgc.tangcco.book.service;
import java.util.List;
import cn.kgc.tangcco.book.entity.Book;
public interface BookService {

	/**
	* 查询业务
	*/
	List<Book> query();

	/**
	 * 有条件查询
	 */
	List<Book> select(String bookname, String author);

	/**
	 * 添加业务
	 */
	String add(Book book);

}

TestDemo.java

package cn.kgc.tangcco.book.test;

import cn.kgc.tangcco.book.manager.BookManager;

public class TestDemo {
	public static void main(String[] args) {
		BookManager bm = new BookManager();
		bm.menu();
	}
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans>
  <bean id="dao" class="cn.kgc.tangcco.book.dao.imp.BookDaoImp">
  </bean>
  <bean id="ser" class="cn.kgc.tangcco.book.service.imp.BookServiceImp">
  </bean>
</beans>

c3p0的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>	
<!-- 默认配置,当使用ComboPooledDataSource无参构造器时,使用的就是这个配置 -->
	<default-config>		
	<!-- 基本配置 -->		
	        <property name="jdbcUrl">jdbc:mysql://localhost:3306/book</property>
			<property name="driverClass">com.mysql.jdbc.Driver</property>		
			<property name="user">用户名</property>		
			<property name="password">密码</property>		
			<!-- 每次增量,当需要创建Connection对象时,一次创建几个 -->		
			<property name="acquireIncrement">5</property>		
			<!-- 当创建池对象后,池中应该有几个Connection对象 -->		
			<property name="initialPoolSize">10</property>		
			<!-- 池中最少Connection个数,如果少于这个值,就会创建Connection -->		
			<property name="minPoolSize">2</property>		
			<!-- 池中最大连接个数 -->		
			<property name="maxPoolSize">50</property>	
	</default-config>	
<!-- 命名配置,new ComboPooledDataSource("tangcco")时,使用的就是这个配置 -->	
	<named-config name="book">		
			<property name="jdbcUrl">jdbc:mysql://localhost:3306/book</property>		
			<property name="driverClass">com.mysql.jdbc.Driver</property>		
			<property name="user">用户名</property>		
			<property name="password">密码</property>		
			<property name="acquireIncrement">3</property>		
			<property name="initialPoolSize">10</property>		
			<property name="minPoolSize">2</property>		
			<property name="maxPoolSize">10</property>	
	</named-config>
</c3p0-config>

操作的时候,数据库中要创建好数据库,并在数据库的表中添加一些书目的数据;不然会连接数据库失败。

如有其他问题,欢迎留言

原创文章 28 获赞 41 访问量 1042

猜你喜欢

转载自blog.csdn.net/wenquan19960602/article/details/103637332