手写数据库连接池+Mybatis(1)

本文首先复习了注解、ORM、XML和属性文件等基础知识,然后通过实例展示了没有连接池时的性能问题,进而介绍了手写数据库连接池的原理和实现。接着,讨论了MyBatis的优缺点,解释了它作为半自动化ORM框架的角色。最后,详细阐述了MyBatis的初步使用步骤,包括导入jar包、编写XML文件、设置日志以及不同类型的查询操作。
摘要由CSDN通过智能技术生成

第一节、复习

(1)注解 :可以对程序进行一定的说明,这点跟注释相似,但是比注释多的是可以在程序运行时被其它程序读取(反射技术)
ORM: 对象关系映射 以@interface 注解名称
(2)XML : W3C中结构的标准,作用:用于存储和传输数据(会编写)
(3)DOM4J :用于解析xml文件 (实际上解析的意思,就是程序运行时,从xml文件中读取数据)(了解作用)
(4)属性文件 :以 .properties结尾的文件,使用Properties属性对象读取属性文件中的内容
使用属性文件和属性对象对JDBCUtil进行了封装(会使用)

第二节、手写数据库连接池

一、没有连接池的程序

编写一个JDBC的应用程序,使用多线程,体会一下效率问题
功能:查询

一共有3个客户端,每个客户端的一次请求内有3个查询操作(模拟的是批量操作)
每一个请求进来都需要创建一个Connection对象,一共是3个,每个请求内又有三次操作数据库的动作,又有3个,一共是九个连接对象

问题:大量的创建和销毁对象,所以性能低下

解决方案:使用连接池

数据库连接池原理图

二、手写数据库连接池


实体类

package com.bjsxt.entity;

/**
 * Dept类(实体类)
 */
public class Dept {
   
    private int deptno;
    private String dname;
    private String loc;

    public int getDeptno() {
   
        return deptno;
    }

    public void setDeptno(int deptno) {
   
        this.deptno = deptno;
    }

    public String getDname() {
   
        return dname;
    }

    public void setDname(String dname) {
   
        this.dname = dname;
    }

    public String getLoc() {
   
        return loc;
    }

    public void setLoc(String loc) {
   
        this.loc = loc;
    }

    public Dept(int deptno, String dname, String loc) {
   
        this.deptno = deptno;
        this.dname = dname;
        this.loc = loc;
    }

    public Dept() {
   
    }

    @Override
    public String toString() {
   
        return "Dept{" +
                "deptno=" + deptno +
                ", dname='" + dname + '\'' +
                ", loc='" + loc + '\'' +
                '}';
    }
}

手写连接池的类 (在该类中的获取连接和归还连接的方法)

package com.bjsxt.util;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.LinkedList;

/**
 *手写数据可连接池
 */
public class MyConnection {
   
    private static LinkedList<Connection> list=new LinkedList<>();
    static{
   
        for (int i = 0; i <5 ; i++) {
   
            Connection conn = JDBCUtil2.getConn();
            System.out.println("创建连接对象,并放入连接池中-->"+conn);
            list.add(conn);
        }
    }
    //
    public static Connection getConnection(){
   
        if(list.size()!=0){
   
            Connection connection = list.removeFirst();
            System.out.println("正在使用的连接是"+connection);
            return  connection;
        }else{
   
            //等于0说明池中的对象都在使用,需要重新创建
            Connection conn = JDBCUtil2.getConn();
            System.out.println("池中的连接对象不够使用了,所以我新创建的连接:"+conn);
            return  conn;
        }
    }

    //
    public static void returnConnection(Connection connection){
   
        try {
   
            if(null!=connection && !connection.isClosed()){
   
                if(list.size()<8){
   
                    System.out.println("池中未满,可以将连接对象归还"+connection);
                    list.add(connection);
                }else {
   
                    System.out.println("池中已满,需要关闭连接");
                    connection.close();
                }

            }
        } catch (SQLException e) {
   
            e.printStackTrace();
        }
    }
    /*
    public static void main(String[] args) {
        System.out.println();
    }
    */
}

JDBCUtil

package com.bjsxt.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

/**
 *使用属性文件封装JDBCUtil
 */
public class JDBCUtil2 {
   
    private static  String DRIVER ;
    private static  String URL;
    private static  String USERNAME ;
    private static  String PWD ;
    //static静态代码块,为类的静态变量赋值
    static{
   
        File file=new File("jdbc.properties");  //创建文件
        Properties properties = new Properties();  //创建属性对象
        if(!file.exists()){
     //如果文件不存在,创建
            //如果文件不存在,则需要初始化数据(数据库连接字符串的数据),默认连mysql数据库
            properties.setProperty("mysqlDriver","com.mysql.jdbc.Driver");
            properties.setProperty("mysqlURL","jdbc:mysql://localhost:3306/syl1105");
            properties.setProperty("mysqlUserName","root");
            properties.setProperty("mysqlPassWord&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值