图书管理系统+数据库操作
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>
操作的时候,数据库中要创建好数据库,并在数据库的表中添加一些书目的数据;不然会连接数据库失败。