1. 程式人生 > >Spring JDBC Template物件的增刪改查

Spring JDBC Template物件的增刪改查

Spring JDBC

* Spring框架對JDBC的簡單封裝。提供了一個JDBCTemplate物件簡化JDBC的開發
* 步驟:
    1. 匯入jar包
    2. 建立JdbcTemplate物件。依賴於資料來源DataSource
        * JdbcTemplate template = new JdbcTemplate(ds);

    3. 呼叫JdbcTemplate的方法來完成CRUD的操作
        * update():執行DML語句。增、刪、改語句
        * queryForMap():查詢結果將結果集封裝為map集合,將列名作為key,將值作為value 將這條記錄封裝為一個map集合
            * 注意:這個方法查詢的結果集長度只能是1
        * queryForList():查詢結果將結果集封裝為list集合
            * 注意:將每一條記錄封裝為一個Map集合,再將Map集合裝載到List集合中
        * query():查詢結果,將結果封裝為JavaBean物件
            * query的引數:RowMapper
                * 一般我們使用BeanPropertyRowMapper實現類。可以完成資料到JavaBean的自動封裝
                * new BeanPropertyRowMapper<型別>(型別.class)
        * queryForObject:查詢結果,將結果封裝為物件
            * 一般用於聚合函式的查詢

    4. 練習:
        * 需求:
            1. 修改1號資料的 salary 為 10000
            2. 新增一條記錄
            3. 刪除剛才新增的記錄
            4. 查詢id為1的記錄,將其封裝為Map集合
            5. 查詢所有記錄,將其封裝為List
            6. 查詢所有記錄,將其封裝為Emp物件的List集合
            7. 查詢總記錄數

        * 程式碼:

            import cn.itcast.domain.Emp;
            import cn.itcast.utils.JDBCUtils;
            import org.junit.Test;
            import org.springframework.jdbc.core.BeanPropertyRowMapper;
            import org.springframework.jdbc.core.JdbcTemplate;
            import org.springframework.jdbc.core.RowMapper;

            import java.sql.Date;
            import java.sql.ResultSet;
            import java.sql.SQLException;
            import java.util.List;
            import java.util.Map;

            public class JdbcTemplateDemo2 {

                //Junit單元測試,可以讓方法獨立執行


                //1. 獲取JDBCTemplate物件
                private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
                /**
                 * 1. 修改1號資料的 salary 為 10000
                 */
                @Test
                public void test1(){

                    //2. 定義sql
                    String sql = "update emp set salary = 10000 where id = 1001";
                    //3. 執行sql
                    int count = template.update(sql);
                    System.out.println(count);
                }

                /**
                 * 2. 新增一條記錄
                 */
                @Test
                public void test2(){
                    String sql = "insert into emp(id,ename,dept_id) values(?,?,?)";
                    int count = template.update(sql, 1015, "郭靖", 10);
                    System.out.println(count);

                }

                /**
                 * 3.刪除剛才新增的記錄
                 */
                @Test
                public void test3(){
                    String sql = "delete from emp where id = ?";
                    int count = template.update(sql, 1015);
                    System.out.println(count);
                }

                /**
                 * 4.查詢id為1001的記錄,將其封裝為Map集合
                 * 注意:這個方法查詢的結果集長度只能是1
                 */
                @Test
                public void test4(){
                    String sql = "select * from emp where id = ? or id = ?";
                    Map<String, Object> map = template.queryForMap(sql, 1001,1002);
                    System.out.println(map);
                    //{id=1001, ename=孫悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.00, bonus=null, dept_id=20}

                }

                /**
                 * 5. 查詢所有記錄,將其封裝為List
                 */
                @Test
                public void test5(){
                    String sql = "select * from emp";
                    List<Map<String, Object>> list = template.queryForList(sql);

                    for (Map<String, Object> stringObjectMap : list) {
                        System.out.println(stringObjectMap);
                    }
                }

                /**
                 * 6. 查詢所有記錄,將其封裝為Emp物件的List集合
                 */

                @Test
                public void test6(){
                    String sql = "select * from emp";
                    List<Emp> list = template.query(sql, new RowMapper<Emp>() {

                        @Override
                        public Emp mapRow(ResultSet rs, int i) throws SQLException {
                            Emp emp = new Emp();
                            int id = rs.getInt("id");
                            String ename = rs.getString("ename");
                            int job_id = rs.getInt("job_id");
                            int mgr = rs.getInt("mgr");
                            Date joindate = rs.getDate("joindate");
                            double salary = rs.getDouble("salary");
                            double bonus = rs.getDouble("bonus");
                            int dept_id = rs.getInt("dept_id");

                            emp.setId(id);
                            emp.setEname(ename);
                            emp.setJob_id(job_id);
                            emp.setMgr(mgr);
                            emp.setJoindate(joindate);
                            emp.setSalary(salary);
                            emp.setBonus(bonus);
                            emp.setDept_id(dept_id);

                            return emp;
                        }
                    });


                    for (Emp emp : list) {
                        System.out.println(emp);
                    }
                }

                /**
                 * 6. 查詢所有記錄,將其封裝為Emp物件的List集合
                 */

                @Test
                public void test6_2(){
                    String sql = "select * from emp";
                    List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
                    for (Emp emp : list) {
                        System.out.println(emp);
                    }
                }

                /**
                 * 7. 查詢總記錄數
                 */

                @Test
                public void test7(){
                    String sql = "select count(id) from emp";
                    Long total = template.queryForObject(sql, Long.class);
                    System.out.println(total);
                }

            }