1,Spring集成Jdbc,需要导入spring包和数据库驱动包,这里我们使用的是mysql驱动包

2,选择一个数据源(DBCP,C3P0),这里我们使用DBCP,需要导入DBCP驱动包

3,创建jdbc.properties文件,设置数据库的连接信息

3,在beans.xml中导入相应的properties文件

4,写相应的dao,并且为这个dao创建jdbcTemplate对象,它需要DataSource构造

--实体类:

package com.yangw.spring.model;

public class User {

    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    /**
     *
     * create table t_user(
          id int auto_increment primary key ,
          name varchar(50),
          age int );
     */

}

--UserDao接口与实现类

package com.yangw.spring.dao;

import java.util.List;

import com.yangw.spring.model.User;

public interface IUserDao {

    public void addUser(User user);

    public void delUser(int id);

    public User loadUser(int id);

    public List<User> loadAllUser();
}
package com.yangw.spring.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.stereotype.Repository;

import com.yangw.spring.model.User;

@Repository("userJdbcDao")
public class UserDao implements IUserDao {

    private JdbcTemplate  jdbcTemplate;

    @Resource //注入dataSoucre
    public void setDataSource(DataSource dataSource){
        jdbcTemplate=new JdbcTemplate(dataSource);
    }
    @Override
    public void addUser(final User user) {
        //插入一条数据,但是自增的主键id没法得到
        //jdbcTemplate.update("insert into t_user(name,age) values(?,?)",user.getName(),user.getAge());

        final String sql="insert into t_user(name,age) values(?,?)";

        //获取自增的key的方法
        KeyHolder keyHolder = new GeneratedKeyHolder();
        jdbcTemplate.update(
            new PreparedStatementCreator() {
                public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
                    PreparedStatement ps =conn.prepareStatement(sql,new String[]{"id"});
                    ps.setString(1, user.getName());
                    ps.setInt(2, user.getAge());
                    return ps;
                }
            }, keyHolder);

        System.out.println(keyHolder.getKey());
    }

    @Override
    public void delUser(int id) {
        jdbcTemplate.update("delete from t_user where id=?",id);
    }

    @Override
    public User loadUser(int id) {
        String sql="select * from t_user where id=?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserMapper());
    }
    @Override
    public List<User> loadAllUser() {

        //获取记录数
        String sql1="select count(*) from t_user";
        int count=jdbcTemplate.queryForInt(sql1);
        System.out.println("count:"+count);

        //获取记录的一个字段值
        String sql2="select name from t_user";
        List<String> names=jdbcTemplate.queryForList(sql2, String.class);
        for(String name:names){
            System.out.println("name--->"+name);
        }

        //获取记录的几个字段的值
        String sql3="select name,age from t_user";
        SqlRowSet sqlRowSet=jdbcTemplate.queryForRowSet(sql3);
        while(sqlRowSet.next()){
            System.out.println("name--->"+sqlRowSet.getString("name")+"--age-->"+sqlRowSet.getInt("age"));

        }

        //获取所有记录
        String sql="select * from t_user";
        return jdbcTemplate.query(sql, new UserMapper());
    }

    /**
     * 在多个地方用的话,建议写成内部类,而不是匿名内部类
     * 如果在外部也会大量使用,建议写成独立的一个类
     * @author Administrator
     *
     */
    private class UserMapper implements RowMapper<User>{

        @Override
        public User mapRow(ResultSet rs, int rowNum) throws SQLException {
            User user=new User();
            user.setId(rs.getInt("id"));
            user.setName(rs.getString("name"));
            user.setAge(rs.getInt("age"));
            System.out.println(rowNum+"rowNum"); //rowNum是每次迭代的下标
            return user;
        }
    }

}

--测试类

package com.yangw.spring.test;

import java.util.List;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.yangw.spring.dao.IUserDao;
import com.yangw.spring.model.User;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/beans.xml")
/**
 * 当使用了@RunWith,@ContextConfiguration注解之后,就可以直接在Test中进行依赖注入
 * @author Administrator
 */
public class TestJdbc {

    @Resource
    private IUserDao userJdbcDao;

    @Test
    public void testJdbc(){

       User user=new User();
       user.setName("lisi");
       user.setAge(20);
       userJdbcDao.addUser(user);
    }
    @Test
    public void testLoadUser(){
        User user=userJdbcDao.loadUser(1);
        System.out.println(user.getName());
    }
    @Test
    public void testLoadAllUsers(){
        List<User> users=userJdbcDao.loadAllUser();
        System.out.println(users.size());
    }
}

--配置文件bean.xml

<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:aop="http://www.springframework.org/schema/aop"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd">

   <!--1, 打开Spring的annotation -->
   <context:annotation-config/>
   <!-- 2, 设定Spring去那些包中找annotation -->
   <context:component-scan base-package="com.yangw.spring" />

   <!--
           使用dbcp没有成功, 加的是commons-dbcp-1.4.jar
          class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">           因此使用下面的spring框架提供的作了测试
    -->
   <bean id="dataSource"

               class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <context:property-placeholder location="jdbc.properties"/> 

</beans>

--jdbc.properties文件

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_test
jdbc.username=root
jdbc.password=123456

Spring03-jdbc的更多相关文章

  1. JAVAEE——spring03:spring整合JDBC和aop事务

    一.spring整合JDBC 1.spring提供了很多模板整合Dao技术 2.spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模 ...

  2. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  3. 玩转spring boot——结合AngularJs和JDBC

    参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...

  4. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  5. JDBC MySQL 多表关联查询查询

    public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...

  6. JDBC增加删除修改

    一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...

  7. JDBC简介

    jdbc连接数据库的四个对象 DriverManager  驱动类   DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 ...

  8. JDBC Tutorials: Commit or Rollback transaction in finally block

    http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...

  9. FineReport如何用JDBC连接阿里云ADS数据库

    在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...

  10. JDBC基础

    今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...

随机推荐

  1. 【Spring】web开发 javaConfig方式 图解

    spring3.2之后开始支持java配置方式开发web项目,不使用web.xml,但需要在servlet3.0环境,一般tomcat7会支持,6不行 下图中:MyAppInitializer和Spr ...

  2. WeQuant交易策略—EMA指标

    策略名称:EMA指标策略关键词:指数移动平均.双均线.动态止损.方法:1)用快慢两条指数移动平均线的交叉作为买入卖出信号:2)快线自下而上穿过慢线,买入:自上而下穿过慢线,卖出:3)持仓期间计算净值的 ...

  3. Springboot+resteasy定时任务

    定时任务 需求:按每日统计点赞数.评论数.热度的增加量(不是现有量) 1.每天零点执行:首先遍历出user的统计字段 然后插入到新创建的表中. 2.每天一点执行:根据时间段将两表的数据相减创建增量字段 ...

  4. [2016-07-15]结合命令行工具awk和多行文本编辑器快速生成DataSeed代码

    目标:根据业务提供的两份数据,生成DataSeed代码 SampleDataA 上海 华东一线 上饶 华东四线 中山 华南二线 临汾 华北四线 临沂 华东二线 SampleDataB 上海 1D04E ...

  5. 微信H5支付:网络环境未能通过安全验证,请稍后再试。解决办法(PHP版)

    前(tu)言(cao) (这段前言纯属吐槽,着急解决问题的小伙伴,赶紧看正文吧) 最近做了支付宝和微信支付,先做的是PC端网站的支付,就是出个二维码,然后手机扫描支付,当然支付宝在扫码页面支持登录支付 ...

  6. java面向对象(三)之抽象类,接口,向上转型

    java类 java类分为普通类和抽象类,接口,上一节我大概讲了java类的一般格式,今天将抽象类和接口.同时讲一下它们是怎样存储的. 最重要的是理解为什么要有抽象和接口,这样学下来你猜不会迷茫,才能 ...

  7. display:inline-block间隙问题

    display:inline-block 是让块级元素变成行内元素 在一行显示, 然而不幸的是,它并没有得到所有浏览器的支持,比如ie6.7和古老一点的firefox完全无视它,由于firefox的老 ...

  8. java 读写锁详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt124 在java多线程中,为了提高效率有些共享资源允许同时进行多个读的操作, ...

  9. Spring中的线程池和定时任务功能

    1.功能介绍 Spring框架提供了线程池和定时任务执行的抽象接口:TaskExecutor和TaskScheduler来支持异步执行任务和定时执行任务功能.同时使用框架自己定义的抽象接口来屏蔽掉底层 ...

  10. select设置disable后ie修改默认字体颜色暂时解决

    找了很多资料,终于在科学上网后找到了一个方法,虽然暂时不知道原理,但是已经实现了功能就是好的 select[disabled='disabled']::-ms-value { color: #000; ...