2019.8.28 NIIT第四十三天 今天是个综合案例
软件开发流程
- 需求分析--软件需要实现什么功能
- 原型设计--设计页面--axure 墨刀
- 数据库设计--创建库--创建表--约束
- 项目框架搭建--使用分层思想
- 在开发工具IDEA中新建项目
- 加入需要的jar包
- 使用分层的思想
- dao层
- service层
- Test层
- 编码--coding
- 测试--循环修改
重点
如果出现操作需要执行多个SQL语句时,需要考虑是否需要用到事务 被放入到事务中的操作,在dao层需要将异常抛出到service层进行捕获 事务所用的Connection需要从ThreadLocal中获取 public static ThreadLocal local=new ThreadLocal<>();
案例代码
domain(Bean类)
package com.igeek.domain;
public class Product {
private int pid;
private String pname;
private int price;
private String flag;
private String category_id;
public Product(String pname, int price, String flag, String category_id) {
this.pname = pname;
this.price = price;
this.flag = flag;
this.category_id = category_id;
}
@Override
public String toString() {
return "Product{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", price=" + price +
", flag='" + flag + '\'' +
", category_id='" + category_id + '\'' +
'}';
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
public String getCategory_id() {
return category_id;
}
public void setCategory_id(String category_id) {
this.category_id = category_id;
}
public Product() {
}
public Product(int pid, String pname, int price, String flag, String category_id) {
this.pid = pid;
this.pname = pname;
this.price = price;
this.flag = flag;
this.category_id = category_id;
}
}
Utils工具类
package com.igeek.utils;
import com.alibaba.druid.pool.DruidDataSource;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCTools {
private static DruidDataSource dataSource;
public static ThreadLocal<Connection> local=new ThreadLocal<>();
//1.获取连接池
public static DataSource getDataSource(){
init();
return dataSource;
}
//2.获取连接
public static Connection getConnection(){
init();
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//3.关闭连接
public static void closeConn(Connection conn, Statement st){
try {
if(conn!=null){
if(st!=null){
st.close();
}
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//加载配置文件
public static void init(){
try {
//1.从属性文件中获取连接信息
Properties ps = new Properties();
ps.load(new FileInputStream("src/db.properties"));
dataSource = new DruidDataSource();
dataSource.setDriverClassName(ps.getProperty("driverClassName"));
dataSource.setUrl(ps.getProperty("url"));
dataSource.setUsername(ps.getProperty("username"));
dataSource.setPassword(ps.getProperty("password"));
dataSource.setMaxActive(Integer.parseInt(ps.getProperty("maxActive")));
dataSource.setMaxWait(Integer.parseInt(ps.getProperty("maxWait")));
dataSource.setInitialSize(Integer.parseInt(ps.getProperty("initialSize")));
}catch (Exception e){
e.printStackTrace();
}
}
}
Test层
package com.igeek.test;
import com.igeek.dao.ProductDao;
import com.igeek.domain.Product;
import com.igeek.service.ProdectService;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class TestProdect {
static ProdectService ps=new ProdectService();
public static void main(String[] args) {
while(true){
System.out.println("请输入操作命令:");
System.out.println("C:创建、U:修改、D:删除、DA:批量删除、I:通过id查询、FA:查询所有、Q:退出");
Scanner sr=new Scanner(System.in);
String code=sr.next().toUpperCase();
//根据命令判断操作
switch(code){
case "C":
addProduct();
break;
case "U":
//修改商品
editProduct();
break;
case "D":
//删除商品
deleteById();
break;
case "DA":
//批量删除
deleteAllProduct();
break;
case "I":
//通过id查询
selectById();
break;
case "FA":
//查询所有
findAll();
break;
case "Q":
System.out.println("操作结束");
System.exit(0);
break;
default:
System.out.println("输入错误请重新输入");
break;
}
}
}
private static void deleteAllProduct() {
System.out.println("进入批量删除模式");
List<Integer> list=new ArrayList<>();
Scanner sr6=new Scanner(System.in);
while(true){
System.out.println("请输入需要删除的商品ID,输入-1退出");
int pid=sr6.nextInt();
if(pid==-1){
break;
}else{
list.add(pid);
}
}
System.out.println("是否确认删除以上所有商品(Y/N)");
String flag=sr6.next();
if(flag.equalsIgnoreCase("Y")){
ps.deleteAll(list);
System.out.println("批量删除完成");
}
}
private static void findAll() {
List<Product> list=ps.findAll();
if(list!=null){
for (Product p:list){
System.out.println(p);
}
}else{
System.out.println("");
}
}
private static void selectById() {
System.out.println("请输入商品ID:");
Scanner sc4=new Scanner(System.in);
int pid=sc4.nextInt();
Product p=ps.findProductById(pid);
if(p!=null){
System.out.println(p);
}else{
System.out.println("未能找到该商品");
}
}
private static void deleteById() {
System.out.println("请输入商品ID:");
Scanner sc3=new Scanner(System.in);
int pid=sc3.nextInt();
Product p=ps.findProductById(pid);
if(p!=null){
//删除商品
System.out.println("是否确认删除Y/N");
String flag =sc3.next();
if(flag.equals("Y")){
ps.deleteProductById(pid);
System.out.println("删除成功");
}
}else{
System.out.println("商品不存在");
}
}
private static void editProduct() {
System.out.println("请输入商品ID:");
Scanner sc2=new Scanner(System.in);
int id=sc2.nextInt();
Product p=ps.findProductById(id);
if(p!=null){
//让用户输入商品信息进行修改
System.out.println("请输入产品名称");
String name=sc2.next();
System.out.println("请输入产品价格");
int price=sc2.nextInt();
p.setPname(name);
p.setPrice(price);
ps.editProduct(p);
System.out.println("修改成功");
}else{
System.out.println("该商品不存在");
}
}
private static void addProduct() {
Scanner sc1=new Scanner(System.in);
System.out.println("请输入产品名称");
String name=sc1.next();
System.out.println("请输入产品价格");
int price=sc1.nextInt();
Product p=new Product(name,price,"1","c004");
ps.addProdect(p);
System.out.println("添加成功");
}
}
Service层
package com.igeek.service;
import com.igeek.dao.ProductDao;
import com.igeek.domain.Product;
import com.igeek.utils.JDBCTools;
import org.apache.commons.dbutils.DbUtils;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public class ProdectService {
ProductDao dao=new ProductDao();
public void addProdect(Product p) {
dao.save(p);
}
public Product findProductById(int id) {
return dao.findById(id);
}
public void editProduct(Product p) {
dao.update(p);
}
public void deleteProductById(int pid) {
try {
dao.delete(pid);
} catch (SQLException e) {
e.printStackTrace();
}
}
public List<Product> findAll() {
return dao.findAll();
}
public void deleteAll(List<Integer> list) {
Connection conn=null;
try {
conn=JDBCTools.getConnection();
JDBCTools.local.set(conn);
conn.setAutoCommit(false);
for (Integer pid:list) {
dao.delete(pid);
}
DbUtils.commitAndClose(conn);
} catch (SQLException e) {
try {
DbUtils.rollbackAndClose(conn);
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}
}
dao层
package com.igeek.dao;
import com.igeek.domain.Product;
import com.igeek.utils.JDBCTools;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;
public class ProductDao {
QueryRunner qr=new QueryRunner(JDBCTools.getDataSource());
String sql="";
public void save(Product p) {
sql="insert into product values (?,?,?,?,?)";
try {
qr.update(sql,null,p.getPname(),p.getPrice(),p.getFlag(),p.getCategory_id());
} catch (SQLException e) {
e.printStackTrace();
}
}
public Product findById(int id) {
sql="select * from product where pid = ?";
try {
//不出异常返回结果对象
return qr.query(sql,new BeanHandler<>(Product.class),id);
} catch (SQLException e) {
e.printStackTrace();
}
//如果抛出异常则返回null
return null;
}
public void update(Product p) {
sql="update product set pname=?,price=?,flag=?,category_id=? where pid = ?";
try {
qr.update(sql,p.getPname(),p.getPrice(),p.getFlag(),p.getCategory_id(),p.getPid());
} catch (SQLException e) {
e.printStackTrace();
}
}
public void delete(int pid) throws SQLException {
sql="delete from product where pid=?";
qr.update(JDBCTools.local.get(),sql,pid);
}
public List<Product> findAll() {
sql="select * from product";
try {
return qr.query(sql,new BeanListHandler<>(Product.class));
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}