JdbcTemplate访问方式以及spring和mybatis整合的原理

本文介绍了Spring访问数据库的方式,包括java原生方式的不足及JdbcTemplate的两种使用方法。详细讲解了Spring与Mybatis的整合,重点在于Mybatis的访问方式和整合的具体步骤,强调了通过Spring管理DAO代理对象实现数据访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单描述下spring访问数据库的方式

1.java原生的访问数据库的方式

public Connection getConnection() throws ClassNotFoundException,
            SQLException {
        // 加载MySQL的JDBC的驱动
        Class.forName("com.mysql.jdbc.Driver");

        String url = "jdbc:mysql://127.0.0.1:3306/test";
        String username = "root";
        String password = "123456";

        // 创建与MySQL数据库的连接类的实例
        Connection conn = DriverManager.getConnection(url, username, password);
        System.out.println("Database connection established");
        return conn;
    }
public void query() throws Exception {
        Connection conn = getConnection();
        try {
            // 用conn创建Statement对象类实例
            Statement sql_statement = conn.createStatement();

            // 执行查询,用ResultSet类的对象,返回查询的结果
            String query = "select * from person";
            ResultSet result = sql_statement.executeQuery(query);

            // 处理结果
            while (result.next()) {
                int id = result.getInt("id");
                String name = result.getString("name");
                String age = result.getString("age");

                System.out.println("id: " + id + " name: " + name + " age: " + age);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                // 关闭连接
                try {
                    conn.close();
                    System.out.println("Database connection terminated");
                } catch (Exception e) { /* ignore close errors */
                }
            }
        }
    }

缺点:

1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。

设想:使用数据库连接池管理数据库连接。

2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。

设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。

3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

设想:将sql语句及占位符号和参数全部配置在xml中。

4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。

设想:将查询的结果集,自动映射成java对象。

2.JdbcTemplate访问

2.1 非配置文件方式

public void demo(){
         DriverManagerDataSource dataSource=new DriverManagerDataSource();
         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
         dataSource.setUrl("jdbc:mysql:///spring");
         dataSource.setUsername("root");
         dataSource.setPassword("");
         //DataSource设置好参数后可以通过getConnection()得到连接,就如上面原生方式访问一样
         JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
         jdbcTemplate.execute("create table temp(id int primary key,name varchar(32))");     
     }

这是spring 封装的jdbcTemplate,对上面方法1中的操作进行的封装。DataSource设置好参数后可以通过getConnection()得到连接,就如上面原生方式访问一样

2.2 配置文件方式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!--数据源的配置 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql:///spring"></property>
        <property name="username" value="root"></property>
        <property name="password" value=""></property>
    </bean>
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>   
    <bean id="userDao" class="com.curd.spring.impl.UserDAOImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
</beans>

它为我们提供了JdbcDaoSupport支持类,所有DAO继承这个类,就会自动获得JdbcTemplate(前提是注入DataSource)。

上面xml文件中定义的UserDAOImpl类就继承了这个JdbcDaoSupport,所以UserDAOImpl会获得jdbcTemplate,然后在类中使用

this.getJdbcTemplate()方法来获取JdbcTemplate进行使用

3.spring和mybatis整合方式

3.1 mybatis访问数据库的方式

3.1.1 只使用xml,不使用dao接口

3.1.2使用dao接口

3.1.3 整合的方式

通过dao接口方式我们可以知道,UserMapper userMapper=sqlSession.getMapper(UserMapper.class)可以得到一个代理类,通过这个代理类来访问数据库获得数据,所以我们可以将sqlSession交给spring,让spring 获得所有的DAO代理对象,这样就可以通过容器来获得代理对象了。

具体操作方式如下:

    <!--主要就是配置了如下:sqlSessionFactory和mapper扫描-->
    <!-- sqlSessinFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 加载mybatis的全局配置文件 -->
        <property name="configLocation" value="classpath:SqlMapConfig.xml" />
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- mapper扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开  -->
        <property name="basePackage" value="cn.itcast.mybatis.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

将sqlSessionFactory配置给spring,再配置一个mapper扫描器,这个扫描器的作用就是将所有的DAO代理类扫描到spring容器中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值