• jdbc


    批更新(BatchUpdate)

     核心:PreparedStatement

    • 1.将绑定的参试,缓存在java本地
      • pstm.addBatch()
    • 2.将缓存在java本地的多组参数,一次性发给Oracle
      • pstm.executeBatch()
    • for(int i=0;i<100000;i++) { pstm.setInt(1, 113); pstm.setString(2,"老华"); pstm.setInt(3,1); pstm.setInt(4,18); pstm.setString(5, "456789"); pstm.setString(6,"123@qq.com"); pstm.addBatch(); if(i%500==0) { pstm.executeUpdate(); } }

    工具封装

    properties作用:加载properties配置文件中的内容,读取到properties对象内部

    • 1.load(输入流);//根据文件输入流给定的文件,加载到properties对象中
    • 2.getProperty(“key”);//根据key 获得value
    1.创建Propertie锁对象
    Properties props = new Properties();
    2.输入流,通过load方法加载配置文件信息 InputStream is
    = 类名.class.getResourceAsStream("相对路径 ");//从src下开始 props.load(is); Class.forName(props.getProperty("名称"));
    conn = DriveManager.getConnection(props.getProperty("url"),props.getProperty("user"),props.getProperty("pws");

     静态封装

     1 public class Test3{
     2      private static final Properties props = new Properties();
     3      static {
     4                InpuStream is = null;
     5                is = JdbcUtil3.class.getResourceAsStream("/**/***/**/**/jdbc.properties");
     6                props.load(is);
     7     }
     8                is.close();
     9                    
    10 }

      

    ORM模型设计

    • ORM:将数据库中的一行数据映射成一个java对象,【对象-----表行数据】
    • ORM类设计原则: 对象-----一行数据

    Entity实体对象

    public class 表名 implements Serializable{
              private Integer   id ;//id列
              private String     name;
              private Integer   sex;
              private String     ;
              //要求:提供get/set方法
              //建议:提供无参构造方法,有参构造方法
    }

    DAO模型设计

      

     Service设计模式:

    •  1.一张表
    • 2.书写实体
    public class 表名 implements Serializable{
        private String id ;
        ..
        ..
        ..
       //有参  无参构造方法
       //get   set  方法
    }

    java代码表示一条数据

    • 3.书写DAO
     public calss  UserDAO{
      public User selectByUsername(String username){   
        Connection conn = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        try{
              1.获得链接conn
              2.准备好sql,创建pstm
              3.绑定参数
              4.发送参数,执行sql
              5.处理结果集
        }catch(Exception e){
               throw new RuntimeException("xxxx",e);
        }finally{
               6.释放资源
                JdbcUtil.close(rs,pstm,null);//不关闭conn
        } 
       }
    }
    • 4.书写Service

    登陆功能(方法)的实现

    public class UserService {
        //登录:用户输入username和password,验证是否能够登录成功
        public boolean login(String username,String password) {
            Connection conn = null;
            try {
                //0.开启事务,设置事务提交为手动
                conn = JdbcUtil.getConnection();
                conn.setAutoCommit(false);
                //1.判断username是否存在
                UserDAO userDAO = new UserDAO();
                User user = userDAO.selectByUsername(username);
                if(user == null) 
                    return false;
                //2.判断password是否正确    
                if(!password.equals(user.getPassword()))
                    return false;
                //提交事务  commit
                conn.commit();
            } catch (Exception e) {
                //回滚事务 rollback
                conn.rollback();
                throw new RunTimeException("登录异常",e);
            }finally {
                //关闭conn
                JdbcUtil.close(null,null,conn);
            }
            //3.登录成功
            return true;
        }
    }

    JDBC控制事务

    核心思想:

    • 1.一个功能对应service的一个方法
    • 2.service一个方法就是不可分割的执行单元
    • 3.service每个方法的代码都要放在事务控制之内

    Connection事务相关方法:

    • setAutoCommit(false)   开启事务   将事务控制设置为手动提交
    • commit()  提交
    • rollback() 回滚

    模板:

    public class XxxService{
        public void 功能方法(){
          try{
                //1.开启事务
                业务操作+DAO调用
                //2.提交事务   commit  
          }catch(Exception e){
                //3.回滚操作,rollback
         }finally{
         //关闭conn(dao不能关闭conn)
        
    } } }

    事务控制问题

    • service和dao使用的不是同一个链接
    • 将service的conn通过dao的方法,传递给dao
    • dao接受service的conn
    • dao不能关闭conn
    • service最后要关闭conn 
    • 缺点是代码污染

     ThreadLocal:

    作用:操作当前线程内部一块存储空间(属性)

    借助当前线程Thread共享(传递)数据

    创建:new ThreadLocal<泛型>();

    • 1.threadLocal.set(值);将数据存入当前线程
    • 2.threadLocal.get();从当前线程中获取值
    • 3.threadLocal.remove();从当前线程中移除值

     

     编码步骤:

    •  1.导入jar   导入工具类   导入配置文件

    • 2.表

    • 3.实体

    • 4.开发UserDAO    接口:XxxDAO

    • 5.开发UserDAO    实现类:XxxDAOImpl

    • 6.开发UserService   接口:XxxService

    • 7.开发UserService   实现类:XxxServiceImpl

    • 8.开发View

      

  • 相关阅读:
    Redisson 实现分布式锁原理分析
    redis如何避免释放锁时把别人的锁释放掉
    记一次org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only异常
    1.编译chromium
    Win10更新后wireshark无法获取网络接口
    ASIO库使用注意事项
    使用gdb添加断点的几种方式
    select、poll、epoll的比较
    CMakeLists.txt编写常用命令
    Ubuntu下使用linuxdeployqt打包Qt程序
  • 原文地址:https://www.cnblogs.com/lhl0131/p/12565578.html
Copyright © 2020-2023  润新知