zoukankan      html  css  js  c++  java
  • java学习之数据库操作 传统jdbc、springjdbc

      Spring 使java开发变得容易,为开发者节省了不少时间,其中包括数据库的连接与使用。下面将使用三种方式连接数据库:传统的jdbc方式、springjdbc方式。

    1.传统jdbc方式

    首先项目需要导 mysql-connector-java jar包  

    或者采用maven导入jar包

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.38</version>
            </dependency>
    

     代码如下:

    //       1通过直接赋值方式配置
    //        String url = "jdbc:mysql:///dbname";
    //        String user = "root";
    //        String password = "";
    //        String driverClass = "com.mysql.jdbc.Driver";
    
    
    //      2通过.properties配置文件读取配置
            InputStream inputStream = JDBCUtil.class.getClassLoader().getResourceAsStream("dbconfig.properties");
            Properties properties = new Properties();
            properties.load(inputStream);
            String url = properties.getProperty("jdbc.url");
            String user = properties.getProperty("jdbc.user");
            String password = properties.getProperty("jdbc.password");
            String driverClass = properties.getProperty("jdbc.driverClass");
            
    //      连接操作
            Class.forName(driverClass);
            Connection connection = DriverManager.getConnection(url, user, password);
    
    //      crud(增删改查)操作
            String sql = "sql_crud_statement";
            preparedStatement = connection.prepareStatement(sql);
            resultSet = preparedStatement.executeQuery();
    //      解析结果
            Student student = null;
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                int age = resultSet.getInt("age");
                //do sth
            }

    分析:这种传统连接方式实现起来很简单,但是代码量相对较多,而且用完之后还要有手动释放资源的操作,相对的需要有很多重读代码。

    2.srping jdbc方式

    当然,首要任务是引入包,涉及的包有一点小多,所以首选maven来导入

    <!--MySQL Driver-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>
    
    <!--spring-->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-jdbc</artifactId>
    	<version>4.3.5.RELEASE</version>
    </dependency>
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-context</artifactId>
    	<version>4.3.5.RELEASE</version>
    </dependency>
    

     配置好之后就可以进行令人激动地链接数据库操作了

    大致流程是首先通过框架里面的上下文机制获取jdbcTemplate(数据模板)对象,然后再通过jdbcTemplate对象进行curd操作:

    1.上下文的xml配置beans.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"
           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 name="username" value="root"/>
            <property name="password" value="root"/>
            <property name="url" value="jdbc:mysql:///spring_data"/>
        </bean>
    
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    </beans>
    
     2.加载xml获取jdbcTemplate对象,实现curd
    ctx = new ClassPathXmlApplicationContext("beans.xml");
    jdbcTemplate = ctx.getBean(“jdbcTemplate”);
    jdbcTemplate.query(sql, new RowCallbackHandler(){
      // 重写processRow 来实现自己的循环处理结果集
        @Override
        public void processRow(ResultSet rs) throws SQLException {
            int id = rs.getInt("id");
            String name = rs.getString("name");
        //do  sth
        }
    });
    

     分析:这种方式虽然需要配置上下文,但是实现起来很容易,实现的代码就那么几行,看着效果不错,而且jdbcTemplate对象是已经实现的对象,我们只需要重写里面的processRow方法就可以实现。相比传统方式,这种方法精进了不少,也不用考虑释放资源。

    然而这不是框架想要的全部,如果想要其他操作,比如分页操作,实现起来也不是很容易,所有的sql还需要自己写,也不是很方便啊,那么问题来了,有没有真正的“好”的方式来实现呢?下一篇将分析下spring实现curd以及其优点。

  • 相关阅读:
    定义一个动态的二维数组?
    学习STL map, STL set之数据结构基础
    CMM
    详细解说STL string
    仔细选择你的容器
    C++字符串类string简析
    流氓软件及反流氓软件的技术分析
    标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
    C++资料下载
    unix系统操作命令大全
  • 原文地址:https://www.cnblogs.com/libinblogs/p/7872411.html
Copyright © 2011-2022 走看看