数据库设计
数据库分析
1、 首先分析首页,需要每个商品的信息,还有商品类型的信息(冰淇淋系列,零食系列等等),同时,每个商品都有所属的信息(1 条幅 2 热销 3 新品)。
2、 在Mysql里面创建相关的数据库,关联外键。数据库的关系,一对一,一对多,多对多,如果多对多的关系的话,就需要一个中间表来实现。
数据库操作
1、 这个项目中关于数据库的操作使用DBUtils的QueryRunner做增删改查,c3p0做连接池跟数据库进行连接,得到DataSource,通过DataSource得到connection。
下面是需要的jar包,DBUtils和c3p0和数据库连接需要的支持
2、 为了后期的维护我们创建c3p0-config.xml的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认配置,只可以出现一次 -->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">
<![CDATA[jdbc:mysql://127.0.0.1:3306/cakeshop?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&&useSSL=true]]>
</property>
<property name="user">root</property>
<property name="password">123456</property>
</default-config>
</c3p0-config>
3、 下面是使用QueryRunner做增删改查的一些操作,有的是得到一条数据,有的是得到多条数据。
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class TestQueryRunner {
public static void main(String[] args) throws Exception {
DataSource ds=new ComboPooledDataSource();//创建使用c3p0的数据源
//QueryRunner r=new QueryRunner(ds);
Connection con=ds.getConnection();
QueryRunner r=new QueryRunner();
r.update(con,"delete from type where id = ?",2);
DbUtils.closeQuietly(con);
// QueryRunner r=new QueryRunner(ds);
// String sql="select * from goods where id = ?";
// Map<String,Object> map=r.query(sql, new MapHandler(),3);
// for(String key:map.keySet()) {
// System.out.println(key+":"+map.get(key));
// }
// 删除
// String sql="delete from type where id in(?,?)";
// int count=r.update(sql,6,7);
// System.out.println(count);
// 修改
// String sql="update type set name='恶搞系列' where id=?";
// int count=r.update(sql,8);
// System.out.println(count);
// 插入
// String sql="insert into type(name) values(?)";
// int count=r.update(sql,"成人系列");
// System.out.println(count);
// 查询一条记录
// String sql="select * from goods";
// Object[] res=r.query(sql, new ArrayHandler());
// for(Object o : res) {
// System.out.println(o);
// }
// 得到多条数据
// String sql="select * from goods";
// List<Object[]> list=r.query(sql, new ArrayListHandler());
// for(Object[] objs : list) {
// for(Object o : objs) {
// System.out.print(o+" ");
// }
// System.out.println();
// }
// BeanHandler将结果集组装成一个java类对象(这种方式也是一条数据)
// String sql="select * from goods";
// Goods goods = r.query(sql, new BeanHandler<Goods>(Goods.class));
// System.out.println(goods);
// String sql="select * from goods";
// List<Goods> list=r.query(sql, new BeanListHandler<Goods>(Goods.class));
// for(Goods g: list) {
// System.out.println(g);
// }
// 查询某一列
// String sql="select * from goods";
// List<Object> list=r.query(sql, new ColumnListHandler<Object>("name"));
// for(Object o: list) {
// System.out.println(o);
// }
// 统计
// String sql="select count(*) from goods";
// long count=r.query(sql, new ScalarHandler<Long>());
// System.out.println(count);
// String sql="select * from goods";
// Map<String,Object> map=r.query(sql, new MapHandler());
// for(String key : map.keySet()) {
// System.out.println(key+" "+map.get(key));
// }
String sql="select * from goods";
List<Map<String,Object>>list=r.query(sql, new MapListHandler());
for(Map<String,Object> map: list) {
for(String key: map.keySet()) {
System.out.print(key+" "+map.get(key)+" ");
}
System.out.println();
}
}
}
下面是Dao层的方法得到数据库里的商品信息:
这里的sql语句需要学习一下是怎么写出来的,这里的思路是,我们需要在页面上展示哪些信息,然后就之把这些信息查询出来即可。
sql=select g.id,g.name,g.cover,g.price,t.name typename from recommend r, goods g, type t where type=2 and r.goods_id=g.id and g.type_id=t.id;
package com.sikiedu.dao;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import com.sikiedu.utils.DBUtil;
public class GoodsDao {
//select g.id,g.name,g.cover,g.price,t.name typename from recommend r, goods g, type t where type=2 and r.goods_id=g.id and g.type_id=t.id;
public List<Map<String, Object>> getGoodsList(int recommendType) throws Exception {
QueryRunner r=new QueryRunner(DBUtil.getDataSource());
String sql="select g.id,g.name,g.cover,g.price,t.name typename from recommend r, goods g, type t where type=? and r.goods_id=g.id and g.type_id=t.id";
return r.query(sql, new MapListHandler(),recommendType);
}
public Map<String, Object> getScrollGoods() throws Exception {
QueryRunner r=new QueryRunner(DBUtil.getDataSource());
String sql="select g.id,g.name,g.cover,g.price from recommend r, goods g where type=1 and r.goods_id=g.id ";
return r.query(sql, new MapHandler());
}
}