`

JdbcTemplate详解 - 2

    博客分类:
  • jdbc
阅读更多
JdbcTemplate详解 - 2

http://tianya23.blog.51cto.com/1081650/275292

1、由于之前JdbcTemplate的程序需要编写一堆的RowMapper的映射文件,显得有些臃肿,最好是根据pojo类和字段的名称进行自动的对应, 所以SimpleJdbcTemplate支持使用Pojo中的属性进行自动赋值, 语法为':'开头。
public class UserDaoSpringImpl implements UserDao {
   private SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(
       JdbcUtils.getDataSource());
 
  public void addUser(User user) {
     String sql = "insert into user (name, money, birthday) values (:name, :money, :birthday)";
     SqlParameterSource param = new BeanPropertySqlParameterSource(user);
     KeyHolder keyHolder = new GeneratedKeyHolder();
     this.simpleJdbcTemplate.getNamedParameterJdbcOperations().update(sql,
         param, keyHolder);
     user.setId(keyHolder.getKey().intValue());
   }
 
  public void delete(User user) {
     String sql = "delete from user where id=?";
     this.simpleJdbcTemplate.update(sql, user.getId());
   }
 
  public User findUser(String loginName, String password) {
     String sql = "select id, name, money, birthday    from user where name=?";
     return this.simpleJdbcTemplate.queryForObject(sql,
         ParameterizedBeanPropertyRowMapper.newInstance(User.class),
         loginName);
   }
 
  public User getUser(int userId) {
     String sql = "select id, name, money, birthday    from user where id=?";
     return this.simpleJdbcTemplate.queryForObject(sql,
         ParameterizedBeanPropertyRowMapper.newInstance(User.class),
         userId);
   }
 
  public void update(User user) {
     String sql = "update user set name=?, birthday=?, money=? where id=? ";
     this.simpleJdbcTemplate.update(sql, user.getName(), user.getBirthday(),
         user.getMoney(), user.getId());
 
    sql = "update user set name=:name, birthday=:birthday, money=:money where id=:id ";
     this.simpleJdbcTemplate.update(sql, new BeanPropertySqlParameterSource(
         user));
   }
 
}

其中使用的JdbcUtils获取数据源的代码如下:
public final class JdbcUtils {
   private static String url = "jdbc:mysql://localhost:3306/jdbc";
   private static String user = "root";
   private static String password = "";
   private static DataSource myDataSource = null;
 
  private JdbcUtils() {
   }
 
  static {
     try {
       Class.forName("com.mysql.jdbc.Driver");
       // myDataSource = new MyDataSource2();
       Properties prop = new Properties();
       // prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");
       // prop.setProperty("user", "user");
 
      InputStream is = JdbcUtils.class.getClassLoader()
           .getResourceAsStream("dbcpconfig.properties");
       prop.load(is);
       myDataSource = BasicDataSourceFactory.createDataSource(prop);
     } catch (Exception e) {
       throw new ExceptionInInitializerError(e);
     }
   }
 
  public static DataSource getDataSource() {
     return myDataSource;
   }
 
  public static Connection getConnection() throws SQLException {
     // return DriverManager.getConnection(url, user, password);
     return myDataSource.getConnection();
   }
 
  public static void free(ResultSet rs, Statement st, Connection conn) {
     try {
       if (rs != null)
         rs.close();
     } catch (SQLException e) {
       e.printStackTrace();
     } finally {
       try {
         if (st != null)
           st.close();
       } catch (SQLException e) {
         e.printStackTrace();
       } finally {
         if (conn != null)
           try {
             conn.close();
             // myDataSource.free(conn);
           } catch (Exception e) {
             e.printStackTrace();
           }
       }
     }
   }
 }


2、 完成相同映射的类还包括:NamedParameterJdbcTemplate, 它将之前的占位符‘?’进行了取名,方便程序的阅读。 不过这样的SQL不能再数据库中直接执行,需要有Spring进行转换。
public class NamedJdbcTemplate {
   static NamedParameterJdbcTemplate named = new NamedParameterJdbcTemplate(
       JdbcUtils.getDataSource());
 
  /**
     * @param args
     */
   public static void main(String[] args) {
     User user = new User();
     user.setMoney(10);
     user.setId(2);
     System.out.println(findUser1(user));
   }
 
  static void addUser(User user) {
     String sql = "insert into user(name,birthday, money) values (:name,:birthday,:money) ";
     SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
     KeyHolder keyHolder = new GeneratedKeyHolder();
     named.update(sql, ps, keyHolder);
     int id = keyHolder.getKey().intValue();
     user.setId(id);
     
     Map map = keyHolder.getKeys();
   }
 
  static User findUser(User user) {
     String sql = "select id, name, money, birthday    from user "
         + "where money > :m and id < :id";
     Map params = new HashMap();
     // params.put("n", user.getName());
     params.put("m", user.getMoney());
     params.put("id", user.getId());
     Object u = named.queryForObject(sql, params, new BeanPropertyRowMapper(
         User.class));
     return (User) u;
   }
 
  static User findUser1(User user) {
     String sql = "select id, name, money, birthday    from user "
         + "where money > :money and id < :id";
     SqlParameterSource ps = new BeanPropertySqlParameterSource(user);
     Object u = named.queryForObject(sql, ps, new BeanPropertyRowMapper(User.class));
     return (User) u;
   }
 
}


【注意】

1、BeanPropertyRowMapper完成了对象到数据库字段的映射关系, 可以不再使用RowMapper来一一对应起来。如果RowMapper只使用1次,则可以直接使用内部类来完成,而不再需要专门的写一个类。

2、KeyHolder, 其中保存了数据库中操作的主键,取得操作的主键后, 方便对进行操作的记录进行其他动作。



总之:利用反射技术,减少的了不必要的rowmapper,提高了效率
分享到:
评论

相关推荐

    Spring--JdbcTemplate.pdf

    描述中提到的"一图详解(脑图)"意味着文档中可能包含了一个清晰的图示,这个图示将详细展示JdbcTemplate在Spring中的使用过程和相关组件的交互。这样的图示对于理解JdbcTemplate的工作原理以及如何在项目中实际应用它...

    开源框架spring详解-----spring对JDBC的支持

    Spring 提供了 `JdbcTemplate` 和 `NamedParameterJdbcTemplate` 两个工具类,它们简化了 JDBC 代码,提供了模板方法来执行 SQL 查询、更新等操作。这些模板类自动处理了诸如打开和关闭连接、处理结果集以及异常...

    Spring JdbcTemplate方法详解

    JdbcTemplate主要提供以下五类方法;JdbcTemplate类支持的回调类;并附例子

    Spring-JdbcTemplate

    **Spring-JdbcTemplate 知识详解** `Spring-JdbcTemplate` 是 Spring 框架中的一个核心模块,主要用于简化数据库操作,提供了强大的数据访问功能。它通过模板方法设计模式封装了 SQL 的执行,使得开发者无需直接与 ...

    JdbcTemplate查询

    ### JdbcTemplate查询详解 #### 一、概述 `JdbcTemplate`是Spring框架中提供的一个用于简化JDBC编程的工具类,它提供了丰富的API来帮助开发者更便捷地进行数据库操作。相较于传统的JDBC编程方式,使用`...

    Spring笔记之整合JdbcTemplate.doc

    ### Spring与JdbcTemplate整合详解 #### 一、JdbcTemplate简介及使用 **1.1 JdbcTemplate概述** JdbcTemplate是Spring框架中的一个重要组成部分,它提供了一种简单而强大的方式来访问数据库,通过封装JDBC API,...

    day4-Spring JdbcTemplate & 声明式事务.md

    ### Spring JdbcTemplate与声明式事务知识点详解 #### JdbcTemplate基本使用概述 JdbcTemplate是Spring框架提供的用于简化JDBC API操作的对象。它通过提供一个高级抽象层来减少编码工作量,并帮助开发者避免处理...

    jdbcTemplate集锦很好的推荐

    ##### 2. 查询所有对象(find all) ```java public List&lt;Item&gt; findAll() { String sql = "SELECT * FROM items"; return jdbcTemplate.query(sql, new ItemMapper()); } ``` - **解释**:此方法用于查询表中的...

    Spring JdbcTemplate整合使用方法及原理详解

    Spring JdbcTemplate 整合使用方法及原理详解 Spring JdbcTemplate 是 Spring 框架中的一部分,提供了一个简单的方式来与数据库进行交互。它可以帮助开发者快速地执行数据库操作,无需关心底层的 JDBC 详细实现。...

    springMVC+JDBCTemplate在线装机系统

    《SpringMVC与JDBCTemplate结合实现在线装机系统详解》 在现代软件开发中,构建一个在线装机系统可以极大地提升效率,减少人为错误。本系统利用SpringMVC作为控制层框架,配合JDBCTemplate进行数据访问,旨在提供...

    spring接管jdbc详解

    Spring 接管 JDBC 详解 Spring 框架中提供了对 JDBC 的支持,使得开发者可以更方便地访问数据库。在本文中,我们将详细介绍 Spring 是如何接管 JDBC 的,并提供一个简单的示例来展示如何使用 Spring 来访问数据库。...

    Jdbctemplate多数据源配置方法详解

    Jdbctemplate 多数据源配置方法详解 Jdbctemplate 多数据源配置是指在 Spring Boot 应用程序中配置多个数据源,以便在不同的业务场景下使用不同的数据库。下面将详细介绍 Jdbctemplate 多数据源配置方法。 数据源...

    详解在spring中使用JdbcTemplate操作数据库的几种方式

    在Spring框架中,JdbcTemplate是用于简化数据库操作的工具,它提供了一种声明式的方式处理SQL,降低了数据库访问的复杂性。本篇文章将详细介绍如何在Spring中使用JdbcTemplate进行数据库操作,包括设置依赖、创建...

    图书管理系统( Spring+Spring MVC+JdbcTemplate).rar

    《图书管理系统:基于Spring+SpringMVC+JdbcTemplate的实现详解》 图书管理系统是信息化建设中的重要组成部分,它能够高效地管理和维护图书馆的资源,提供便捷的服务给读者和管理员。本系统采用主流的Spring框架、...

    JDBC Template基本使用方法详解

    JDBC Template 基本使用方法详解 JDBC Template 是 Spring 框架中的一部分,提供了一个简洁的方式来访问数据库。下面将详细介绍 JDBC Template 的基本使用方法。 依赖配置 在使用 JDBC Template 之前,需要在 ...

    springboot学习

    chapter3-2-1:使用JdbcTemplate chapter3-2-2:使用Spring-data-jpa简化数据访问层(推荐) chapter3-2-3:多数据源配置(一):JdbcTemplate chapter3-2-4:多数据源配置(二):Spring-data-jpa chapter3-2-5:...

    Spring Boot详解

    - 编写UserDAO,模拟与数据库的交互,如使用JdbcTemplate或MyBatis。 - 编写UserService,实现User数据操作的业务逻辑,调用UserDAO完成具体操作。 - 编写SpringConfig,定义为@Configuration,其中包含@Bean注解...

    详解spring boot中使用JdbcTemplate

    在Spring Boot中,JdbcTemplate是Spring框架提供的一个用于简化JDBC操作的工具类,它为开发者提供了更加方便、健壮的数据库访问接口。通过使用JdbcTemplate,我们可以避免编写大量重复的JDBC模板代码,比如打开和...

Global site tag (gtag.js) - Google Analytics