zoukankan      html  css  js  c++  java
  • spring之jdbcTemplate操作(配合C3P0使用)

      1 spring框架一站式框架

        (1)针对javaee三层,每一层都有解决技术

        (2)在dao层,使用 jdbcTemplate

      2 spring对不同的持久化层技术都进行封装

        (1)jdbcTemplate对jdbc进行封装

      3 jdbcTemplate使用和dbutils使用很相似,都数据库进行crud操作

     

    CURD操作

      增加

       updata();方法

        1 导入jdbcTemplate使用的jar包

         

          

        2 创建对象,设置数据库信息

        3 创建jdbcTemplate对象,设置数据源

        4 调用jdbcTemplate对象里面的方法实现操作

        // 1 添加操作
        @Test
        public void add() {
    //         设置数据库信息
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql:///spring_day03");
            dataSource.setUsername("root");
            dataSource.setPassword("root");
    
    //         创建jdbcTemplate对象,设置数据源
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    
    //         调用jdbcTemplate对象里面的方法实现操作
            //创建sql语句
            String sql = "insert into user values(?,?)";
            int rows = jdbcTemplate.update(sql, "lucy","250");
            System.out.println(rows);
        }

      修改

       updata();方法

        //2 修改操作
        @Test
        public void update() {
            //设置数据库信息
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql:///spring_day03");
            dataSource.setUsername("root");
            dataSource.setPassword("root");
            
            //创建jdbcTemplate对象
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            
            //调用jdbcTemplate里面的方法实现 update方法
            String sql = "update user set password=? where username=?";
            int rows = jdbcTemplate.update(sql, "1314","lucy");
            System.out.println(rows);
        }

     

      删除

        updata();方法

        //3 删除操作
        @Test
        public void delete() {
            //设置数据库信息
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql:///spring_day03");
            dataSource.setUsername("root");
            dataSource.setPassword("root");
            
            //创建jdbcTemplate对象
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            
            //调用update方法实现删除
            String sql = "delete from user where username=?";
            int rows = jdbcTemplate.update(sql, "lucy");
            System.out.println(rows);
        }

      查询:

        jdbcTemplate.queryForObject();方法

        1 使用jdbcTemplate实现查询操作

        /*
         * QueryRunner runner = new QueryRuner(datasource);
         * 返回对象
         * runner.query(sql,new BeanHandler<User>(User.class));
         * 
         * 返回list集合
         * runner.query(sql,new BeanListHander<User>(User.class))
         * 
         * 1 在dbutils时候,有接口 ResultSetHandler
         * dbutils提供了针对不同的结果实现类
         * 
         * 2 jdbcTemplate实现查询,有接口 RowMapper,
         * jdbcTemplate针对这个接口没有提供实现类,得到不同的类型数据需要自己进行数据封装
         * 
         * */

        2 查询具体实现

          第一个 查询返回某一个值

        @Override
        public <T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException {
            return queryForObject(sql, getSingleColumnRowMapper(requiredType));
        }

          (1)第一个参数是sql语句

          (2)第二个参数 返回类型的class

        //1 查询表有多少条记录
        @Test
        public void testCount() {
            //设置数据库信息
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql:///spring_day03");
            dataSource.setUsername("root");
            dataSource.setPassword("root");
            
            //创建jdbcTemplate对象
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            
            //调用方法得到记录数
            String sql = "select count(*) from user";
            //调用jdbcTemplate的方法
            int count = jdbcTemplate.queryForObject(sql, Integer.class);
            System.out.println(count);
        }

          Jdbc实现

        //2 jdbc实现代码
        @Test
        public void testJDBC() {
            Connection conn = null;
            PreparedStatement psmt = null;
            ResultSet rs = null;
            //加载驱动
            try {
                Class.forName("com.mysql.jdbc.Driver");
                //创建连接
                conn = DriverManager.getConnection("jdbc:mysql:///spring_day03", "root", "root");
                //编写sql语句
                String sql = "select * from user where username=?";
                //预编译sql
                psmt = conn.prepareStatement(sql);
                //设置参数值
                psmt.setString(1, "lucy");
                //执行sql
                rs = psmt.executeQuery();
                //遍历结果集
                while(rs.next()) {
                    //得到返回结果值
                    String username = rs.getString("username");
                    String password = rs.getString("password");
                    //放到user对象里面
                    User user = new User();
                    user.setUsername(username);
                    user.setPassword(password);
                    
                    System.out.println(user);
                }
                
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    rs.close();
                    psmt.close();
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

          第二个 查询返回对象

            第一个参数是sql语句

            第二个参数是 RowMapper,是接口,类似于dbutils里面接口

            第三个参数是 可变参数

        //3 查询返回对象
        @Test
        public void testObject() {
            //设置数据库信息
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql:///spring_day03");
            dataSource.setUsername("root");
            dataSource.setPassword("root");
            
            //创建jdbcTemplate对象
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            
            //写sql语句,根据username查询
            String sql = "select * from user where username=?";
            //调用jdbcTemplate的方法实现
            //第二个参数是接口 RowMapper,需要自己写类实现接口,自己做数据封装
            User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "mary");
            System.out.println(user);
        }
    class MyRowMapper implements RowMapper<User> {
    
        @Override
        public User mapRow(ResultSet rs, int num) throws SQLException {
            // 1 从结果集里面把数据得到
            String username = rs.getString("username");
            String password = rs.getString("password");
            
            // 2 把得到数据封装到对象里面
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            
            return user;
        }
        
    }

          第三个 查询返回list集合

            //创建jdbcTemplate对象
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            
            //写sql语句
            String sql = "select * from user";
            //调用jdbcTemplate的方法实现
            List<User> list = jdbcTemplate.query(sql,new MyRowMapper());
            
            System.out.println(list);

    Spring配置连接池和dao使用jdbcTemplate

      1 spring配置c3p0连接池

        第一步 导入jar包

        

        第二步 创建spring配置文件,配置连接池

    //        ComboPooledDataSource dataSource = new ComboPooledDataSource();
    //        dataSource.setDriverClass("com.mysql.jdbc.Driver");
    //        dataSource.setJdbcUrl("jdbc:mysql:///spring_day03");
    //        dataSource.setUser("root");
    //        dataSource.setPassword("root");
        <!-- 配置c3p0连接池 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <!-- 注入属性值 -->
            <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
            <property name="jdbcUrl" value="jdbc:mysql:///spring_day03"></property>
            <property name="user" value="root"></property>
            <property name="password" value="root"></property>
        </bean>

      2 dao使用jdbcTemplate

      (1)创建service和dao,配置service和dao对象,在service注入dao对象

        <!-- 创建service和dao对象,在service注入dao对象 -->
        <bean id="userService" class="cn.itcast.c3p0.UserService">
            <!-- 注入dao对象 -->
            <property name="userDao" ref="userDao"></property>
        </bean>
        
        <bean id="userDao" class="cn.itcast.c3p0.UserDao">
            <!-- 注入jdbcTemplate对象 -->
            <property name="jdbcTemplate" ref="jdbcTemplate"></property>
        </bean>

        (2)创建jdbcTemplate对象,把模板对象注入到dao里面

        <bean id="userDao" class="cn.itcast.c3p0.UserDao">
            <!-- 注入jdbcTemplate对象 -->
            <property name="jdbcTemplate" ref="jdbcTemplate"></property>
        </bean>
        <!-- 创建jdbcTemplate对象 -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    public class UserDao {
        
        //得到JdbcTemplate对象
        private JdbcTemplate jdbcTemplate;
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
        //添加操作
        public void add() {
            //创建jdbcTemplate对象
    //        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            String sql = "insert into user values(?,?)";
            jdbcTemplate.update(sql, "李雷","520");
        }
    
    }

        (3)在jdbcTemplate对象里面注入dataSource

        <!-- 创建jdbcTemplate对象 -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!-- 把dataSource传递到模板对象里面 -->
            <property name="dataSource" ref="dataSource"></property>
        </bean>
  • 相关阅读:
    全区停水,测什么时候来水。
    和电脑打国标麻将,一定要注意
    这是一个可怕的交易
    起一卦,还是这样。什么时候能好起来。
    Linux内核源码真是个好东西
    命宫——天机化忌
    bzoj1024[SCOI2009]生日快乐
    bzoj2561最小生成树
    bzoj2423[HAOI2010]最长公共子序列
    bzoj2705[SDOI2012]Longge的问题
  • 原文地址:https://www.cnblogs.com/kpsmile/p/10127663.html
Copyright © 2011-2022 走看看