zoukankan      html  css  js  c++  java
  • java学习笔记之分层增删改查

    增删改查

    一.准备jar包

      数据库驱动包

      DBUtils包

      C3P0连接池 的jar包

    二.配置好C3P0的配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <c3p0-config>
     3     <!-- 默认配置 -->
     4     <default-config>
     5         <property name="driverClass">com.mysql.jdbc.Driver</property>
     6         <property name="jdbcUrl">jdbc:mysql:///day26</property>
     7         <property name="user">root</property>
     8         <property name="password">root</property>
     9         
    10         <property name="automaticTestTable">con_test</property>
    11         <property name="checkoutTimeout">30000</property>
    12         <property name="idleConnectionTestPeriod">30</property>
    13         <property name="initialPoolSize">10</property>
    14         <property name="maxIdleTime">30</property>
    15         <property name="maxPoolSize">100</property>
    16         <property name="minPoolSize">10</property>
    17         <property name="maxStatements">200</property>
    18         <user-overrides user="test-user">
    19             <property name="maxPoolSize">10</property>
    20             <property name="minPoolSize">1</property>
    21             <property name="maxStatements">0</property>
    22         </user-overrides>
    23     </default-config> <!-- This app is massive! -->
    24     <!-- 命名的配置 -->
    25     <named-config name="my">
    26         <property name="acquireIncrement">50</property>
    27         <property name="initialPoolSize">100</property>
    28         <property name="minPoolSize">50</property>
    29         <property name="maxPoolSize">1000</property> <!-- intergalactoApp adopts a different approach to configuring statement 
    30             caching -->
    31         <property name="maxStatements">0</property>
    32         <property name="maxStatementsPerConnection">5</property> <!-- he's important, but there's only one of him -->
    33         <user-overrides user="master-of-the-universe">
    34             <property name="acquireIncrement">1</property>
    35             <property name="initialPoolSize">1</property>
    36             <property name="minPoolSize">1</property>
    37             <property name="maxPoolSize">5</property>
    38             <property name="maxStatementsPerConnection">50</property>
    39         </user-overrides>
    40     </named-config>
    41 </c3p0-config>

     三.准备好工具类

      ThreadLocal工具类:

     1 import java.sql.Connection;
     2 import java.sql.SQLException;
     3 
     4 public class ConnectionManager {
     5     private  static ThreadLocal<Connection> tl=new ThreadLocal<>();
     6     public static Connection getConnection() throws SQLException{
     7         Connection  con=tl.get();
     8         if(con==null){
     9             con=MyC3P0Utils.getConnection();
    10             tl.set(con);
    11         }
    12         return con;
    13     }
    14     //开启事务
    15     public static void begin() throws SQLException{
    16         getConnection().setAutoCommit(false);
    17     }
    18     //提交事务
    19     public static void commit() throws SQLException{
    20         getConnection().commit();
    21     }
    22     //回滚事务
    23     
    24     public static void rollback() throws SQLException{
    25         getConnection().rollback();
    26     }
    27     //关闭资源
    28     public static void close() throws SQLException{
    29         getConnection().close();
    30     }
    31     
    32 }

    C3P0:

     1 import java.sql.Connection;
     2 import java.sql.SQLException;
     3 import javax.sql.DataSource;
     4 import com.mchange.v2.c3p0.ComboPooledDataSource;
     5 public class MyC3P0Utils {
     6     private static DataSource dataSource=new ComboPooledDataSource();
     7     public static DataSource getDataSource(){
     8         return dataSource;
     9     }
    10     public static Connection getConnection() throws SQLException{
    11         return dataSource.getConnection();
    12     }
    13 
    14 }

    四.Dao层代码:

     1 public class ProductDao {
     2     /**
     3      * 查询所有数据
     4      * @return  Product泛型的List集合
     5      * @throws SQLException
     6      */
     7     public List<Products> findAll() throws SQLException{
     8         QueryRunner qr = new QueryRunner(MyC3P0Utils.getDataSource());
     9         List<Products> list = qr.query("select * from products",new BeanListHandler<>(Products.class));
    10         return list;
    11     }
    12     /**
    13      * 通过id查找数据
    14      * @param id
    15      * @return
    16      * @throws SQLException
    17      */
    18     public Products findById(int id) throws SQLException{
    19         QueryRunner qr = new QueryRunner(MyC3P0Utils.getDataSource());
    20         Products product = qr.query("select * from products where pid=?",new BeanHandler<>(Products.class),id);
    21         return product;
    22     }
    23     /**
    24      * 插入数据
    25      * @param products  products类型的对象
    26      * @return  影响行数
    27      * @throws SQLException
    28      */
    29     public int  insertData(Products products) throws SQLException{
    30         QueryRunner qr = new QueryRunner(MyC3P0Utils.getDataSource());
    31         Object[] objects={products.getPname(),products.getPrice(),products.getCategory_id()};
    32         int re = qr.update("insert into products values(null,?,?,?)",objects);
    33         return re;
    34     }
    35     /**
    36      * 修改数据
    37      * @param products
    38      * @return 影响的行数
    39      * @throws SQLException
    40      */
    41     public int updateData(Products products) throws SQLException{
    42         QueryRunner qr = new QueryRunner(MyC3P0Utils.getDataSource());
    43         Object[] objects={products.getPname(),products.getPrice(),products.getCategory_id(),products.getPid()};
    44         int re = qr.update("update products set pname= ? ,price=? ,category_id=? where pid=?",objects);
    45         return re;
    46     }
    47     /**
    48      * 通过i删除产品
    49      * @param pid 产品id
    50      * @return  受影响的行数
    51      * @throws SQLException
    52      */
    53     public int deleteData(int pid) throws SQLException{
    54         QueryRunner qr = new QueryRunner();
    55         int re = qr.update(ConnectionManager.getConnection(),"delete from products where pid =?",pid);
    56         return re;
    57     }
    58 
    59 }

    五.Service层代码:

      1 public class ProductService {
      2     /**
      3      *查询所有
      4      * @return
      5      */
      6     public List<Products> findAll(){
      7         ProductDao productDao=new ProductDao();
      8         List<Products> list =null;
      9         try {
     10             list = productDao.findAll();
     11         } catch (SQLException e) {
     12             // TODO Auto-generated catch block
     13             e.printStackTrace();
     14         }
     15         return list;
     16     }
     17     /**
     18      * 通过id 查询数据
     19      * @param id
     20      * @return
     21      */
     22     public Products findById(int id){
     23         ProductDao productDao=new ProductDao();
     24         Products product=null;
     25         try {
     26              product = productDao.findById(id);
     27         } catch (SQLException e) {
     28             // TODO Auto-generated catch block
     29             e.printStackTrace();
     30         }
     31         return product;
     32         
     33     }
     34     /**
     35      * 插入数据
     36      * @param products
     37      * @return
     38      */
     39     public int insertData(Products products){
     40         ProductDao productDao=new ProductDao();
     41         int re=-1;
     42         try {
     43             re = productDao.insertData(products);
     44         } catch (SQLException e) {
     45             // TODO Auto-generated catch block
     46             e.printStackTrace();
     47         }
     48         return re;
     49     }
     50     /**
     51      * 修改数据
     52      * @param products
     53      * @return
     54      */
     55     public int updateData(Products products){
     56         ProductDao productDao=new ProductDao();
     57         int re=-1;
     58         try {
     59             re = productDao.updateData(products);
     60         } catch (SQLException e) {
     61             // TODO Auto-generated catch block
     62             e.printStackTrace();
     63         }
     64         return re;
     65         
     66     }
     67     /**
     68      * 通过pid删除数据
     69      * @param pid
     70      * @return
     71      */
     72     public int deleteData(int pid){
     73         ProductDao productDao=new ProductDao();
     74         int re= -1;
     75         try {
     76             re = productDao.deleteData(pid);
     77         } catch (SQLException e) {
     78             // TODO Auto-generated catch block
     79             e.printStackTrace();
     80         }
     81         return re;
     82     }
     83     
     84     public boolean deleteAll(HashSet<Integer> set){
     85         ProductDao productDao=new ProductDao();
     86         boolean flag=true;
     87         try {
     88             ConnectionManager.begin();
     89             for (Integer pid : set) {
     90         
     91                 int re = productDao.deleteData(pid);
     92                 
     93                 if(!(re>0)){
     94                     flag=false;
     95                     break;
     96                 }
     97             }
     98             if(flag){
     99                 ConnectionManager.commit();
    100                 return true;
    101             }else{
    102                 ConnectionManager.rollback();
    103                 return false;
    104             }
    105         } catch (SQLException e) {
    106                 // TODO Auto-generated catch block
    107             
    108             try {
    109                 ConnectionManager.rollback();
    110             } catch (SQLException e1) {
    111                 // TODO Auto-generated catch block
    112                 e1.printStackTrace();
    113             }
    114         }finally{
    115             try {
    116                 ConnectionManager.close();
    117             } catch (SQLException e) {
    118                 // TODO Auto-generated catch block
    119                 e.printStackTrace();
    120             }
    121         }
    122         return false;
    123     }
    124     
    125 
    126 }

    六 web层代码:

      1 public class ProductWeb {
      2     public static void main(String[] args) {
      3         Scanner scanner=new Scanner(System.in);
      4         while(true){
      5             System.out.println("请输入你的选择:");
      6             System.out.println("I:插入、U:修改、D:删除、DA:批量删除、QI:根据id查询、FA:查询所有、Q:退出");
      7             String string=scanner.nextLine().toUpperCase();
      8             
      9             switch (string) {
     10                 case "I":
     11                     insertData(scanner);
     12                     break;
     13                 case "U":
     14                     updateDate(scanner);
     15                     break;
     16                 case "D":
     17                     deleteData(scanner);
     18                     break;
     19                 case "DA":
     20                     deleteAll(scanner);
     21                     break;
     22                 case "QI":
     23                     findById(scanner);
     24                     break;
     25                 case "FA":
     26                     //查询所有
     27                     findAll();
     28                     break;
     29                 case "Q":
     30                     System.out.println("是否要退出?(y/n)");
     31                     String s1 = scanner.nextLine();
     32                     if("y".equalsIgnoreCase(s1)){
     33                         System.exit(0);
     34                     }
     35                     break;
     36                 default:
     37                     break;
     38             }
     39             
     40         
     41         }
     42         
     43     }
     44     /**
     45      * 批量删除
     46      * @param scanner
     47      */
     48     private static void deleteAll(Scanner scanner) {
     49         // TODO Auto-generated method stub
     50         HashSet<Integer> set =new HashSet<>();
     51         ProductService productService=new ProductService();
     52         String regex="[1-9]([0-9]*)";
     53         while(true){
     54             System.out.println("请输入删除产品pid(输入-1停止)");
     55         /*    String str=scanner.nextLine();
     56             if(!str.matches(regex)){
     57                 System.out.println("不符合规则");
     58                 continue;
     59             }
     60             int pid = Integer.parseInt(str);*/
     61             int pid =Integer.parseInt(scanner.nextLine());
     62             if(pid==-1){
     63                 break;
     64             }
     65             Products product = productService.findById(pid);
     66             if(product==null){
     67                 System.out.println("没有该条数据");
     68                 continue;
     69             }
     70             System.out.println(product);
     71             set.add(pid);
     72         }
     73         System.out.println("你要删除的数据条数是"+set.size());
     74         System.out.println("请确认是否要删除?(y/n)");
     75         String choice = scanner.nextLine();
     76         if("y".equalsIgnoreCase(choice)){
     77             boolean flag = productService.deleteAll(set);
     78             if(flag){
     79                 System.out.println("删除成功");
     80             }else {
     81                 System.out.println("删除失败");
     82             }
     83         }
     84         
     85     }
     86     /**
     87      * 通过id删除
     88      * @param scanner
     89      */
     90     private static void deleteData(Scanner scanner) {
     91         // TODO Auto-generated method stub
     92         System.out.println("请输入要删除产品的id");
     93         String regex="[1-9]([0-9]*)";
     94         String str1 = scanner.nextLine();
     95         if(!str1.matches(regex)){
     96             System.out.println("输入格式不符合");
     97             return;
     98         }
     99         int pid = Integer.parseInt(str1);
    100         ProductService productService=new ProductService();
    101         Products product = productService.findById(pid);
    102         if(product==null){
    103             System.out.println("没有数据");
    104             return;
    105         }
    106         System.out.println("你要删除的产品数据是,确定要删除吗?(y/n)");
    107         System.out.println(product);
    108         String choice = scanner.nextLine();
    109         if(!"y".equalsIgnoreCase(choice)){
    110             System.out.println("输入有误,返回菜单");
    111             return;
    112         }
    113         int re = productService.deleteData(pid);
    114         if(re>0){
    115             System.out.println("删除成功");
    116         }else {
    117             System.out.println("删除失败");
    118         }
    119     }
    120     /**
    121      * 修改产品
    122      * @param scanner
    123      */
    124     private static void updateDate(Scanner scanner) {
    125         // TODO Auto-generated method stub
    126         System.out.println("请输入要修改产品的pid");
    127         String regex="[1-9]([0-9]*)";
    128         String str = scanner.nextLine();
    129         if(!str.matches(regex)){
    130             System.out.println("格式不正确");
    131             return ;
    132         }
    133         int pid = Integer.parseInt(str);
    134         ProductService productService=new ProductService();
    135         Products product = productService.findById(pid);
    136         if(product==null){
    137             System.out.println("没有数据");
    138             return;
    139         }
    140         System.out.println("请输入新的名字");
    141         String pname=scanner.nextLine();
    142         System.out.println("请输入新的价格");
    143         double price = Double.parseDouble(scanner.nextLine());
    144         System.out.println("请输入类别,(1是电子,2是服装,3是化妆品)");
    145         int category_id = Integer.parseInt(scanner.next());
    146         product.setCategory_id(category_id);
    147         product.setPname(pname);
    148         product.setPrice(price);
    149         int re = productService.updateData(product);
    150         if(re>0){
    151             System.out.println("修改成功");
    152         }else{
    153             System.out.println("修改失败");
    154         }
    155     }
    156     /**
    157      * 插入数据
    158      * @param scanner
    159      */
    160     private static void insertData(Scanner scanner) {
    161         System.out.println("请输入产品名称");
    162         String pname = scanner.nextLine();
    163         System.out.println("请输入价格");
    164         double price = Double.parseDouble(scanner.nextLine());
    165         System.out.println("请输入类别,(1是电子,2是服装,3是化妆品)");
    166         int cate = Integer.parseInt(scanner.next());
    167         ProductService productService=new ProductService();
    168         Products products=new Products();
    169         products.setPname(pname);
    170         products.setPrice(price);
    171         products.setCategory_id(cate);
    172         int re = productService.insertData(products);
    173         if(re>0){
    174             System.out.println("插入成功");
    175         }
    176     }
    177     /**
    178      * 通过id 查询数据
    179      * @param scanner
    180      */
    181     private static void findById(Scanner scanner) {
    182         // TODO Auto-generated method stub
    183         System.out.println("请输入要查询的pid");
    184         
    185         String regex="[1-9]([0-9]*)";
    186         String str = scanner.nextLine();
    187         if(!str.matches(regex)){
    188             System.out.println("输入格式不符合");
    189             return;
    190         }
    191         int pid = Integer.parseInt(str);
    192         ProductService productService=new ProductService();
    193         Products product = productService.findById(pid);
    194         if(product==null){
    195             System.out.println("没有数据");
    196             return;
    197         }
    198         System.out.println(product);
    199     }
    200     /**
    201      * 查询所有
    202      */
    203     private static void findAll() {
    204         ProductService productService=new ProductService();
    205         List<Products> list = productService.findAll();
    206         if(list==null){
    207             System.out.println("查询出错");
    208             return; 
    209         }
    210         if(list.size()==0){
    211             System.out.println("没有数据");
    212             return;
    213         }
    214         for (Products products : list) {
    215             System.out.println(products.getPid()+"	"+products.getPname()+"	"+products.getPrice()+"	"+products.getCategory_id());
    216         }
    217     }
    218 }

    七.javaBean类

     1 public class Products {
     2     private Integer pid;
     3     private String pname;
     4     private double price ;
     5     private int category_id;
     6     public Integer getPid() {
     7         return pid;
     8     }
     9     public void setPid(Integer pid) {
    10         this.pid = pid;
    11     }
    12     public String getPname() {
    13         return pname;
    14     }
    15     public void setPname(String pname) {
    16         this.pname = pname;
    17     }
    18     public double getPrice() {
    19         return price;
    20     }
    21     public void setPrice(double price) {
    22         this.price = price;
    23     }
    24     public int getCategory_id() {
    25         return category_id;
    26     }
    27     public void setCategory_id(Integer category_id) {
    28         this.category_id = category_id;
    29     }
    30     public Products(Integer pid, String pname, double price, int category_id) {
    31         super();
    32         this.pid = pid;
    33         this.pname = pname;
    34         this.price = price;
    35         this.category_id = category_id;
    36     }
    37     @Override
    38     public String toString() {
    39         return "Products [pid=" + pid + ", pname=" + pname + ", price=" + price + ", category_id=" + category_id + "]";
    40     }
    41     public Products() {
    42         super();
    43         // TODO Auto-generated constructor stub
    44     }
    45 
    46 }
  • 相关阅读:
    LeetCode题目(python)
    解决:centos配置ssh免密码登录后仍要输入密码
    解决 find: 路径必须在表达式之前:
    --解决Lock wait timeout exceeded; try restarting transaction
    Linux文件删除,但是df之后磁盘空间没有释放
    定位class时空格注意
    解决jenkins的Console Output中文乱码
    CPU飙升问题排查
    JVM笔记
    List集合的使用
  • 原文地址:https://www.cnblogs.com/xuzhaocai/p/8215730.html
Copyright © 2011-2022 走看看