• spring之jdbcTemplate


    spring的另一个功能模块data access对于数据库的支持

      spring data access第一个helloword案例:

     使用java程序实现访问配置

    1.导包

    2.测试案例

        @Test
    	public void test01(){
    		DriverManagerDataSource dataSource=new DriverManagerDataSource();
    		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    		dataSource.setUrl("jdbc:mysql:///springtest");
    		dataSource.setUsername("root");
    		dataSource.setPassword("123");
    		JdbcTemplate jdbcTemplate=new JdbcTemplate();
    		jdbcTemplate.setDataSource(dataSource);
    		String sql="insert into t_user values(1,'张三',123,'男')";
    		jdbcTemplate.execute(sql);
    		
    	}
    

      把创建对象交给spring来控制,这样就需要在applicationContext.xml文件中配置数据访问

    applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:c="http://www.springframework.org/schema/c"
    	xmlns:p="http://www.springframework.org/schema/p"
        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.xsd
    						http://www.springframework.org/schema/aop
    						http://www.springframework.org/schema/aop/spring-aop.xsd
    						http://www.springframework.org/schema/tx 
    						http://www.springframework.org/schema/tx/spring-tx.xsd">
    	<!-- 创建数据源 -->
    	 <bean id="driverManagerDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    	 	<!-- 配置数据库驱动 -->
    		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    		<property name="url" value="jdbc:mysql:///springtest"></property>
    		<property name="username" value="root"></property>
    		<property name="password" value="123"></property>
    	</bean>
    	
    	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    			<!-- 注入数据源 -->
    			<property name="dataSource" ref="driverManagerDataSource"></property>
    	</bean>
    
    </beans>
    

      测试方法;

    @RunWith(SpringJUnit4ClassRunner.class)  //整合junit4
    @ContextConfiguration(locations="classpath:applicationContext.xml")//使用注解加载配置文件
    public class SpringJDBCTest {
    	@Autowired
    	private JdbcTemplate jdbcTemplate;
    	@Test
    	public void test01(){
    		String sql="insert into t_user values(2,'张三',123,'男')";
    		jdbcTemplate.execute(sql);
    		
    	}
    }
    

      CRUD操作

        创建表

    CREATE DATABASE springtest;
    USE springtest;
    CREATE TABLE t_user(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20),
    age INT,
    sex VARCHAR(20)
    )
    INSERT INTO t_user VALUES(NULL,'tom',20,'');
    INSERT INTO t_user VALUES(NULL,'fox',30,'');
    INSERT INTO t_user VALUES(NULL,'tony',40,'');
    创建表

        cud操作

    @RunWith(SpringJUnit4ClassRunner.class)  //整合junit4
    @ContextConfiguration(locations="classpath:applicationContext.xml")//使用注解加载配置文件
    public class SpringJDBCTest {
        @Autowired
        private JdbcTemplate jdbcTemplate;
        @Test    //添加数据
        public void insertData(){
            //String sql="insert into t_user values(4,'张三',123,'男')";
            //jdbcTemplate.execute(sql);
            String sql="insert into t_user values(?,?,?,?)";
            jdbcTemplate.update(sql,5,"王五",66,"女");
            
        }
        @Test    //删除数据
        public void deleteData(){
            //String sql="delete from  t_user where id=4 ";
            //jdbcTemplate.execute(sql);
            String sql="delete from  t_user where id=? ";
            jdbcTemplate.update(sql,5);
        }
        @Test    //修改数据
        public void updateData(){
            /*String sql="update t_user set name='李四' where id=3 ";
            jdbcTemplate.execute(sql);*/
            String sql="update t_user set name=? where id=? ";
            jdbcTemplate.update(sql,"jj",1);
        }
    }
    增删改

         查询操作

    对没有封装的数据进行查询

    @Test    //查询简单的一格数据
        public void seachOne3(){
            List<Map<String, Object>> list = jdbcTemplate.queryForObject("select * from t_user",new RowMapper<List<Map<String,Object>>>() {
                List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
                @Override
                public List<Map<String,Object>> mapRow(ResultSet rs, int rowNum) throws SQLException {
                    System.out.println(rowNum);
                    System.out.println("------");
                    Map<String,Object> map=null;
                    while(rs.next()){
                        map=new HashMap<String,Object>();
                        map.put("id",rs.getInt("id"));
                        map.put("name",rs.getString("name"));
                        map.put("age",rs.getInt("age"));
                        map.put("sex",rs.getString("sex"));
                        list.add(map);
                    }
                    return list;
                }
            });
            System.out.println(list);
        }
    QueryForObject
    @Test    //查询简单的一格数据
        public void seachOne3(){
            List<Map<String, Object>> list = jdbcTemplate.query("select * from t_user",new RowMapper<Map<String,Object>>() {
                List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
                @Override
                public Map<String,Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
                    Map<String,Object> map=new HashMap<String,Object>();
                        map.put("id",rs.getInt("id"));
                        map.put("name",rs.getString("name"));
                        map.put("age",rs.getInt("age"));
                        map.put("sex",rs.getString("sex"));
                    return map;
                }
            });
            System.out.println(list);
        }
    query

    对封装的数据进行查询

    @Test    //查询简单的一格数据
        public void seachOne2(){
            List<User> list = jdbcTemplate.queryForObject("select * from t_user",new RowMapper<List<User>>() {
                List<User> list=new ArrayList<User>();
                @Override
                public List<User> mapRow(ResultSet rs, int rowNum) throws SQLException {
                    //System.out.println(rs.getRow());
                        //do {
                            User u=new User();
                            u.setId(rs.getInt("id"));
                            u.setName(rs.getString("name"));
                            u.setAge(rs.getInt("age"));
                            u.setSex(rs.getString("sex"));
                            list.add(u);
                        //} while (rs.next());
                        return list;
                }
            });
            System.out.println(list);
        }
    queryForObjcet
    @Test    //查询简单的一格数据
        public void seachOne4(){
            List<User> list = jdbcTemplate.query("select * from t_user",new RowMapper<User>() {
                List<User> list=new ArrayList<User>();
                @Override
                public User mapRow(ResultSet rs, int rowNum) throws SQLException {
                            User u=new User();
                            u.setId(rs.getInt("id"));
                            u.setName(rs.getString("name"));
                            u.setAge(rs.getInt("age"));
                            u.setSex(rs.getString("sex"));
                            
                        return u;
                }
            });
            System.out.println(list);
        }
    query

    query 和queryForObject的区别

    query是底层会对查询出来的数据进行处理,比如查询结果为空会返回为空,并不会抛异常;query的返回值会根据第二个参数来对返回进行区分

    @Override
    	public void query(String sql, RowCallbackHandler rch) throws DataAccessException {   
    		query(sql, new RowCallbackHandlerResultSetExtractor(rch));
    	}
    
    	@Override
    	public <T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException { 返回值为T的集合
    		return query(sql, new RowMapperResultSetExtractor<T>(rowMapper));
    	}
    

      

    @Override
    	public List<T> extractData(ResultSet rs) throws SQLException {
    		List<T> results = (this.rowsExpected > 0 ? new ArrayList<T>(this.rowsExpected) : new ArrayList<T>());
    		int rowNum = 0;//设置为第零行开始
    		while (rs.next()) {//没有数据  并不会报错  只是会返回为null
    			results.add(this.rowMapper.mapRow(rs, rowNum++));
    		}
    		return results;
    	}
    

      queryForObject在查询时候如果没有查询出数据则会抛出异常  因为会对results进行判断   如果为空则会抛出异常.

    public static <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {
    		int size = (results != null ? results.size() : 0);
    		if (size == 0) {
    			throw new EmptyResultDataAccessException(1);
    		}
    		if (results.size() > 1) {
    			throw new IncorrectResultSizeDataAccessException(1, size);
    		}
    		return results.iterator().next();
    	}

       Bean查询  类似于beanUtils对于javabean类进行数据赋值

    public class BeanPropertyRowMapper<T> implements RowMapper<T>
    

      

    @Test	//使用bean来进行查询数据
    	public void seachBean(){
    		List<User> list = jdbcTemplate.query("select * from t_user",new BeanPropertyRowMapper<User>(User.class));
    		System.out.println(list);
    	}
    

      

  • 相关阅读:
    PDF 补丁丁 0.4.1.820 测试版发布:统一PDF的页面尺寸
    PDF 补丁丁 0.4.1.804 测试版发布:合并文件夹的图片和PDF文件,自由生成多层次书签
    PDF 补丁丁 0.4.1.728 测试版发布
    PDF 补丁丁 0.4.1.688 测试版发布(请务必用其替换 682 测试版)
    Django的model form组件
    Django-admin管理工具
    django-debug-toolbar
    jQuery和js页面加载完成之后就执行的两种方法
    Python实现发送邮件
    cookie与session组件
  • 原文地址:https://www.cnblogs.com/fjkgrbk/p/spring_JDBCTemplate.html
Copyright © 2020-2023  润新知