JDBC-DBCP-MYBATIS基本使用

1.JDBC(Java DataBase Connectivity)

JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。从他的全称来看,翻译过来就是Java数据库连接。
为什么使用JDBC?
当我们使用JDBC语言时,我们可能需要连接到各种数据库,如MySQL、orcal等。如果没有JDBC,我们可能需要为每个数据库学习一套API。在使用了JDBC之后,各个数据库厂商都声明了根据Java中的方法编写方法的实现。对于Java程序员来说,他们只需要掌握一组JDBC方法就可以访问各种数据库。[en]When we use the JDBC language, we may need to connect to a variety of databases, such as Mysql,Orcal, etc. Without JDBC, we may need to learn a set of api for each database. After using JDBC, various database manufacturers declare the implementation of writing methods according to the methods in Java. For Java programmers, they only need to master a set of JDBC methods to access various databases.
如何去使用?(Mysql为例)

  1. 创建一个简单的maven工程
  2. 在pom.xml中添加Mysql驱动坐标下载jar包
<dependencies>
        <-- mysql驱动 -->
        <dependency>
            <groupid>mysql</groupid>
            <artifactid>mysql-connector-java</artifactid>
            <version>8.0.18</version>
        </dependency>
        <-- junit方便测试 -->
        <dependency>
            <groupid>junit</groupid>
            <artifactid>junit</artifactid>
            <version>4.12</version>
        </dependency>
    </--></--></dependencies>
  1. 写测试方法
@Test
    public void jdbcConn(){
        try {
            //1.&#x6CE8;&#x518C;&#x9A71;&#x52A8;&#xFF0C;&#x544A;&#x8BC9;&#x865A;&#x62DF;&#x673A;&#x4F7F;&#x7528;&#x90A3;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x8F6F;&#x4EF6;
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.&#x83B7;&#x53D6;&#x8FDE;&#x63A5;&#x5BF9;&#x8C61;&#xFF08;3306&#x662F;mysql&#x7684;&#x7AEF;&#x53E3;&#x53F7;&#xFF0C;root&#x4E3A;mysql&#x7528;&#x6237;&#x540D;&#xFF0C;000&#x4E3A;&#x5BC6;&#x7801;&#xFF09;
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?useSSL=false&serverTimezone=Asia/Shanghai","root","000");
            //3.&#x6D4B;&#x8BD5;&#x662F;&#x5426;&#x83B7;&#x53D6;&#x5230;&#x8FDE;&#x63A5;
            System.out.println(conn);
        } catch (Exception e) {
            e.printStackTrace();
        }
  }

打印结果:[en]Print the results:

com.mysql.cj.jdbc.ConnectionImpl@1e127982

注意:
1.如果使用的是MYSQL版本是8.0以上的版本,下载的jar包也必须是8.0以上。以上我使用的就是8.0以上的版本。
2.在注册驱动时,需要注意所使用的 mysql-connector-java 的版本,如果使用的 5.x 版本,该属性值应该是 com.mysql.jdbc.Driver ,如果使用的是 6.x 或更高版本,该属性值应该是 com.mysql.cj.jdbc.Driver ,如果不确定到底应该用哪个值,可以展开 mysql-connector-java 的jar包文件来观察!另外,在该jar包中还 META-INF/services/java.sql.Driver 文件,该文件内记录的就是使用该jar包时应该使用的 Driver 类。
3.如果使用的是 6.x 或以上版本的 mysql-connector-java ,在配置连接数据库的URL时,还必须显式的设置 serverTimezone 参数的值!在中国大陆地区可使用的值有 Asia/ShanghaiAsia/Chongqing

  //5.x&#x7248;&#x672C;
  //&#x7248;&#x672C;&#x6CE8;&#x518C;&#x9A71;&#x52A8;&#xFF0C;&#x544A;&#x8BC9;&#x865A;&#x62DF;&#x673A;&#x4F7F;&#x7528;&#x90A3;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x8F6F;&#x4EF6;
  Class.forName("com.mysql.jdbc.Driver");
  //&#x83B7;&#x53D6;&#x8FDE;&#x63A5;&#x5BF9;&#x8C61;
  Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "000");
  1. 获取到连接后
@Test
    public void jdbcConn(){
        try {
            //1.&#x6CE8;&#x518C;&#x9A71;&#x52A8;&#xFF0C;&#x544A;&#x8BC9;&#x865A;&#x62DF;&#x673A;&#x4F7F;&#x7528;&#x90A3;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x8F6F;&#x4EF6;
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.&#x83B7;&#x53D6;&#x8FDE;&#x63A5;&#x5BF9;&#x8C61;
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?useSSL=false&serverTimezone=Asia/Shanghai","root","000");
            System.out.println(conn);

            //3.&#x521B;&#x5EFA;SQL&#x6267;&#x884C;&#x5BF9;&#x8C61;
            Statement statement = conn.createStatement();
            String sql = "select * from user";
            ResultSet rs = statement.executeQuery(sql);
            while(rs.next()){
                System.out.println(rs.getString(1));
                System.out.println(rs.getString(2));
                System.out.println(rs.getString("passWord"));
            }
            //4.&#x53CA;&#x65F6;&#x5173;&#x95ED;&#x8D44;&#x6E90;
            conn.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

测试结果[en]Test result

com.mysql.cj.jdbc.ConnectionImpl@1e127982
7
csdn
csdn123

注:sql执行对象statement有三个常用的方法:1.execute(sql):此方法用于执行数据库相关和表相关的sql语句,返回值是一个boolean型,代表是否有结果集。2.executeUpdata(sql):此方法用于执行增删改的相关sql语句,返回值是int,代表受影响的行数。3.executeQuery(sql):此方法用于执行查询的sql,返回值是结果集,封装查询回来的所有数据。获取时可根据下标或者字段名获取。

2.DBCP(DataBaseConnectivityPool)

数据库连接池,为什么使用DBCP?[en]Database connection pool, * Why use DBCP?
如果没有使用数据库连接池,则每个业务请求都需要建立一个数据库连接。如果有数万个请求,则需要与数据库建立和关闭数万个连接。频繁的交换连接是对资源的浪费。使用数据库连接池可以重用连接以提高执行效率。[en]If database connection pooling is not used, each business request needs to establish a database connection. If there are tens of thousands of requests, tens of thousands of connections need to be established and closed with the database. Frequent switching connections are a waste of resources. Using database connection pooling can reuse connections to improve execution efficiency.
如何使用?(mysql为例)*

  1. 引入dbcp的jar包(在上面pom.xml基础上)
        <!--dbcp的jar包-->
        <dependency>
            <groupid>commons-dbcp</groupid>
            <artifactid>commons-dbcp</artifactid>
            <version>1.4</version>
        </dependency>
  1. 写测试方法
@Test
    public void dbcpDemo(){
       try{
           //1.&#x521B;&#x5EFA;&#x6570;&#x636E;&#x5E93;&#x8FDE;&#x63A5;&#x6C60;
           BasicDataSource ds = new BasicDataSource();
           //2.&#x8BBE;&#x7F6E;&#x6570;&#x636E;&#x5E93;&#x8FDE;&#x63A5;
           ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
           ds.setUrl("jdbc:mysql://localhost:3306/student?useSSL=false&serverTimezone=Asia/Shanghai");
           ds.setUsername("root");
           ds.setPassword("000");
           //&#x8BBE;&#x7F6E;&#x521D;&#x59CB;&#x8FDE;&#x63A5;&#x6570;
           ds.setInitialSize(3);
           //&#x8BBE;&#x7F6E;&#x6700;&#x5927;&#x8FDE;&#x63A5;&#x6570;
           ds.setMaxActive(5);
           //3.&#x83B7;&#x53D6;&#x8FDE;&#x63A5;
           Connection conn = ds.getConnection();
           System.out.println(conn);
       }catch(Exception e){
           e.printStackTrace();
       }
    }
  1. 测试结果
jdbc:mysql://localhost:3306/student?useSSL=false&serverTimezone=Asia/Shanghai, UserName=root@localhost, MySQL Connector/J

注:我们一般将mysql用户名,密码,连接地址等配置放在一个文件中,方便后面修改配置,我们使用时也直接读取该文件进行配置。获取Connection连接也一块写在一个工具类中直接获取连接即可。下面是写好的一个工具类:

jdbc.properties文件

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/student?useSSL=false&serverTimezone=Asia/Shanghai
userName=root
passWord=000
initialSize=3
maxActive=5

DBUtils.java文件

public class DBUtils {
    private static BasicDataSource basicDataSource;

    static {
        //&#x521B;&#x5EFA;&#x8BFB;&#x53D6;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x6570;&#x636E;&#x7684;&#x5BF9;&#x8C61;
        Properties properties = new Properties();
        //&#x83B7;&#x53D6;&#x6587;&#x4EF6;&#x6D41;
        InputStream inputStream = DBUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        try {
            //&#x628A;&#x6587;&#x4EF6;&#x52A0;&#x8F7D;&#x5230;&#x5C5E;&#x6027;&#x5BF9;&#x8C61;&#x4E2D;
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //&#x8BFB;&#x53D6;&#x6570;&#x636E;
        String driver = properties.getProperty("driver");
        String url = properties.getProperty("url");
        String userName = properties.getProperty("userName");
        String passWord = properties.getProperty("passWord");
        String initialSize= properties.getProperty("initialSize");
        String maxActive= properties.getProperty("maxActive");

        basicDataSource = new BasicDataSource();
        basicDataSource.setDriverClassName(driver);
        basicDataSource.setUrl(url);
        basicDataSource.setUsername(userName);
        basicDataSource.setPassword(passWord);
        basicDataSource.setInitialSize(Integer.valueOf(initialSize));
        basicDataSource.setMaxActive(Integer.valueOf(maxActive));
    }

    public static Connection getConnection() throws SQLException {
        return basicDataSource.getConnection();
    }
}

我的文件目录

JDBC-DBCP-MYBATIS基本使用
注:使用完及时关闭连接释放资源!!

3.MyBatis

这里我说的是MyBatis整合Spring的使用,据我观察单独使用的比较少,如果实在需要可去查阅官方文档MyBatis使用中文
MyBatis的诞生就是为了 简化操作数据库的流程,在我们实现增删改查等操作时,只需要设计相关的抽象方法以及sql语句

  1. 创建maven项目,在pom.xml文件中加入依赖
<dependencies>
        <!--spring框架-->
        <dependency>
            <groupid>org.springframework</groupid>
            <artifactid>spring-context</artifactid>
            <version>5.2.2.RELEASE</version>
        </dependency>
        <!--spring操作数据库-->
        <dependency>
            <groupid>org.springframework</groupid>
            <artifactid>spring-jdbc</artifactid>
            <version>5.2.2.RELEASE</version>
        </dependency>
        <!--mysql连接-->
        <dependency>
            <groupid>mysql</groupid>
            <artifactid>mysql-connector-java</artifactid>
            <version>8.0.18</version>
        </dependency>
        <!--dbcp连接池-->
        <dependency>
            <groupid>commons-dbcp</groupid>
            <artifactid>commons-dbcp</artifactid>
            <version>1.4</version>
        </dependency>
        <!--mybatis依赖-->
        <dependency>
            <groupid>org.mybatis</groupid>
            <artifactid>mybatis</artifactid>
            <version>3.5.3</version>
        </dependency>
        <!--mybatis整合spring-->
        <dependency>
            <groupid>org.mybatis</groupid>
            <artifactid>mybatis-spring</artifactid>
            <version>2.0.3</version>
        </dependency>
        <!--测试依赖-->
        <dependency>
            <groupid>junit</groupid>
            <artifactid>junit</artifactid>
            <version>4.12</version>
        </dependency>
    </dependencies>
  1. 配置spring连接数据库的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemalocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <!--配置dbcp数据库连接池-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver">
        <property name="url" value="jdbc:mysql://localhost:3306/student?serverTimezone=Asia/Shanghai">
        <property name="username" value="root">
        <property name="password" value="000">
        <property name="initialSize" value="2">
        <property name="maxActive" value="10">
    </property></property></property></property></property></property></bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--配置接口文件在哪里-->
        <property name="basePackage" value="mapper">
    </property></bean>

    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--配置xml文件在哪里-->
        <property name="mapperLocations" value="classpath:mappers/*.xml">
        <!--使用那个数据源连接数据库-->
        <property name="dataSource" ref="dataSource">
    </property></property></bean>
</beans>

这是目录结构

JDBC-DBCP-MYBATIS基本使用
3. 我们创建mapper包,里面放操作数据库的相关接口,在resources文件夹下创建mappers文件夹,里面放操作数据的sql语句。
先写sql语句,我们这里以查找用户为例
<-- 注意头文件必须这样写,否则会报错! -->
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<!-- namespace:对应哪个接口 -->
<mapper namespace="mapper.UserMapper">
    <-- id为接口的方法名,resultmap为查找出的"每条"数据封装类型 -->
    <select id="findAllUser" resulttype="Map">
        SELECT
            *
        FROM
            user
    </select>
</--></mapper>
</-->

创捷接口,写上该方法

@Repository
public interface UserMapper {
    //&#x5728;&#x8FD9;&#x91CC;&#x4F1A;&#x6709;&#x591A;&#x6761;&#x6570;&#x636E;&#xFF0C;&#x56E0;&#x6B64;&#x8FD4;&#x56DE;&#x7684;&#x662F;Map[],&#x4E5F;&#x53EF;&#x7528;List&#x5C01;&#x88C5;
    Map[] findAllUser();
}

4.测试一下, 注意,我们在配置文件里的mapperScanConfigure里面自动创建该接口bean组件,因此没有必要再去创建

public class MyBatisTest {
    ClassPathXmlApplicationContext ctx;

    @Before
    public void init(){
        ctx = new ClassPathXmlApplicationContext("spring-dao.xml");
    }

    @Test
    public void findAllUserTest(){
        UserMapper userMapper = ctx.getBean("userMapper", UserMapper.class);
        Map[] users = userMapper.findAllUser();
        System.out.println(users[0].toString());
    }
}

打印结果[en]Print the result

{passWord=csdn123, uid=7, userName=csdn}

注:Spring整合MyBatis无需释放资源。最基本的使用就是这些了,我在后面更新一些文章写了下其他的一些使用JDBC的常用方法

Original: https://blog.csdn.net/weixin_45056780/article/details/104774243
Author: 世代农民
Title: JDBC-DBCP-MYBATIS基本使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6123/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部