使用Spring的JdbcTemplate和BeanPropertyRowMapper完成的JDBC

先道要加上兩個包:Spring2.5下面的: spring.jarcommons-logging.jar

我用的DBCP數據源,Connection工具類我就沒寫了

具體的實例說明:

 

public class StuDaoImple implements StuDaointer {

 

    private JdbcTemplate jdbctemp = null;

 

    public StuDaoImple() {

       jdbctemp = new JdbcTemplate(SQLConnUtil.getDataSource());

    }

 

    // 所有添,刪,改的方法都可以用jdbctemp.update();方法

    public void addStu(Stu stu) {

       String sql = "insert into stu values(?,?,?)";

       Object[] obj = new Object[] { stu.getSname(), stu.getSsex(),new java.sql.Date(stu.getSbrith().getTime()) };

       jdbctemp.update(sql, obj);// 可以傳兩個參數,第一個參數是SQL語句,第二個參數是SQL語句的參數值

    }

    public void delStu(int sid) {

       String sql = "delete stu where s_id=" + sid;

       jdbctemp.update(sql);// 可以傳一個參數,就是沒有參數的SQL語句

    }

 

    public void updStu(Stu stu) {

       String sql = "update stu set s_name=?,s_sex=?,s_brith=? where s_id=?";

       Object[] obj = new Object[] { stu.getSname(), stu.getSsex(),new java.sql.Date(stu.getSbrith().getTime()), stu.getSid() };

       jdbctemp.update(sql, obj, new int[] { Types.VARCHAR, Types.VARCHAR,Types.DATE, Types.INTEGER });

       // 可以傳兩個參數,第一個參數是SQL語句,第二個參數是SQL語句的參數值,第三個參數是SQL語句參數值的SQL類型

    }

    //查詢1

    public List getAllStu() {

       String sql="select s_id,s_name,s_sex,s_brith from stu";

       List list=jdbctemp.query(sql, new RowMapper(){

 

           public Object mapRow(ResultSet arg0, int arg1) throws SQLException {

              Stu stu=new Stu();

              if(arg0!=null){

                  stu.setSid(arg0.getInt("s_id"));

                  stu.setSname(arg0.getString("s_name"));

                  stu.setSsex(arg0.getString("s_sex"));

                  stu.setSbrith(arg0.getDate("s_brith"));

              }

              return stu;

           }

           

       });

       return list;

    }

    

    //查詢2

    public List getAllStu(int id) {

       String sql="select s_id,s_name,s_sex,s_brith from stu where s_id<?";

       Object[] obj=new Object[]{id};

       //使用內部類

       List list=jdbctemp.query(sql,obj,new RowMapper(){

 

           public Object mapRow(ResultSet arg0, int arg1) throws SQLException {

              Stu stu=new Stu();

              if(arg0!=null){

                  stu.setSid(arg0.getInt("s_id"));

                  stu.setSname(arg0.getString("s_name"));

                  stu.setSsex(arg0.getString("s_sex"));

                  stu.setSbrith(arg0.getDate("s_brith"));

              }

              return stu;

           }

           

       });

       return null;

    }

    //查詢方式3(查詢一個對象)

    public Stu getOneStu(int id) {

       String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu where s_id=?";

       Object[] obj=new Object[]{id};

       Object stu=jdbctemp.queryForObject(sql, obj,new BeanPropertyRowMapper(Stu.class));

       //可以不用內部類,但是類的屬性字段名稱要數據庫中的字段名稱一樣或者數據庫字段名爲s_id類的名稱爲SId,

       //如果你沒有遵守這個規範則可以在select語句後面給數據庫字段名取別名

       //上面的查詢也可以這種方式

       return (Stu)stu;

    }

    //查詢方式4(查詢一個字段)

    public String getStuName(int sid) {

       String sql="select s_name as sname from stu where s_id=?";

       Object[] obj=new Object[]{sid};

       Object stuname=jdbctemp.queryForObject(sql, obj, String.class);

       //String.class即是指明一下結果的類型

       return (String) stuname;

    }

    //查詢方法5

    public int count(){

       String sql="select count(*) from stu";

       int m=jdbctemp.queryForInt(sql);

       return m;

    }

    //查詢方法查詢結果返回的是map,map中的keyselect中的列名(若有別名是是別名)value是該列所對應的值

    public Map getStuinMap(int sid){

       String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu where s_id=?";

       Object[] obj=new Object[]{sid};

       return jdbctemp.queryForMap(sql, obj);

    }

    //查詢方法若你不想用spring封裝好了的操作,你可以自己寫.Connection的打開和關閉它已經寫好了,其它的操作自己可以去完成

    public int getMyQuery(final Stu stu){

       

       Object obj=jdbctemp.execute(new ConnectionCallback(){

 

           public Object doInConnection(Connection conn) throws SQLException, DataAccessException {

              String sql="insert into stu values(?,?,?)";

              PreparedStatement pre=conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);//返回主鍵自動

              pre.setString(1, stu.getSname());

              pre.setString(2, stu.getSsex());

              pre.setDate(3, new java.sql.Date(stu.getSbrith().getTime()));

              pre.executeUpdate();

              ResultSet rs=pre.getGeneratedKeys();

              int m=0;

              if(rs.next()){

                  m=rs.getInt(1);

              }

              return m;  

           }      

       });

       return (Integer)obj;

    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章