`
huibin
  • 浏览: 756750 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

使用Spring的JdbcTemplate和BeanPropertyRowMapper完成的JDBC

阅读更多
先道要加上两个包:Spring2.5下面的: spring.jar和commons-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;
    }
    //查询方法6 查询结果返回的是map,map中的key为select中的列名(若有别名是是别名)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);
    }
    //查询方法7 若你不想用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;
    }
}
分享到:
评论
1 楼 chrislee1982 2010-05-16  
这东西应该不是在所有情况下都能通用的!
如果在多表链接的时候,两个表的字段中都用id,或者name的列名。
映射的时候肯定就会乱掉。
最近写.net的东西的时候,就想到这样的问题。写了个通用的,需要在每个类中加上辅助的信息,以防止多表链接的时候这样列名冲突的情况

相关推荐

    SSH笔记-Spring JdbcTemplate

    3. **结果集处理**:对于查询操作,JdbcTemplate可以将结果集映射到Java对象,这通常通过实现RowMapper接口或使用BeanPropertyRowMapper类来完成。RowMapper允许自定义对象映射逻辑,而BeanPropertyRowMapper则会...

    SpringJDBC.rar_SpringJDBC_spring jdbc

    `JdbcTemplate`是Spring JDBC提供的主要接口,它提供了一组模板方法,用于执行SQL查询、更新和存储过程。`SimpleJdbcInsert`和`SimpleJdbcCall`则分别用于简化插入操作和调用存储过程。 1. **JdbcTemplate使用**: ...

    Springjdbc

    在Spring框架中,Spring JDBC通过一系列的抽象层,如JdbcTemplate、SimpleJdbcTemplate和NamedParameterJdbcTemplate等,将数据库访问的繁琐细节隐藏起来,从而减少了代码量,提高了代码的可读性和可维护性。...

    spring框架 jdbcTemplate

    Spring框架的JdbcTemplate是Spring为Java开发者提供的一种方便、安全地...在压缩包文件"springtest"中,应该包含了实现这些功能的代码示例,通过学习和理解这些示例,你可以更好地掌握Spring MVC和JdbcTemplate的使用。

    SpringJDBC

    Spring JDBC是Spring框架的一个核心模块,它为Java开发者提供了便捷的方式来操作数据库。Spring JDBC通过抽象出数据库连接...在学习和使用Spring JDBC时,了解并掌握上述知识点,将有助于你更好地理解和运用这一技术。

    JdbcTemplate.rar

    JdbcTemplate是Spring对Java数据库连接(JDBC)的一种轻量级封装,它简化了数据访问代码,减少了可能出现的资源泄露,通过异常处理和事务管理提高了代码的健壮性。其设计目标是减少手写SQL和处理结果集的繁琐工作,...

    spring jdbc

    `JdbcTemplate`是Spring JDBC中最核心的类之一,它提供了一系列的方法来执行各种数据库操作,包括查询、更新、插入和删除等。通过使用`JdbcTemplate`,开发者可以避免直接使用`PreparedStatement`和`ResultSet`,这...

    JDBCTemplate.zip

    为了解决这些问题,Spring框架提供了JDBCTemplate,它是一个基于JDBC的抽象层,能够使数据库操作变得更加简洁和安全。 JDBCTemplate的核心优势在于它封装了JDBC的常见任务,如事务管理、异常处理和结果集的处理,...

    JDBC Template源码.7z

    本文将深入探讨JDBC Template的源码,结合MySQL数据库,展示其在实际应用中的使用,并提及Spring框架中的`PropertyPlaceholderConfigurer`和`BeanPropertyRowMapper`组件。 首先,JDBC Template通过预编译SQL语句、...

    springmvc整合JdbcTemplate框架

    &lt;bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"&gt; ``` 2. **编写SQL语句**:JdbcTemplate支持静态和动态SQL。静态SQL通常直接写在代码中,而动态SQL可以通过PreparedStatement...

    jdbcTemplate简单使用

    最后,`JdbcTemplate`与Spring的其他组件如`DataSource`和`TransactionManager`有很好的集成,可以无缝地与其他Spring框架特性一起工作,例如AOP(面向切面编程)和依赖注入。 总的来说,`JdbcTemplate`是一个强大...

    第十二章 Spring4 支持参数命名的JdbcTemplate

    Spring 4中的JdbcTemplate继承自JDBC抽象层,因此也支持事务管理和异常处理。当发生数据库操作异常时,JdbcTemplate会自动转换数据库异常为Spring的DataAccessException,使得开发者能够更方便地处理异常情况。 ###...

    JDBC连接数据库的步骤

    文件名`jdbcTemplate`、`jdbc`、`jdbcTemplateTest`和`jdbcTemplateSample`表明,这里可能包含了一个使用Spring JdbcTemplate的例子。JdbcTemplate是Spring提供的一个模板类,它封装了JDBC的基本操作,提供了更安全...

    JdbcTemplate的jar包.rar

    spring-jdbc-5.0.0.RELEASE.jar spring-tx-5.0.0.RELEASE.jar 查询一行的内容,封装为map用:template.queryForMap(sql) 查询所有的内容,封装为list用 :template.queryForList(sql) 查询所有的内容,封装为对象...

    java基于jdbctemplate数据持久层操作封装

    Java中的JdbcTemplate是Spring框架提供的一种用于简化JDBC(Java Database Connectivity)操作的工具,它在数据持久层操作中扮演着重要角色。JdbcTemplate通过消除大量重复的JDBC样板代码,提高了代码的可读性和可...

    springboot-jdbc-多数据源

    本项目"springboot-jdbc-多数据源"则主要展示了如何在Spring Boot应用中实现多数据源的配置和使用,这对于大型系统中需要连接多个数据库的场景非常实用。 首先,让我们深入了解Spring Boot与JdbcTemplate的结合。...

    jdbcTemplate

    import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.PreparedStatementCreator; import org.springframework.jdbc.core.RowCallbackHandler; import org.spring...

    spring-jdbc-tips:Spring JDBC,SQL和Java

    本篇将深入探讨Spring JDBC的核心概念、使用方法以及与SQL和Java的交互。 首先,Spring JDBC通过`JdbcTemplate`和`NamedParameterJdbcTemplate`两个主要的模板类,大大简化了数据库访问。`JdbcTemplate`提供了基本...

Global site tag (gtag.js) - Google Analytics