spring之JDBC

来源:互联网 发布:网络4大粪坑 编辑:程序博客网 时间:2024/05/29 00:33

spring之JDBC

     对于JDBC,我想学过Java的童鞋都应该是啥玩意,我的简单理解就是:访问、操纵数据库的一套API。对于纯生的JDBC,对于我这种java程序员都写烂了!深刻体会到那一个过程的繁琐性。那么这个过程是怎么样的呢,其实很简单:加载数据库驱动driver、获取数据库链接DriverManager.getConnection()、写好数据库语句Statement或者PreparedStatement、然后填充相应的占位符、query数据库得到ResultSet或者update数据库或者批量batch更新操作、完成后关闭resultSet和preparedStatement和connnection。

     过程中还需要try-catch-finally将这一过程包裹起来!着实是一件繁琐,蛋疼的事情!后来,涌现出来了jdbcUtils、hibernate以及mybatis之类的想要简化上面这一访问、操作数据库的流程!

     本文介绍的也是为了简化应用程序开发过程对数据库访问和操作的流程及简化代码!Spring我就不介绍了,说它是一个优秀的IOC、AOP框架不为过,但这样说又狭隘了点!因为,spring可以用在很多地方(当然了,这只是我个人的说法而已啦!大笑)。它对jdbc的支持是相当不错的!下面主要介绍jdbcTemplate和namedParameterJdbcTemplate

     首先,建立一个Java project,建立lib文件夹,放入相应的Jar包,并add to build path(加入类路径),在数据库建一个简单的tb_user表。下面是jar包、项目的目录结构和数据库表。其中jar包下载链接在这里:spring支持jdbc之jar包

                                 

     下面是User实体类

[csharp] view plain copy
print?
  1. <span style=“font-size:18px;”>package com.atguigu.jdbc;  
  2.   
  3. public class User {  
  4.       
  5.     private Integer id;  
  6.       
  7.     private String name;  
  8.       
  9.     private String address;  
  10.       
  11.     private String lastName;  
  12.       
  13.     public Integer getId() {  
  14.         return id;  
  15.     }  
  16.   
  17.     public void setId(Integer id) {  
  18.         this.id = id;  
  19.     }  
  20.   
  21.     public String getName() {  
  22.         return name;  
  23.     }  
  24.   
  25.     public void setName(String name) {  
  26.         this.name = name;  
  27.     }  
  28.   
  29.     public String getAddress() {  
  30.         return address;  
  31.     }  
  32.   
  33.     public void setAddress(String address) {  
  34.         this.address = address;  
  35.     }  
  36.       
  37.     public String getLastName() {  
  38.         return lastName;  
  39.     }  
  40.   
  41.     public void setLastName(String lastName) {  
  42.         this.lastName = lastName;  
  43.     }  
  44.   
  45.     @Override  
  46.     public String toString() {  
  47.         return “User [id=” + id + “, name=” + name + “, address=” + address  
  48.                 + ”, lastName=” + lastName + “]”;  
  49.     }  
  50.   
  51. }  
  52.   
  53. </span>  
<span style="font-size:18px;">package com.atguigu.jdbc;public class User {    private Integer id;    private String name;    private String address;    private String lastName;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public String getLastName() {        return lastName;    }    public void setLastName(String lastName) {        this.lastName = lastName;    }    @Override    public String toString() {        return "User [id=" + id + ", name=" + name + ", address=" + address                + ", lastName=" + lastName + "]";    }}</span>

      下面是dataBase.properties:需要放置在类路径src下

[java] view plain copy
print?
  1. <span style=“font-size:18px;”>jdbc.user=root  
  2. jdbc.password=123456  
  3. jdbc.driverClass=com.mysql.jdbc.Driver  
  4. jdbc.jdbcUrl=jdbc:mysql://localhost:3306/db_spring  
  5.   
  6. jdbc.initPoolSize=5  
  7. jdbc.maxPoolSize=10</span>  
<span style="font-size:18px;">jdbc.user=rootjdbc.password=123456jdbc.driverClass=com.mysql.jdbc.Driverjdbc.jdbcUrl=jdbc:mysql://localhost:3306/db_springjdbc.initPoolSize=5jdbc.maxPoolSize=10</span>

      下面是spring的配置文件:

[java] view plain copy
print?
  1. <span style=“font-size:18px;”><?xml version=“1.0” encoding=“UTF-8”?>  
  2. <beans xmlns=”http://www.springframework.org/schema/beans”  
  3.     xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:context=“http://www.springframework.org/schema/context”  
  4.     xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  5.         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd”>  
  6.   
  7.     <!– 导入数据库配置文件 –>  
  8.     <context:property-placeholder location=”classpath:dataBase.properties”/>  
  9.   
  10.     <!– 配置数据源 –>  
  11.     <bean id=”dataSource” class=“com.mchange.v2.c3p0.ComboPooledDataSource”>  
  12.         <property name=”user” value={jdbc.user}"</span><span>&gt;&lt;/property&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"password"</span><span>&nbsp;value=</span><span class="string">"{jdbc.password}”></property>  
  13.         <property name=”driverClass” value={jdbc.driverClass}"</span><span>&gt;&lt;/property&gt;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"jdbcUrl"</span><span>&nbsp;value=</span><span class="string">"{jdbc.jdbcUrl}”></property>  
  14.           
  15.         <property name=”initialPoolSize” value={jdbc.initPoolSize}"</span><span>&gt;&lt;/property&gt;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span class="string">"maxPoolSize"</span><span>&nbsp;value=</span><span class="string">"{jdbc.maxPoolSize}”></property>  
  16.     </bean>  
  17.       
  18.     <!– 配置jdbcTemplate –>  
  19.     <bean id=”jdbcTemplate” class=“org.springframework.jdbc.core.JdbcTemplate”>  
  20.         <property name=”dataSource”  ref=“dataSource”></property>  
  21.     </bean>  
  22.   
  23.     <!– 配置  –>  
  24.     <bean id=”namedParameterJdbcTemplate” class=“org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate”>  
  25.         <constructor-arg ref=”dataSource”></constructor-arg>  
  26.     </bean>  
  27.       
  28. </beans>  
  29.   
  30. </span>  
<span style="font-size:18px;"><?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:dataBase.properties"/>    <!-- 配置数据源 -->    <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="driverClass" value="${jdbc.driverClass}"></property>        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>        <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>        <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>    </bean>    <!-- 配置jdbcTemplate -->    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">        <property name="dataSource"  ref="dataSource"></property>    </bean>    <!-- 配置  -->    <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">        <constructor-arg ref="dataSource"></constructor-arg>    </bean></beans></span>

     下面是jdbcTemplate和NamedParameterJdbcTemplate代码

[java] view plain copy
print?
  1. <span style=“font-size:18px;”>package com.atguigu.jdbc;  
  2.   
  3. import java.sql.SQLException;  
  4. import java.util.ArrayList;  
  5. import java.util.Arrays;  
  6. import java.util.HashMap;  
  7. import java.util.List;  
  8. import java.util.Map;  
  9. import java.util.Set;  
  10.   
  11. import javax.sql.DataSource;  
  12.   
  13. import org.junit.Test;  
  14. import org.springframework.context.ApplicationContext;  
  15. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  16. import org.springframework.jdbc.core.BeanPropertyRowMapper;  
  17. import org.springframework.jdbc.core.JdbcTemplate;  
  18. import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;  
  19. import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;  
  20. import org.springframework.jdbc.core.namedparam.SqlParameterSource;  
  21.   
  22. public class SpringToJDBC {  
  23.       
  24.     ApplicationContext ctx=null;  
  25.     JdbcTemplate jdbcTemplate=null;  
  26.     NamedParameterJdbcTemplate namedParameterJdbcTemplate=null;  
  27.       
  28.     {  
  29.         ctx=new ClassPathXmlApplicationContext(“spring-jdbc.xml”);  
  30.         jdbcTemplate=(JdbcTemplate) ctx.getBean(”jdbcTemplate”);  
  31.         namedParameterJdbcTemplate=  
  32.                 (NamedParameterJdbcTemplate) ctx.getBean(”namedParameterJdbcTemplate”);  
  33.     }  
  34.       
  35.     /*测试增删改*/  
  36.   
  37.     @Test  
  38.     public void testInsert(){  
  39.         String sql=”insert into tb_user(name,address) values(‘李连杰’,’上海’)”;  
  40.         jdbcTemplate.execute(sql);  
  41.     }  
  42.       
  43.     //批量更新  
  44.     @Test  
  45.     public void batchUpdate(){  
  46.         String sql=”insert into tb_user(name,address,last_name) values(?,?,?)”;  
  47.           
  48.         List<Object[]> batchArgs=new ArrayList<>();  
  49.           
  50.         batchArgs.add(new Object[]{“欧阳锋”,“北京”,“欧阳”});  
  51.         batchArgs.add(new Object[]{“石破天”,“南京”,“狗杂种”});  
  52.         batchArgs.add(new Object[]{“少林扫地僧”,“天京”,“欧阳”});  
  53.         batchArgs.add(new Object[]{“乔峰”,“湖南”,“欧阳”});  
  54.         batchArgs.add(new Object[]{“郭靖”,“湖北”,“欧阳”});  
  55.         batchArgs.add(new Object[]{“黄蓉”,“北京”,“黄色”});  
  56.         batchArgs.add(new Object[]{“杨过”,“北京”,“杨氏”});  
  57.           
  58.         int[] res=jdbcTemplate.batchUpdate(sql, batchArgs);  
  59.         System.out.println(res.length);  
  60.     }  
  61.       
  62.     @Test  
  63.     public void testUpdate(){  
  64.         String sql=”update tb_user set name=’稳杰’,address=’南海’ where id=?”;  
  65.         int res=jdbcTemplate.update(sql,2);  
  66.         System.out.println(res);  
  67.     }  
  68.       
  69.     @Test  
  70.     public void testDelete(){  
  71.         String sql=”delete from tb_user where id=?”;  
  72.         int res=jdbcTemplate.update(sql,12);  
  73.         System.out.println(res);  
  74.     }  
  75.       
  76.     //查询一个对象  
  77.     @Test  
  78.     public void testQueryOneObject(){  
  79.         String sql=”select id,name,address,last_name as lastName from tb_user where id=?”;  
  80.         User user=  
  81.                 jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 22);  
  82.         System.out.println(user);  
  83.         System.out.println(user.getLastName());  
  84.     }  
  85.       
  86.     //查询列表  
  87.     @Test  
  88.     public void testQueryList(){  
  89.         String sql = ”select * from tb_user where address like ’%京%’”;    
  90.         List<User> userList=  
  91.                 (List<User>) jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(User.class));  
  92.         System.out.println(”查询List: ”);  
  93.         for (User user : userList) {  
  94.             System.out.println(user);  
  95.         }  
  96.         System.out.println(”数量: ”+userList.size());  
  97.     }  
  98.       
  99.     //查询列表  
  100.     @Test  
  101.     public void testQueryListWithArgs(){  
  102.         String sql = ”select * from tb_user where name=? and address = ?”;    
  103.         List<User> userList=  
  104.                 (List<User>) jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(User.class),new Object[]{“稳杰”,“北京”});  
  105.         System.out.println(”查询List: ”);  
  106.         for (User user : userList) {  
  107.             System.out.println(user);  
  108.         }  
  109.         System.out.println(”数量: ”+userList.size());  
  110.     }  
  111.       
  112.     //查询指定的字段  
  113.     @Test  
  114.     public void testMap(){  
  115.         String param=”京”;  
  116.         String sql = ”select id,name,address from tb_user where address like ’%”+param+“%’ order by id desc ”;  
  117.         List<User> userList=  
  118.                 (List<User>) jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(User.class));  
  119.         Map<String, Object[]> map = new HashMap<String, Object[]>();    
  120.         for (User user:userList) {    
  121.             Object[] userOtherMsg=new Object[2];  
  122.             userOtherMsg[0]=user.getName();  
  123.             userOtherMsg[1]=user.getAddress();  
  124.               
  125.             map.put(String.valueOf(user.getId()), userOtherMsg );    
  126.         }    
  127.           
  128.         System.out.println(”查询特定的字段: ”);  
  129.         for (Map.Entry<String, Object[]> entry:map.entrySet()) {  
  130.             System.out.println(entry.getKey()+” – ” +entry.getValue()[0]+“ – ”+entry.getValue()[1]);  
  131.         }  
  132.         System.out.println();  
  133.           
  134.     }  
  135.       
  136.     //查询数量  
  137.     @Test  
  138.     public void testQueryCount(){  
  139.         String param=”上海”;  
  140.         String sql=”select Count(*) from tb_user where address like ’%”+param+“%’”;  
  141.         @SuppressWarnings(“deprecation”)  
  142.         long count=jdbcTemplate.queryForLong(sql);  
  143.         System.out.println(count);  
  144.     }  
  145.       
  146.     //查询数量  
  147.     @Test  
  148.     public void testQueryObject2(){  
  149.         String arg=”京”;  
  150.         String sql=”select count(*) from tb_user where address like ’%”+arg+“%’”;  
  151.         Long count=jdbcTemplate.queryForObject(sql, Long.class);  
  152.         System.out.println(count);  
  153.     }  
  154.       
  155.     @Test  
  156.     public void testJDBC() throws SQLException{  
  157.         DataSource dataSource=ctx.getBean(DataSource.class);  
  158.         System.out.println(dataSource.getConnection());  
  159.     }  
  160.       
  161.     @Test  
  162.     public void testNamedParameterjdbcTemplate(){  
  163.         String sql=”insert into tb_user(name,address,last_name) values(:name,:addr,:ln)”;  
  164.           
  165.         Map<String, Object> paramMap=new HashMap<>();  
  166.         paramMap.put(”name”“刘德华”);  
  167.         paramMap.put(”addr”“香港”);  
  168.         paramMap.put(”ln”“刘德华”);  
  169.           
  170.         namedParameterJdbcTemplate.update(sql, paramMap);  
  171.     }  
  172.       
  173.     @Test  
  174.     public void testNamedParameterjdbcTemplate2(){  
  175.         String sql=”insert into tb_user(name,address,last_name) values(:name,:address,:lastName)”;  
  176.           
  177.         User user=new User();  
  178.         user.setName(”钟林森”);  
  179.         user.setAddress(”佛山”);  
  180.         user.setLastName(”钟”);  
  181.         //面向对象的SQL  
  182.         SqlParameterSource paramSource=new BeanPropertySqlParameterSource(user);  
  183.         namedParameterJdbcTemplate.update(sql,paramSource);  
  184.     }  
  185.       
  186. }</span>  
<span style="font-size:18px;">package com.atguigu.jdbc;import java.sql.SQLException;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;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;import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;import org.springframework.jdbc.core.namedparam.SqlParameterSource;public class SpringToJDBC {    ApplicationContext ctx=null;    JdbcTemplate jdbcTemplate=null;    NamedParameterJdbcTemplate namedParameterJdbcTemplate=null;    {        ctx=new ClassPathXmlApplicationContext("spring-jdbc.xml");        jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");        namedParameterJdbcTemplate=                (NamedParameterJdbcTemplate) ctx.getBean("namedParameterJdbcTemplate");    }    /*测试增删改*/    @Test    public void testInsert(){        String sql="insert into tb_user(name,address) values('李连杰','上海')";        jdbcTemplate.execute(sql);    }    //批量更新    @Test    public void batchUpdate(){        String sql="insert into tb_user(name,address,last_name) values(?,?,?)";        List<Object[]> batchArgs=new ArrayList<>();        batchArgs.add(new Object[]{"欧阳锋","北京","欧阳"});        batchArgs.add(new Object[]{"石破天","南京","狗杂种"});        batchArgs.add(new Object[]{"少林扫地僧","天京","欧阳"});        batchArgs.add(new Object[]{"乔峰","湖南","欧阳"});        batchArgs.add(new Object[]{"郭靖","湖北","欧阳"});        batchArgs.add(new Object[]{"黄蓉","北京","黄色"});        batchArgs.add(new Object[]{"杨过","北京","杨氏"});        int[] res=jdbcTemplate.batchUpdate(sql, batchArgs);        System.out.println(res.length);    }    @Test    public void testUpdate(){        String sql="update tb_user set name='稳杰',address='南海' where id=?";        int res=jdbcTemplate.update(sql,2);        System.out.println(res);    }    @Test    public void testDelete(){        String sql="delete from tb_user where id=?";        int res=jdbcTemplate.update(sql,12);        System.out.println(res);    }    //查询一个对象    @Test    public void testQueryOneObject(){        String sql="select id,name,address,last_name as lastName from tb_user where id=?";        User user=                jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), 22);        System.out.println(user);        System.out.println(user.getLastName());    }    //查询列表    @Test    public void testQueryList(){        String sql = "select * from tb_user where address like '%京%'";          List<User> userList=                (List<User>) jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(User.class));        System.out.println("查询List: ");        for (User user : userList) {            System.out.println(user);        }        System.out.println("数量: "+userList.size());    }    //查询列表    @Test    public void testQueryListWithArgs(){        String sql = "select * from tb_user where name=? and address = ?";          List<User> userList=                (List<User>) jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(User.class),new Object[]{"稳杰","北京"});        System.out.println("查询List: ");        for (User user : userList) {            System.out.println(user);        }        System.out.println("数量: "+userList.size());    }    //查询指定的字段    @Test    public void testMap(){        String param="京";        String sql = "select id,name,address from tb_user where address like '%"+param+"%' order by id desc ";        List<User> userList=                (List<User>) jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(User.class));        Map<String, Object[]> map = new HashMap<String, Object[]>();          for (User user:userList) {              Object[] userOtherMsg=new Object[2];            userOtherMsg[0]=user.getName();            userOtherMsg[1]=user.getAddress();            map.put(String.valueOf(user.getId()), userOtherMsg );          }          System.out.println("查询特定的字段: ");        for (Map.Entry<String, Object[]> entry:map.entrySet()) {            System.out.println(entry.getKey()+" -- " +entry.getValue()[0]+" -- "+entry.getValue()[1]);        }        System.out.println();    }    //查询数量    @Test    public void testQueryCount(){        String param="上海";        String sql="select Count(*) from tb_user where address like '%"+param+"%'";        @SuppressWarnings("deprecation")        long count=jdbcTemplate.queryForLong(sql);        System.out.println(count);    }    //查询数量    @Test    public void testQueryObject2(){        String arg="京";        String sql="select count(*) from tb_user where address like '%"+arg+"%'";        Long count=jdbcTemplate.queryForObject(sql, Long.class);        System.out.println(count);    }    @Test    public void testJDBC() throws SQLException{        DataSource dataSource=ctx.getBean(DataSource.class);        System.out.println(dataSource.getConnection());    }    @Test    public void testNamedParameterjdbcTemplate(){        String sql="insert into tb_user(name,address,last_name) values(:name,:addr,:ln)";        Map<String, Object> paramMap=new HashMap<>();        paramMap.put("name", "刘德华");        paramMap.put("addr", "香港");        paramMap.put("ln", "刘德华");        namedParameterJdbcTemplate.update(sql, paramMap);    }    @Test    public void testNamedParameterjdbcTemplate2(){        String sql="insert into tb_user(name,address,last_name) values(:name,:address,:lastName)";        User user=new User();        user.setName("钟林森");        user.setAddress("佛山");        user.setLastName("钟");        //面向对象的SQL        SqlParameterSource paramSource=new BeanPropertySqlParameterSource(user);        namedParameterJdbcTemplate.update(sql,paramSource);    }}

     好了,就介绍这里吧!欢迎留言一同交流!


转载来源:http://blog.csdn.net/u013871100/article/details/51944988

原创粉丝点击