1. 程式人生 > >Spring的JDBCTemplate的基本程式碼操作,這裡沒用c3p0連線池,用的自帶連線池。

Spring的JDBCTemplate的基本程式碼操作,這裡沒用c3p0連線池,用的自帶連線池。

Spring的jdbcTemplate操作

1.Spring 框架一站式框架

  • 針對 JavaEE 三層,每一層都有解決技術
  • 在dao層,使用jdbcTemplate

2.Spring 對不同持久化技術的支援

  • Spring為各種支援的持久化技術,都提供了簡單操作的模板和回撥。
ORM持久化技術 模板類
JDBC org.springframework.jdbc.core.JdbcTemplate
Hibernate5.0 org.springframework.orm.hibernate5.HibernateTemplate
IBatis(MyBatis) org.springframework.orm.ibatis.SqlMapClientTemplate
JPA org.springframework.orm.jpa.JpaTemplate


jdbcTemplate 對 jdbc進行封裝

3.jdbcTemplate 使用和Apache公司的DBUtils使用很相似,都是對資料庫進行crud操作。

使用jdbcTemplate時要先導包。這裡必須匯入spring-tx和jdbcTemplate這兩個包,缺一不可,雖然spring-tx是關於事務管理的包,但是裡面也有jdbcTemplate對tx的依賴。

下載地址

最後別忘了匯入資料庫驅動的包

下載地址

jdbcTemplate 依賴連線池(這裡用到的不是c3p0連線池)獲取資料庫連線,所以必須先構造連線池。

下面介紹四個操作:增刪改查

增加

    @Test
    public void add() {
        //因為JDBCTemplate是依賴資料庫連線池的,所以先構造連線池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver"
); driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template"); driverManagerDataSource.setUsername("root"); driverManagerDataSource.setPassword(""); //建立jdbctemplate物件,設定資料來源 JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource); //呼叫jdbctemplate物件裡面的方法實現操作 String sql="insert into user values(?,?)"; int rows=jdbcTemplate.update(sql, "FireLang","123456"); System.out.println(rows); }

注意上面程式碼中的資料庫url是jdbc:mysql://localhost:3306/template,其實這樣寫也可以jdbc:mysql:///template

修改

    @Test
    public void update(){
        //因為JDBCTemplate是依賴資料庫連線池的,所以先構造連線池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");

        //建立jdbctemplate物件,設定資料來源
        JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

        //呼叫jdbctemplate物件裡面的方法實現操作
        String sql="update user set password=? where name=?";
        int rows=jdbcTemplate.update(sql, "1314520","FireLang");
        System.out.println(rows);
    }

刪除

    @Test
    public void delete(){
        //因為JDBCTemplate是依賴資料庫連線池的,所以先構造連線池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");

        //建立jdbctemplate物件,設定資料來源
        JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

        //呼叫jdbctemplate物件裡面的方法實現操作
        String sql="delete from user where name=?";
        int rows=jdbcTemplate.update(sql, "LangShen");
        System.out.println(rows);
    }

查詢

  • 使用jdbcTemplate實現查詢操作

  • jdbcTemplate實現查詢,有介面RowMapper

  • jdbcTemplate針對這個介面並沒有提供實現類,得到不同的型別資料需要自己進行資料封裝

查詢單值:

    @Test
    public void showSingleTyepValue(){
        //因為JDBCTemplate是依賴資料庫連線池的,所以先構造連線池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");

        //建立jdbctemplate物件,設定資料來源
        JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

        //呼叫jdbctemplate物件裡面的方法實現操作
        String sql="select count(name) from user";
        int count=jdbcTemplate.queryForObject(sql, Integer.class);
        System.out.println(count);
    }

查詢物件:

    @Test
    public void showSingleObject(){
        //因為JDBCTemplate是依賴資料庫連線池的,所以先構造連線池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");

        //建立jdbctemplate物件,設定資料來源
        JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

        //呼叫jdbctemplate物件裡面的方法實現操作
        String sql="select * from user where name=?";//這裡查詢出來的是單個物件。
        User temp=jdbcTemplate.queryForObject(sql, new RowMapper<User>(){

            @Override
            public User mapRow(ResultSet result, int num) throws SQLException {//這裡的num表示行號,比如我查詢出了幾個資料,而num代表ResultSet裡面的行號。
                User user=new User(result.getString("name"), result.getString("password"));
                return user;
            }

        },"FireLang");
        System.out.println(temp);
    }

查詢返回List集合

    @Test
    public  void showList(){
        //因為JDBCTemplate是依賴資料庫連線池的,所以先構造連線池
        DriverManagerDataSource driverManagerDataSource=new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/template");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("");

        //建立jdbctemplate物件,設定資料來源
        JdbcTemplate jdbcTemplate=new JdbcTemplate(driverManagerDataSource);

        //呼叫jdbctemplate物件裡面的方法實現操作
        String sql="select * from user";//查詢所有
        List<User> templist=jdbcTemplate.query(sql, new RowMapper<User>(){

            @Override
            public User mapRow(ResultSet result, int num) throws SQLException {//這裡的num表示行號,比如我查詢出了幾個資料,而num代表ResultSet裡面的行號。
                System.out.println("當前行數: "+num);
                User user=new User(result.getString("name"), result.getString("password"));
                return user;
            }

        });
        System.out.println(templist);
    }

/*
輸出結果:

當前行數: 0
當前行數: 1
[User [name=FireLang, password=1314520], User [name=LangShen, password=123456]]

*/