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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM