zoukankan      html  css  js  c++  java
  • Spring_使用(JDBC)

    Spring_对JDBC的支持

    使用JdbcTemplate更新数据库

    导入jar包

    创建applicationcontext.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:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    
     <!-- 导入资源文件 -->
       <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
       
       <!-- 配置C3p0数据源 -->
       <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
         <property name="user" value="${jdbc.user}"></property>
         <property name="password" value="${jdbc.password}"></property>
         <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
         <property name="driverClass" value="${jdbc.driverClass}"></property>
         
         <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
         <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
       </bean>
       
       <!-- 配置Spring的jdbcTemplate -->
       <bean id="jdbcTemplate" 
       class="org.springframework.jdbc.core.JdbcTemplate">
           <property name="dataSource" ref="dataSource"></property>  
       </bean>
    </beans>

    创建db.properties文件

    jdbc.user=root
    jdbc.password=password
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.jdbcUrl=jdbc:mysql://localhost:3306/spring4?serverTimezone=GMT%2B8
    
    jdbc.initPoolSize=5
    jdbc.maxPoolSize=10

    创建测试类

    package com.tanlei.pojo.jdbc;
    
    import static org.junit.jupiter.api.Assertions.*;
    
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.sql.DataSource;
    
    import org.junit.jupiter.api.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.RowMapper;
    
    import junit.framework.TestListener;
    
    public class JDBCTest {
     private ApplicationContext ctx=null;
        private  JdbcTemplate jdbcTemplate;
        {
            ctx=new ClassPathXmlApplicationContext("applicationcontext.xml");
            jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");
            
        }
    
    
    
    /**
         * 
         *tanlei
         *2018年12月26日 
         *执行INSERT UPDATE DELETE
         */
        //单独修改一条语句
        //update
        @Test
        public void testUpdate() {
            String sql="update  employee  set EMP_NAME=?  where EMP_ID=?";
            jdbcTemplate.update(sql,"tanlei",769);
        }
        
        //批量增加数据,修改,删除
        //batchUpdate
        @Test
        public  void testAlladd() {
            String sql="insert into  DEPARTMENT(DEPT_ID,DEPT_NAME,DEPT_NO) values (?,?,?)";
            List<Object[]> batchArgs=new ArrayList<>();
            batchArgs.add(new Object[] {1,"AA","D1"});
            batchArgs.add(new Object[] {2,"BB","D2"});
            jdbcTemplate.batchUpdate(sql, batchArgs);
        }
        
        //从数据库获取一条记录,实际上得到一个对象
        //queryForObject   使用sql中的列的 别名完成列名和属性名的映射
        //jdbcTemplate是一个jdbc的小工具,不是orm框架
        @Test
        public void testemployee() {
            String sql="select EMP_ID as id,EMP_NAME as empname,EMP_NO as empno,JOB as job  from  employee  where EMP_ID=?";
            RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<>(Employee.class);
            Employee employee=jdbcTemplate.queryForObject(sql, rowMapper,769);
            System.out.println(employee);
        }
        
        
        
        //查到实体类的集合
        @Test
        public void TestList() {
            String sql="select EMP_ID as id,EMP_NAME as empname,EMP_NO as empno,JOB as job  from  employee  where EMP_ID>?";
            RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<>(Employee.class);
            List<Employee> employees=jdbcTemplate.query(sql, rowMapper,769);
            System.out.println(employees);
        }
        
        
        //获取某一个属性值,或做统计查询
        @Test
        public void testListForObject() {
            String sql="select count(EMP_ID) as id  from  employee  ";      
            long count=jdbcTemplate.queryForObject(sql, Long.class);
            System.out.println(count);
        }
    @Test
        public void testDataSource() throws SQLException {
            DataSource dataSource=ctx.getBean(DataSource.class);
            System.out.println(dataSource.getConnection());
        }
    
    
    
    
    
    }

    1.查询单行数据 

    1.1 自定义RowMapper

    public class RowMapper implements org.springframework.jdbc.core.RowMapper {
        @Override
        public Object mapRow(ResultSet resultSet, int i) throws SQLException {
            Customer customer=new Customer();
            customer.setCustid(resultSet.getInt("cus_id"));
            customer.setName(resultSet.getString("name"));
            customer.setAge(resultSet.getInt("age"));
            return null;
        }
    }

    它传递给 queryForObject()方法,返回的结果将调用自定义 mapRow()方法的值匹配到属性

    public Customer findByCustomerId(int custId){
             
        String sql = "SELECT * FROM CUSTOMER WHERE CUST_ID = ?";
     
        Customer customer = (Customer)getJdbcTemplate().queryForObject(
                sql, new Object[] { custId }, new CustomerRowMapper());
            
        return customer;
    }

    1.2 BeanPropertyRowMapper

    在Spring2.5中,带有一个方便 RowMapper 实现所谓“BeanPropertyRowMapper”,它可以通过匹配行的名字的列值映射到一个属性。只要确保这两个属性和列具有相同的名称,如属性“CUSTID'将匹配到列名为:”CUSTID'或下划线“CUST_ID”。 

    public Customer findByCustomerId2(int custId){
             
        String sql = "SELECT * FROM CUSTOMER WHERE CUST_ID = ?";
     
        Customer customer = (Customer)getJdbcTemplate().queryForObject(
                sql, new Object[] { custId }, 
                new BeanPropertyRowMapper(Customer.class));
        
        return customer;
    }

    2,查询多行

    现在,查询或从数据库中提取多行,并且将它转换成一个列表。

    2.1手动映射它

    返回多行,RowMapper 不支持 queryForList()方法,需要手动映射它。 
    public List<Customer> findAll(){
            
        String sql = "SELECT * FROM CUSTOMER";
             
        List<Customer> customers = new ArrayList<Customer>();
        
        List<Map> rows = getJdbcTemplate().queryForList(sql);
        for (Map row : rows) {
            Customer customer = new Customer();
            customer.setCustId((Long)(row.get("CUST_ID")));
            customer.setName((String)row.get("NAME"));
            customer.setAge((Integer)row.get("AGE"));
            customers.add(customer);
        }
            
        return customers;
    }

    2.2 BeanPropertyRowMapper

    最简单的解决方案是使用 BeanPropertyRowMapper 类。 
    public List<Customer> findAll(){
            
        String sql = "SELECT * FROM CUSTOMER";
            
        List<Customer> customers  = getJdbcTemplate().query(sql,
                new BeanPropertyRowMapper(Customer.class));
            
        return customers;
    }

    继承JdbcDaoSupport(不推荐使用,而推进直接使用

    jdbcTemplate

    )

  • 相关阅读:
    Atitit 趋势管理之道 attilax著
    Atitit 循环处理的新特性 for...else...
    Atitit 2017年的技术趋势与未来的大技术趋势
    atitit 用什么样的维度看问题.docx 如何了解 看待xxx
    atitit prj mnrs 项目中的几种经理角色.docx
    Atitit IT办公场所以及度假村以及网点以及租房点建设之道 attilax总结
    Atitit 工具选型的因素与方法 attilax总结
    Atitit.团队文化建设影响组织的的一些原理 法则 定理 效应 p826.v4
    Atiitt 管理方面的误区总结 attilax总结
    Atitit 未来趋势把控的书籍 attilax总结 v3
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/10147152.html
Copyright © 2011-2022 走看看