zoukankan      html  css  js  c++  java
  • spring-jdbc

    为了实现对数据库中

    public class Employee {
    private int id;
    private double salary;
    private String name;

    }

    的操作

    1.spring-jdbc.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">
    
        <!-- 主要为了扫描hello包其中的DAO类 -->
        <context:component-scan base-package="hello"></context:component-scan>
        
        <!-- 使用外部文件,外部文件中包含了登陆数据库的信息   !注意:classpath: -->
        <context:property-placeholder location="classpath:db.properties"/>
        
        <!-- 配置一个dataSource的Bean。用的是c3p0数据源com.mchange.v2.c3p0.ComboPooledDataSource -->
        <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.initiaPoolSize}"></property>
            <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
        </bean>
        
        
        <!-- !!spring对数据库的操作主要用以下两个选其一。以下两个都需要dataSource -->
        
        <!-- JDBC模版 -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        
        <!-- 具名参数JDBC模板 -->
        <bean id="namedParameterJdbcTemplate"
         class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
            <constructor-arg ref="dataSource"></constructor-arg>
        </bean>
        
    </beans>

    EmployeeDAO.java

    package hello;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class EmployeeDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
        
        /**
         * @return the jdbcTemplate
         */
        public JdbcTemplate getJdbcTemplate() {
            return jdbcTemplate;
        }
    
    
        public Employee select(int id){
            String sql = "select id,salary,name from employees where id = ?";
            
            BeanPropertyRowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
            
            Employee e = new Employee();
            e = jdbcTemplate.queryForObject(sql, rowMapper, id);
            return e;
        }
    }

    TestJdbcTemplate.java

    package hello;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import javax.sql.DataSource;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    
    public class TestJDBCTemplate {
    
        private ApplicationContext ctx = null;
        private DataSource dataSource = null;
        private JdbcTemplate jdbcTemplate = null;
        {
            ctx = new ClassPathXmlApplicationContext("spring-jdbc.xml");
            dataSource = (DataSource) ctx.getBean("dataSource");
            jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");
        }
        
        @Test
        public void test() throws Exception {
            System.out.println(dataSource.getConnection());
        }
        
        //增删改
        @Test
        public void testUpdate(){
            String sql = "update employees set name = ? where id = ?";
            jdbcTemplate.update(sql, "LL" , 2);
        }
        
        //批量操作jdbcTemplate.batchUpdate(sql, list);
        @Test
        public void testBatch(){
            String sql = "update employees set name = ? where id = ?";
            List<Object[]> list = new ArrayList<>();
            list.add(new Object[]{"AA",2});
            list.add(new Object[]{"BB",3});
            list.add(new Object[]{"CC",4});
            list.add(new Object[]{"DD",5});
            
            jdbcTemplate.batchUpdate(sql, list);
        }
        
        //纯粹查询结果List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, 2);
        @Test
        public void testselect(){
            String sql = "select id,salary,name from employees where id = ?";
            
            List<Map<String, Object>> list = new ArrayList<>(); 
            list = jdbcTemplate.queryForList(sql, 2);
            System.out.println(list);
        }
        
        //查询结构以对象的形式出现e = jdbcTemplate.queryForObject(sql, rowMapper, 2);
        @Test
        public void testselectForObject(){
            String sql = "select id,salary,name from employees where id = ?";
            
            Employee e = new Employee();
            BeanPropertyRowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
            e = jdbcTemplate.queryForObject(sql, rowMapper, 2);
            System.out.println(e);
        }
        
        //查询Employee对象的集合list = jdbcTemplate.query(sql, rowMapper, 2);
        @Test
        public void testselectForListObject(){
            String sql = "select id,salary,name from employees where id > ?";
            
            List<Employee> list = new ArrayList<>();
            BeanPropertyRowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
            list = jdbcTemplate.query(sql, rowMapper, 2);
            System.out.println(list);
        }
        
        @Test
        public void testDAO(){
            EmployeeDao dao = (EmployeeDao) ctx.getBean("employeeDao");
            System.out.println(dao.select(3));
        }
    }

    TestNamedParameterJDBCTemplate.java

    package hello;
    
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.RowMapper;
    import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
    import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
    
    
    public class TestNamedParameterJDBCTemplate {
    
        private ApplicationContext ctx = null;
        private NamedParameterJdbcTemplate template = null;
        {
            ctx = new ClassPathXmlApplicationContext("spring-jdbc.xml");
            template = (NamedParameterJdbcTemplate) ctx.getBean("namedParameterJdbcTemplate");
        }
        
        @Test
        public void testNamed(){
            String sql = "select id,salary,name from employees where id = :id";
            
            RowMapper rowMapper = new BeanPropertyRowMapper<>(Employee.class);
            Map<String,Object> paramMap = new LinkedHashMap<>();
            paramMap.put("id", 2);
            Employee e = (Employee) template.queryForObject(sql, paramMap, rowMapper);
            System.out.println(e);
        }
        @Test
        public void testNamed2(){
            String sql = "select id,salary,name from employees where id = :id";
            
            Employee e = new Employee();
            e.setId(2);
            BeanPropertySqlParameterSource paramSource = new BeanPropertySqlParameterSource(e);
            
            RowMapper rowMapper = new BeanPropertyRowMapper<>(Employee.class);
            
            Employee ee = (Employee) template.queryForObject(sql, paramSource, rowMapper);
            System.out.println(ee);
        }
    }
  • 相关阅读:
    15、常量指针和指针常量区别?
    14、strlen和sizeof区别?
    12、变量声明和定义区别?
    10、宏定义和函数和typedef有何区别?
    hdoj--1495--非常可乐(搜索+隐式图)
    hdoj--2579--Dating with girls(2)(搜索+三维标记)
    poj--3630--Phone List(字典树+前缀判断)
    poj--2001--Shortest Prefixes(字典树)
    Huatuo's Medicine
    hdoj--2803--The MAX(水题)
  • 原文地址:https://www.cnblogs.com/feifeiyun/p/6522783.html
Copyright © 2011-2022 走看看