• Spring中使用JdbcTemplate


    软件152班杨锦宏

    Spring中使用JdbcTemplate、JdbcDaoSupport和NamedParameterJdbcTemplate来操作数据库,但是JdbcTemplate最常用,最易用。

    jdbc.properties:




    user=root password=123 driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql:///spring?encoding=UFT-8 initPoolSize=5 maxPoolSize=20

    ApplicationContext.xml中导入配置文件和配置dataSouce:

    复制代码
        <!-- 导入资源文件 -->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        
        <!-- 配置c3p0数据源 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="user" value="${user}"></property>
            <property name="password" value="${password}"></property>
            <property name="driverClass" value="${driverClass}"></property>
            <property name="jdbcUrl" value="${jdbcUrl}"></property>
            
            <property name="initialPoolSize" value="${initPoolSize}"></property>
            <property name="maxPoolSize" value="${maxPoolSize}"></property>
        </bean>
    复制代码

    test0410.java(属性和数据库中的字段对应):

    复制代码
    package spring.jdbc;
    
    public class test0410 {
        private Integer uuid;
        private String name;
        private Integer age;
        
        public Integer getUuid() {
            return uuid;
        }
        public void setUuid(Integer uuid) {
            this.uuid = uuid;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "test0410 [uuid=" + uuid + ", name=" + name + ", age=" + age + "]";
        }
        
    }
    复制代码

    test0410Dao.java:

    复制代码
    package spring.jdbc;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.RowMapper;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class test0410Dao {
        
        @Autowired
        private JdbcTemplate jdbcTemplate;
        
        public test0410 get(Integer id){
            String sql="select id uuid,name,age from test0410 where id=?";
            RowMapper<test0410> rowMapper=new BeanPropertyRowMapper<test0410>(test0410.class);
            
            test0410 test10410=jdbcTemplate.queryForObject(sql,rowMapper,1);
            return test10410;
        }
    }
    复制代码

    ApplicationContext.xml中配置自动扫描和JdbcTemplate:

    复制代码
    <!-- 配置自动扫描的包 -->
        <context:component-scan base-package="spring.jdbc"></context:component-scan>
        
        <!-- 配置spring 的JdbcTemplate -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    复制代码

    测试类:

    复制代码
    package spring.jdbc.test;
    
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    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.RowMapper;
    
    import spring.jdbc.test0410;
    import spring.jdbc.test0410Dao;
    
    public class jdbcTest {
        
        private ApplicationContext ctx=null;
        private JdbcTemplate jdbcTemplate;
        {
            ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
            jdbcTemplate= (JdbcTemplate) ctx.getBean("jdbcTemplate");
        }
        
        
        @Test
        public void testDao(){
            test0410Dao test04101=(test0410Dao) ctx.getBean("test0410Dao");
            System.out.println(test04101.get(1));
        }
        
        /**
         * 获取单个列的值 或做统计查询
         * 使用queryForObject(String sql, Class<Long> requiredType)
         */
        @Test
        public void testQueryForObject2(){
            String sql="select count(id) from test0410";
            long count=jdbcTemplate.queryForObject(sql, Long.class);
            System.out.println(count);
        }
        
        /**
         * 查到实体类的集合
         * 注意调用的不是queryForList方法
         */
        @Test
        public void testQueryForList(){
            String sql="select id uuid,name,age from test0410 where id>?";
            RowMapper<test0410> teMapper=new BeanPropertyRowMapper<test0410>(test0410.class);
            List<test0410> test0410s=jdbcTemplate.query(sql, teMapper,2);
            System.out.println(test0410s);
        }
        /**
         * 从数据库中获取一条记录,实际得到一个对象
         * 注意:不是调用queryForObject(String sql, Class<test0410> requiredType, Object... args)方法
         * 而需要调用queryForObject(String sql, RowMapper<test0410> rowMapper, Object... args)
         * 其中的rowMapper指定如何去映射结果集 的行,常用的实现类为BeanPropertyRowMapper
         * 
         * 使用Sql中的列的别名和类的属性名映射,例如:id uuid
         * 
         * 不支持级联属性
         */
        @Test
        public void testQueryForObject(){
            String sql="select id uuid,name,age from test0410 where id=?";
            RowMapper<test0410> rowMapper=new BeanPropertyRowMapper<test0410>(test0410.class);
            
            test0410 test10410=jdbcTemplate.queryForObject(sql,rowMapper,1);
            System.out.println(test10410);
        }
        
        /**
         * 执行批量更新:update ,insert ,delete
         * 最后一个参数是一个Object[]的List集合。
         */
        @Test
        public void testBatchUpdate(){
            String sql="insert into test0410(id,name,age) values (?,?,?)";
            List<Object[]>  batchArgs=new ArrayList<Object[]>();
            batchArgs.add(new Object[]{2,"aaa",23});
            batchArgs.add(new Object[]{3,"bbb",24});
            batchArgs.add(new Object[]{4,"ccc",25});
            
            jdbcTemplate.batchUpdate(sql, batchArgs);
        }
        
        /**
         * 执行update ,insert ,delete
         */
        @Test
        public void testUptate(){
            String sql="update test0410 set name=? where id=? ";
            jdbcTemplate.update(sql,"lyj",1);
        }
        
        @Test
        public void TestDateSource() throws SQLException{
            DataSource dataSource= (DataSource) ctx.getBean("dataSource");
            System.out.println(dataSource.getConnection());
        }
    }
  • 相关阅读:
    【BZOJ4676】Xor-Mul棋盘 拆位+状压DP
    【BZOJ4688】One-Dimensional 矩阵乘法
    【BZOJ4704】旅行 树链剖分+可持久化线段树
    【BZOJ4709】[Jsoi2011]柠檬 斜率优化+单调栈
    【BZOJ4711】小奇挖矿 树形DP
    【BZOJ4715】囚人的旋律 DP
    【BZOJ4712】洪水 树链剖分优化DP+线段树
    服务器相关 HTTP 请求错误
    RSA算法
    公钥和私钥解释
  • 原文地址:https://www.cnblogs.com/jinhong/p/7095859.html
Copyright © 2020-2023  润新知