(转)见证spring jdbc

一直对Spring都处于一个略懂的阶段,最近在公司看到一个框架,是用spring搞的,写得蛮强大的!其中增删改主要用namedParameterJdbcTemplate 和BeanPropertySqlParameterSource两个类!

Java代码 复制代码  收藏代码
  1. 见证Spring Jdbc的强大  
  2. Spring 不仅仅是一个IoC container。  
  3.   
  4. 其提供的Spring Jdbc提供了一层对jdbc很薄的封装,功能却是异常强大。  
  5.   
  6.    
  7.   
  8. 不说多了,直接贴代码  
  9.   
  10.    
  11.   
  12. 1、Template模式的使用,使我们只关心,sql, 输入参数,输出映射。  
  13.   
  14. 2new BeanPropertySqlParameterSource(t) 直接把bean转成输入参数。  
  15.   
  16. 3、ParameterizedBeanPropertyRowMapper.newInstance(UserInfo.class)直接将bean转成输出映射。  
  17.   
  18. 4、一个dao根据输入参数不同,动态生成多条sql语句。很有一点ibatis的味道。  
  19.   
  20. 5、学习曲线低,会sql和jdbc的可以直接写。适合“你请到了只会写jsp和sql的极品,又想让他明天开始干活..... ”  
  21.   
  22. @Component  
  23. public class UserInfoDaoJdbcImpl extends SimpleJdbcDaoSupport implements UserInfoDao {  
  24.     public int deleteEntity(UserInfo t) throws DataAccessException {  
  25.         if (null != t.getId()) {  
  26.             return super.getSimpleJdbcTemplate().update("delete from user_info where id=:id", t.getId());  
  27.         } else if (null != t.getMap().get("ids")) {  
  28.             return super.getSimpleJdbcTemplate().update(  
  29.                     "delete from user_info where id in (" + t.getMap().get("ids") + ")", t.getId());  
  30.         } else {  
  31.             return -1;  
  32.         }  
  33.     }  
  34.     public Integer insertEntity(UserInfo t) throws DataAccessException {  
  35.         String sql = "insert into user_info (user_name, password, birthday, age) values (:user_name, :password, :birthday, :age)";  
  36.         return super.getSimpleJdbcTemplate().update(sql, new BeanPropertySqlParameterSource(t));  
  37.     }  
  38.     public UserInfo selectEntity(UserInfo t) throws DataAccessException {  
  39.         List<String> sqls = new ArrayList<String>();  
  40.         sqls.add("select * from user_info where 1=1");  
  41.         if (null != t.getId()) {  
  42.             sqls.add("and id=:id");  
  43.         }  
  44.         if (null != t.getUser_name()) {  
  45.             sqls.add("and login_name=:login_name");  
  46.         }  
  47.         if (null != t.getPassword()) {  
  48.             sqls.add("and password=:password");  
  49.         }  
  50.         String sql = StringUtils.join(sqls, " ");  
  51.         List<UserInfo> userInfoList = super.getSimpleJdbcTemplate().query(sql,  
  52.                 ParameterizedBeanPropertyRowMapper.newInstance(UserInfo.class), new BeanPropertySqlParameterSource(t));  
  53.         int listSize = userInfoList.size();  
  54.         if (1 == listSize) {  
  55.             return userInfoList.get(0);  
  56.         } else {  
  57.             return null;  
  58.         }  
  59.     }  
  60.     public Long selectEntityCount(UserInfo t) throws DataAccessException {  
  61.         List<String> sqls = new ArrayList<String>();  
  62.         sqls.add("select count(*) from user_info where 1=1");  
  63.         if (null != t.getId()) {  
  64.             sqls.add("and id=:id");  
  65.         }  
  66.         if (null != t.getUser_name()) {  
  67.             sqls.add("and login_name=:login_name");  
  68.         }  
  69.         if (null != t.getPassword()) {  
  70.             sqls.add("and password=:password");  
  71.         }  
  72.         String sql = StringUtils.join(sqls, " ");  
  73.         return super.getSimpleJdbcTemplate().queryForLong(sql, new BeanPropertySqlParameterSource(t));  
  74.     }  
  75.     public List<UserInfo> selectEntityList(UserInfo t) throws DataAccessException {  
  76.         List<String> sqls = new ArrayList<String>();  
  77.         sqls.add("select * from user_info where 1=1");  
  78.         if (null != t.getId()) {  
  79.             sqls.add("and id=:id");  
  80.         }  
  81.         if (null != t.getUser_name()) {  
  82.             sqls.add("and login_name=:login_name");  
  83.         }  
  84.         if (null != t.getPassword()) {  
  85.             sqls.add("and password=:password");  
  86.         }  
  87.         String sql = StringUtils.join(sqls, " ");  
  88.         return super.getSimpleJdbcTemplate().query(sql, ParameterizedBeanPropertyRowMapper.newInstance(UserInfo.class),  
  89.                 new BeanPropertySqlParameterSource(t));  
  90.     }  
  91.     public List<UserInfo> selectEntityPaginatedList(UserInfo t) throws DataAccessException {  
  92.         // TODO Auto-generated method stub  
  93.         return null;  
  94.     }  
  95.     public int updateEntity(UserInfo t) throws DataAccessException {  
  96.         List<String> sqls = new ArrayList<String>();  
  97.         if (null != t.getAge()) {  
  98.             sqls.add(" age=:age");  
  99.         }  
  100.         if (null != t.getBirthday()) {  
  101.             sqls.add(" birthday=:birthday");  
  102.         }  
  103.         String sql = StringUtils.join(new String[] { "update user_info set ", StringUtils.join(sqls.toArray(), ","),  
  104.                 " where id=:id" });  
  105.         return super.getSimpleJdbcTemplate().update(sql, new BeanPropertySqlParameterSource(t));  
  106.     }  
  107. }  
见证Spring Jdbc的强大
Spring 不仅仅是一个IoC container。

其提供的Spring Jdbc提供了一层对jdbc很薄的封装,功能却是异常强大。

 

不说多了,直接贴代码

 

1、Template模式的使用,使我们只关心,sql, 输入参数,输出映射。

2、new BeanPropertySqlParameterSource(t) 直接把bean转成输入参数。

3、ParameterizedBeanPropertyRowMapper.newInstance(UserInfo.class)直接将bean转成输出映射。

4、一个dao根据输入参数不同,动态生成多条sql语句。很有一点ibatis的味道。

5、学习曲线低,会sql和jdbc的可以直接写。适合“你请到了只会写jsp和sql的极品,又想让他明天开始干活..... ”

@Component
public class UserInfoDaoJdbcImpl extends SimpleJdbcDaoSupport implements UserInfoDao {
    public int deleteEntity(UserInfo t) throws DataAccessException {
        if (null != t.getId()) {
            return super.getSimpleJdbcTemplate().update("delete from user_info where id=:id", t.getId());
        } else if (null != t.getMap().get("ids")) {
            return super.getSimpleJdbcTemplate().update(
                    "delete from user_info where id in (" + t.getMap().get("ids") + ")", t.getId());
        } else {
            return -1;
        }
    }
    public Integer insertEntity(UserInfo t) throws DataAccessException {
        String sql = "insert into user_info (user_name, password, birthday, age) values (:user_name, :password, :birthday, :age)";
        return super.getSimpleJdbcTemplate().update(sql, new BeanPropertySqlParameterSource(t));
    }
    public UserInfo selectEntity(UserInfo t) throws DataAccessException {
        List<String> sqls = new ArrayList<String>();
        sqls.add("select * from user_info where 1=1");
        if (null != t.getId()) {
            sqls.add("and id=:id");
        }
        if (null != t.getUser_name()) {
            sqls.add("and login_name=:login_name");
        }
        if (null != t.getPassword()) {
            sqls.add("and password=:password");
        }
        String sql = StringUtils.join(sqls, " ");
        List<UserInfo> userInfoList = super.getSimpleJdbcTemplate().query(sql,
                ParameterizedBeanPropertyRowMapper.newInstance(UserInfo.class), new BeanPropertySqlParameterSource(t));
        int listSize = userInfoList.size();
        if (1 == listSize) {
            return userInfoList.get(0);
        } else {
            return null;
        }
    }
    public Long selectEntityCount(UserInfo t) throws DataAccessException {
        List<String> sqls = new ArrayList<String>();
        sqls.add("select count(*) from user_info where 1=1");
        if (null != t.getId()) {
            sqls.add("and id=:id");
        }
        if (null != t.getUser_name()) {
            sqls.add("and login_name=:login_name");
        }
        if (null != t.getPassword()) {
            sqls.add("and password=:password");
        }
        String sql = StringUtils.join(sqls, " ");
        return super.getSimpleJdbcTemplate().queryForLong(sql, new BeanPropertySqlParameterSource(t));
    }
    public List<UserInfo> selectEntityList(UserInfo t) throws DataAccessException {
        List<String> sqls = new ArrayList<String>();
        sqls.add("select * from user_info where 1=1");
        if (null != t.getId()) {
            sqls.add("and id=:id");
        }
        if (null != t.getUser_name()) {
            sqls.add("and login_name=:login_name");
        }
        if (null != t.getPassword()) {
            sqls.add("and password=:password");
        }
        String sql = StringUtils.join(sqls, " ");
        return super.getSimpleJdbcTemplate().query(sql, ParameterizedBeanPropertyRowMapper.newInstance(UserInfo.class),
                new BeanPropertySqlParameterSource(t));
    }
    public List<UserInfo> selectEntityPaginatedList(UserInfo t) throws DataAccessException {
        // TODO Auto-generated method stub
        return null;
    }
    public int updateEntity(UserInfo t) throws DataAccessException {
        List<String> sqls = new ArrayList<String>();
        if (null != t.getAge()) {
            sqls.add(" age=:age");
        }
        if (null != t.getBirthday()) {
            sqls.add(" birthday=:birthday");
        }
        String sql = StringUtils.join(new String[] { "update user_info set ", StringUtils.join(sqls.toArray(), ","),
                " where id=:id" });
        return super.getSimpleJdbcTemplate().update(sql, new BeanPropertySqlParameterSource(t));
    }
}

Java代码 复制代码  收藏代码
  1.   
 
Java代码 复制代码  收藏代码
  1. <pre class="java" name="code">使用Spring的NamedParameterJdbcTemplate完成DAO操作    
  2.   
  3. 2009-06-30 12:42:24|  分类: 技术点滴 |字号 订阅  
  4. NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干,NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。  
  5. public Object queryForObject(String sql, Map paramMap, RowMapper rowMapper)  
  6. public Object queryForObject(String sql, SqlParameterSource paramSource, RowMapper rowMapper)  
  7.        SqlParameterSource的两个主要实现MapSqlParameterSource  
  8.        和BeanPropertySqlParameterSource  
  9. public int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder)保存数据获得主键。   
  10. 实例说明:  
  11. /** 
  12.  * 一、NamedParameterJdbcTemplate提供了命名参数,用:x代替了? 
  13.  * NamedParameterJdbcTemplate传参数可以用map或者SqlParameterSource 
  14.  * 用map的好处是:x,x的值可以自由取,但是所有参数的值都必须要放到map中去,其中的key为:后面的名称,value是你传的值 
  15.  * 用SqlParameterSource的好处是不用一个个的赋值,但是:x中的x的值必须和对象的属性名称一样 
  16.   
  17.  * 二、使用KeyHolder keyholder=new GeneratedKeyHolder(); 
  18.    namedjdbctemp.update(sql, ps,keyholder);这个参数可以获得主键生成值 
  19.  */  
  20. public class StuDaoImple implements StuDaointer{   
  21.     private NamedParameterJdbcTemplate namedjdbctemp;  
  22.    
  23.     public StuDaoImple(){  
  24.        namedjdbctemp=new NamedParameterJdbcTemplate(SQLConnUtil.getDataSource());  
  25.     }// SQLConnUtil为JDBC工具类,提供了得到数据源的静态方法  
  26.     /* 
  27.      * 这里会用到NamedParameterJdbcTemplate两个好处: 
  28.      * 1,不用一个个的为参数赋值。 
  29.      * 2,可以轻易的得到主键自动增长值 
  30.      */  
  31.     public void addStu(Stu stu) {  
  32.        String sql="insert into stu values(:sname,:ssex,:sbrith)";  
  33.        //:后面的名称必须和stu属性名称一样  
  34.        SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);  
  35.        KeyHolder keyholder=new GeneratedKeyHolder();  
  36.        namedjdbctemp.update(sql, ps,keyholder);  
  37.        //加上KeyHolder这个参数可以得到添加后主键的值  
  38.        int m=keyholder.getKey().intValue();  
  39.        System.out.println(m);  
  40.        //Map map=keyholder.getKeys();//这样可以得到联合主键的值  
  41.        //keyholder.getKeyList();//这样可以得到一些主主键值,若一次添加好几条记录  
  42.     }  
  43.     public int count() {  
  44.        String sql="select count(*) from stu";  
  45.        //可以通过NamedParameterJdbcTemplate得到JdbcTemplate  
  46.        int m=namedjdbctemp.getJdbcOperations().queryForInt(sql);  
  47.        return m;  
  48.     }  
  49.    
  50.     /* 
  51.      * 这里会用到NamedParameterJdbcTemplate另一个好处: 
  52.      * 位置参数 
  53.      */  
  54.     public void delStu(int sid) {  
  55.        String sql="delete stu where s_id=:id";  
  56.        Map map=new HashMap();  
  57.        map.put("id", sid);  
  58.        namedjdbctemp.update(sql, map);  
  59.     }  
  60.     public List getAllStu() {  
  61.        String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu";  
  62.        List list=namedjdbctemp.getJdbcOperations().query(sql,new BeanPropertyRowMapper(Stu.class));  
  63.        return list;  
  64.     }  
  65.     public List getAllStu(Stu stu) {  
  66.        String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu where s_id=:sid";  
  67.        SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);  
  68.        return namedjdbctemp.query(sql, ps, new BeanPropertyRowMapper(Stu.class));  
  69.     }  
  70.     public Stu getOneStu(Stu stu) {  
  71.        String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu where s_id=:sid";  
  72.        SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);  
  73.        return (Stu)namedjdbctemp.queryForObject(sql, ps, new BeanPropertyRowMapper(Stu.class));  
  74.     }  
  75.     public String getStuName(Stu stu) {  
  76.        String sql="select s_name as sname from stu where s_name=:sname";  
  77.        SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);  
  78.        return (String)namedjdbctemp.queryForObject(sql, ps, String.class);  
  79.     }  
  80.     public void updStu(Stu stu) {  
  81.        String sql="update stu set s_name=:sname,s_sex=:ssex,s_brith=:sbrith where s_id=:sid";  
  82.        SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);  
  83.        namedjdbctemp.update(sql, ps);  
  84.     }  
  85. }</pre>  

猜你喜欢

转载自wo232625.iteye.com/blog/2288052