JDBC-DBCP-MYBATIS基本使用

1.JDBC(Java DataBase Connectivity)

JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。从他的全称来看,翻译过来就是Java数据库连接。
为什么使用JDBC?
在我们使用java语言时,可能会需要连接多种数据库,Mysql,Orcal等,如果没有JDBC我们可能每一种数据库都需要学习一套该数据库的api,使用JDBC后,各个数据库厂商根据JDBC中的方法声明写方法的实现,对于java程序员只需要掌握JDBC的一套方法就可以访问各种数据库。
如何去使用?(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.注册驱动,告诉虚拟机使用那个数据库软件
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接对象(3306是mysql的端口号,root为mysql用户名,000为密码)
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?useSSL=false&serverTimezone=Asia/Shanghai","root","000");
            //3.测试是否获取到连接
            System.out.println(conn);
        } catch (Exception e) {
            e.printStackTrace();
        }
  }

打印结果:

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版本
  //版本注册驱动,告诉虚拟机使用那个数据库软件
  Class.forName("com.mysql.jdbc.Driver");
  //获取连接对象
  Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "000");
  1. 获取到连接后
@Test
    public void jdbcConn(){
        try {
            //1.注册驱动,告诉虚拟机使用那个数据库软件
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接对象
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?useSSL=false&serverTimezone=Asia/Shanghai","root","000");
            System.out.println(conn);


            //3.创建SQL执行对象
            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.及时关闭资源
			conn.close();

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

测试结果

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?
如果不使用数据库连接池,每一次业务请求都需要对应建立一次数据库连接,如果有几万次请求,则需要与数据库进行几万次建立连接与关闭,频繁的开关连接浪费资源,使用数据库连接池可以将连接重复利用从而提高执行效率。
如何使用?(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.创建数据库连接池
           BasicDataSource ds = new BasicDataSource();
           //2.设置数据库连接
           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");
           //设置初始连接数
           ds.setInitialSize(3);
           //设置最大连接数
           ds.setMaxActive(5);
           //3.获取连接
           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 {
        //创建读取配置文件数据的对象
        Properties properties = new Properties();
        //获取文件流
        InputStream inputStream = DBUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        try {
            //把文件加载到属性对象中
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //读取数据
        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();
    }
}

我的文件目录
在这里插入图片描述
注:使用完及时关闭连接释放资源!!

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"/>
    </bean>

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

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

这是目录结构
在这里插入图片描述
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 {
	//在这里会有多条数据,因此返回的是Map[],也可用List封装
    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());
    }
}

打印结果

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值