初识Spring JdbcTemplate

JdbcTemplate

概述

JdbcTemplate是Spring提供的一个模板类,它是对jdbc的封装.用于支持持久层的操作.具有简单,方便等特点.

pom.xml



    
    5.0.2.RELEASE
    
    5.1.30




    
    
        org.springframework
        spring-context
        ${spring.version}
    

    
    
        org.springframework
        spring-jdbc
        ${spring.version}
    

    
    
        mysql
        mysql-connector-java
        ${mysql.version}
    


入门案例

/**
 * spring JdbcTemplate入门案例
 */
public class JdbcTemplateDemo {

    public static void main(String[] args) {
        /**
         * 需求:通过JdbcTemplate实现添加一条账户记录,到账户表account中
         */
        // 创建JdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate();

        // 设置数据源对象
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/spring");
        dataSource.setUsername("root");
        dataSource.setPassword("root");

        jdbcTemplate.setDataSource(dataSource);

        // 添加账户信息
        jdbcTemplate.update("insert into account(name,money) values('小黄',2000)");
    }
}

SpringIOC管理JdbcTemplate

bean.xml




    
    
        
        
    

    
    
        
        
        
        
        
    


案例

/**
 * spring JdbcTemplate入门案例
 */
public class JdbcTemplateDemo {

    public static void main(String[] args) {
        /**
         * 通过spring IOC容器管理JdbcTemplate对象
         */
        // 1.加载spring配置文件,创建spring IOC容器
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean.xml");

        // 2.从spring IOC容器中,获取JdbcTemplate
        JdbcTemplate jdbcTemplate = (JdbcTemplate)context.getBean("jdbcTemplate");

        // 3.添加账户
        jdbcTemplate.update("insert into account(name,money) values('小敏',2000)");

    }
}

整合数据源

在使用JdbcTemplate的时候,需要设置一个数据源对象才能完成数据库操作

内置数据源



    
    
    
    
    

c3p0数据源



0.9.5



    com.mchange
    c3p0
    ${c3p0.version}





    
    
    
    
    

dbcp数据源



1.4



    commons-dbcp
    commons-dbcp
    ${dbcp.version}





        
        
        
        
        

druid数据源



1.0.29



    com.alibaba
    druid
    ${druid.version}




 
        
        
        
        
        
 

RoeMapper

在JdbcTemplate中query方法有一个参数:RowMapper用于对结果集进行封装

public  List query(String sql, RowMapper rowMapper) throws DataAccessException{
    return ....
}

BeanPropertyRowMapper

Spring框架提供的RowMapper通用实现类

// 类结构
public class BeanPropertyRowMapper implements RowMapper{
    .....
}

/**
 * 关键方法一
 *      1.根据传递进来的类型信息,通过反射技术,获取类的全部成员变量,以及set方法
 *      2.把类的成员变量名称,和对应的set方法,存在集合Map中
 *      3.等待执行完成数据库操作后,把对应字段的值,赋值到对应的成员变量上
 */
protected void initialize(Class mappedClass){
    ......
}

/**
 * 关键方法二
 *      1.执行完成数据库操作后,拿到结果集ResultSet
 *      2.循环遍历ResultSet,每一行记录,调用一次该方法,进行结果集的封装
 */
 public T mapRow(ResultSet rs, int rowNumber) throws SQLException{
     ......
 }

自定义RowMapper

有时候为了代码更加简洁,会考虑使用自定义的RowMapper

/**
 * 自定义结果集隐射:RowMapper
 */
public class CustomRowMapper implements RowMapper{
    /**
     * 实现结果集封装方法: mapRow
     * 该方法每一行结果集记录就调用一次
     */
    public T mapRow(ResultSet rs, int rowNumber) throws SQLException{
    Object object = new Object();
    
    object.setXXX(XXX);
    
    return object;
    }
}

SpringIOC案例实现

pom.xml


    
    5.0.2.RELEASE
    
    1.0.29
    
    5.1.30



    
    
        org.springframework
        spring-context
        ${spring.version}
    
    
    
        org.springframework
        spring-jdbc
        ${spring.version}
    
    
    
        com.alibaba
        druid
        ${druid.version}
    
    
    
        mysql
        mysql-connector-java
        ${mysql.version}
    

完全xml版本

bean.xml




    
    
        
        
    

    
    
        
        
    

    
    
        
        
    

    
    
        
        
        
        
        

        
        
        
        
        
        
        
        
        
        
        
    


dao

public class Dao{
    // 定义JdbcTemplate
    private JdbcTemplate jdbcTemplate;
    
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate){
        this.jdbcTemplate = jdbcTemplate;
    }
    
    public List findAll(){
        // 定义sql
        String sql = "select * from table";
        
        // 返回执行结果
        return jdbcTemplate.query(sql, new CustomRowMapper());
    }
}

service

public class Service{
    // 定义dao
    private Dao dao;
    
    public void setDao(Dao dao){
        this.dao = dao;
    }
    
    public List findAll(){
        return dao.findAll();
    }
}

Controller

public class Controller {
    public static void main(String[] args) {
        // 1.加载spring配置文件,创建spring容器
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:bean.xml");

        // 2.获取客户service对象
        Service Service = (Service) context.getBean("Service");

        // 3.查询全部客户列表数据
        List list = Service.findAll();
        for(T t:list){
            System.out.println(t);
        }
    }
}

xml与注解混合版本

bean.xml

  


    
    

    
    
        
        
    

    
    
        
        
        
        
        

        
        
        
        
        
        
        
        
        
        
        
    


dao

@Repository("dao")
public class Dao{
    // 定义JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    public List findAll(){
        // 定义sql
        String sql = "select * from table";
        
        // 返回查询结果
        return jdbcTemplate.query(sql, new CustomRowMapper());
    }
}

service

@Service("service")
public class Service{
    // 定义dao
    private Dao dao;
    
    public List findAll(){
        return dao.findAll();
    }
}

完全注解基础版本

Spring配置类

/**
 * 注解说明
 *      @Configuration: 标记当前java类是一个Spring的配置类
 *      @ComponentScan: 配置扫描包,相当于xml配置中标签
 */
@Configuration
@ComponentScan(value = {"com.XXX"})
public class SpringConfiguration{
    // 配置JdbcTemplate
    @Bean(value = "jdbcTemplate")
    public JdbcTemplate createJdbcTemplate(DataSource dataSource){
        // 创建JdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }
    
    // 配置DataSource
    @Bean(value = "dataSource")
    public DataSource createDataSource(){
        // 创建DataSource
        DruidDataSource dataSource = new DruidDataSource();
        
        // 注入属性
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/spring");
        dataSource.setUsername("root");
        dataSource.setPassword("root");

        dataSource.setInitialSize(6);
        dataSource.setMinIdle(3);
        dataSource.setMaxActive(50);
        dataSource.setMaxWait(60000);
        dataSource.setTimeBetweenEvictionRunsMillis(60000);
        
        return dataSource;
    }
}

Controller

public class Controller{
    public static void main(String[] args){
        // 1.加载Spring配置类,创建Spring容器
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
        
        // 2.获取service对象
        Service service = (Service)context.getBean("service");
        
        // 调用方法得到结果
        List list = service.findAll();
        for(T t : list){
            System.out.println(t);
        }
    }
}

完全注解优化版本

建立配置类之间关系

/**
 * spring配置类:
 *  注解说明:
 *      1.@Configuration:标记当前java类,是一个spring的配置类
 *      2.@ComponentScan:配置扫描包。相当于xml配置中标签
 *      3.@Import:导入其他模块配置类
 *      4.@PropertySource:导入属性资源文件
 */
@Configuration
@ComponentScan(value = {"com.XXX"})
@Import(value={DaoConfiguration.class})
@PropertySource(value={"classpath:jdbc.properties"})

jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring
jdbc.username=root
jdbc.password=root

jdbc.initialSize=6
jdbc.minIdle=3
jdbc.maxActive=50
jdbc.maxWait=60000
jdbc.timeBetweenERM=60000

Dao

public class DaoConfiguration {
    @Bean(value="jdbcTemplate")
    public JdbcTemplate createJdbcTemplate(DataSource dataSource){
        // 创建JdbcTemplate对象
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);

        return jdbcTemplate;
    }
    
    // 定义连接数据库的成员变量
    /**
     * 使用@Value注解,进行赋值
     * 使用格式:@Value("${}")
     */
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Value("${jdbc.initialSize}")
    private Integer initialSize;
    @Value("${jdbc.minIdle}")
    private Integer minIdle;
    @Value("${jdbc.maxActive}")
    private Integer maxActive;
    @Value("${jdbc.maxWait}")
    private Integer maxWait;
    @Value("${jdbc.timeBetweenERM}")
    private Integer timeBetweenERM;

    @Bean(value="dataSource")
    public DataSource createDataSource(){
        // 创建DataSource
        DruidDataSource dataSource = new DruidDataSource();

        // 注入属性
        // 注入属性
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);

        dataSource.setInitialSize(initialSize);
        dataSource.setMinIdle(minIdle);
        dataSource.setMaxActive(maxActive);
        dataSource.setMaxWait(maxWait);
        dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenERM);

        return dataSource;
    }
}

你可能感兴趣的:(初识Spring JdbcTemplate)