`

SpringJdbc

 
阅读更多
一、JdbcTemplate 

查询带有参数,和行映射方法:


public Object queryForObject(String sql, Object[] args, RowMapper rowMapper),使用自定义的UserRowMapper完成映射。

一个RowMapper的常用实现BeanPropertyRowMapper,该实现可将结果集转换成一个Java Bean(字段名与Java Bean属性名不符合规范,可用别名处理)。

public List query(String sql, Object[] args, RowMapper rowMapper)返回多个结果。

public int queryForInt(String sql)(如:select count(*) from user),其他结果比如String可用queryForObject方法向下转型。

public Map queryForMap(String sql, Object[] args)返回若类型的Map(key:字段名或别名,value:列值)。

public List queryForList(String sql, Object[] args)返回多Map。

 更新public int update(String sql, Object[] args)。

插入数据并获得结果:

public Object execute(ConnectionCallback action)

其他方法简介

 

public class JdbcTemplateTest {
  // JdbcTemplate是线程安全的
 static JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());
 public static void main(String[] args) {
  User user = findUser("zhangsan");
  // System.out.println("user:" + user);
  // System.out.println("users:" + findUsers(3));
  // System.out.println("user count:" + getUserCount());
  // System.out.println("user name:" + getUserName(1));
  System.out.println("data:" + getData(1));
 }
 static int addUser(final User user) {
  jdbc.execute(new ConnectionCallback() {
   public Object doInConnection(Connection con) throws SQLException,
     DataAccessException {
    String sql = "insert into user(name,birthday, money) values (?,?,?) ";
    PreparedStatement ps = con.prepareStatement(sql,
      Statement.RETURN_GENERATED_KEYS);
    ps.setString(1, user.getName());
    ps.setDate(2, new java.sql.Date(user.getBirthday().getTime()));
    ps.setFloat(3, user.getMoney());
    ps.executeUpdate();
    ResultSet rs = ps.getGeneratedKeys();
    if (rs.next())
     user.setId(rs.getInt(1));
    return null;
   }
  });
  return 0;
 }
 static Map getData(int id) {
  String sql = "select id as userId, name, money, birthday  from user where id="
    + id;
  return jdbc.queryForMap(sql);
 }
 static String getUserName(int id) {
  String sql = "select name from user where id=" + id;
  Object name = jdbc.queryForObject(sql, String.class);
  return (String) name;
 }
 static int getUserCount() {
  String sql = "select count(*) from user";
  return jdbc.queryForInt(sql);
 }
 static List findUsers(int id) {
  String sql = "select id, name, money, birthday  from user where id<?";
  Object[] args = new Object[] { id };
  int[] argTypes = new int[] { Types.INTEGER };
  List users = jdbc.query(sql, args, argTypes, new BeanPropertyRowMapper(
    User.class));
  return users;
 }
 static User findUser(String name) {
  String sql = "select id, name, money, birthday  from user where name=?";
  Object[] args = new Object[] { name };
   // BeanPropertyRowMapper行映射器,只要查询的字段名与类名一样就行(对于不同的可以使用别名 as xxx),对于不同命名规范它也会进行转化,如它自动将下划线法转化为骆峰法
  Object user = jdbc.queryForObject(sql, args, new BeanPropertyRowMapper(
    User.class));
  return (User) user;
 }
 static User findUser1(String name) {
  String sql = "select id, name, money, birthday  from user where name=?";
  Object[] args = new Object[] { name };
  Object user = jdbc.queryForObject(sql, args, new RowMapper() {
   public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
    User user = new User();
    user.setId(rs.getInt("id"));
    user.setName(rs.getString("name"));
    user.setMoney(rs.getFloat("money"));
    user.setBirthday(rs.getDate("birthday"));
    return user;
   }
  });
  return (User) user;
 }
}

二、NamedParameterJdbcTemplate


lNamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干; NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。

lpublic Object queryForObject(String sql, Map paramMap, RowMapper rowMapper)

lpublic Object queryForObject(String sql, SqlParameterSource paramSource, RowMapper rowMapper)

SqlParameterSource的两个主要实现MapSqlParameterSource

和BeanPropertySqlParameterSource

lpublic int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder)保存数据获得主键。

 

public class NamedJdbcTemplate {
  // JdbcTemplate是线程安全的
 static JdbcTemplate jdbc = new JdbcTemplate(JdbcUtils.getDataSource());
 static NamedParameterJdbcTemplate named = new NamedParameterJdbcTemplate(
   JdbcUtils.getDataSource());
 public static void main(String[] args) {
  User user=new User();
  user.setMoney(10);
  user.setId(2);
//  System.out.println(findUser(user));
  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);//从user中取出数据,与sql语句中一一对应将数据换进去
  KeyHolder keyHolder=new GeneratedKeyHolder();
  named.update(sql, ps, keyHolder);
  int id=keyHolder.getKey().intValue();//获得主键
  user.setId(id);
  Map map=keyHolder.getKeys();
 }
 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;
 }
 static User findUser(User user) {
  String sql = "select id, name, money, birthday  from user where money>:m and id<:id";
  Object[] args = new Object[] {user.getName(),user.getMoney(),user.getId() };
  Map params=new HashMap();
  params.put("m", user.getMoney());
  params.put("id", user.getId());
  Object u=named.queryForObject(sql, params, new BeanPropertyRowMapper(User.class));
  return (User) u;
 }

  三、 SimpleJdbcTemplate


SimpleJdbcTemplate内部包含了一个NamedParameterJdbcTemplate;所以NamedParameterJdbcTemplate能做的事情SimpleJdbcTemplate都能干,SimpleJdbcTemplate相对于NamedParameterJdbcTemplate主要增加了JDK5.0的泛型和可变长度参数支持。

public <T> List<T> query(String sql, ParameterizedRowMapper<T> rm, Object... args)

public <T> T queryForObject(String sql, ParameterizedRowMapper<T> rm, SqlParameterSource args)

public <T> List<T> query(String sql, ParameterizedRowMapper<T> rm, SqlParameterSource args)

getJdbcOperations返回的是JdbcOperations(实现JdbcTemplate)

getNamedParameterJdbcOperations返回的是NamedParameterJdbcOperations(实现是NamedParameterJdbcTemplate)

 

public class UserDaoSpringImpl implements UserDao {
 private SimpleJdbcTemplate simpleJdbcTemplate=new SimpleJdbcTemplate(JdbcUtils.getDataSource());
 @Override
 public void addUser(User user) {
  String sql="insert into user (name,money,birthday) value (:name,:money,:birthday)";
  SqlParameterSource param=new BeanPropertySqlParameterSource(user);
  KeyHolder keyHolder=new GeneratedKeyHolder();
  this.simpleJdbcTemplate.getNamedParameterJdbcOperations().update(sql, param, keyHolder);
  user.setId(keyHolder.getKey().intValue());
 }
 @Override
 public User getUser(int userId) {
  String sql="selec id,name,money,birthday from where id=?";
  return this.simpleJdbcTemplate.queryForObject(sql, ParameterizedBeanPropertyRowMapper.newInstance(User.class), userId);
 }
 @Override
 public User findUser(String name, String password) {
  String sql="selec id,name,money,birthday from where name=?";
  return this.simpleJdbcTemplate.queryForObject(sql, ParameterizedBeanPropertyRowMapper.newInstance(User.class), name);
 }
 @Override
 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());
  String sql="update user set name=:name,birthday=:birthday,money=:money where id=:id";
  this.simpleJdbcTemplate.update(sql,new BeanPropertySqlParameterSource(user));
 }
 @Override
 public void delete(User user) {
  String sql="delete from user where id="+user.getId();
  this.simpleJdbcTemplate.update(sql, user.getId());
 }
}

 

 

分享到:
评论

相关推荐

    Spring JDBC与事务管理

    javaEE 实验三 Spring JDBC与事务管理, 一、实验目的 1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用; 3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握...

    spring jdbc相关包版本5.1.3

    Spring JDBC模块是Spring框架的一部分,它提供了对JDBC(Java Database Connectivity)的高级抽象,简化了数据库操作。在这个场景中,我们关注的是Spring JDBC的5.1.3版本。 **Spring JDBC 5.1.3 版本详解** ...

    Spring JDBC常用Jar包

    Spring JDBC是Spring框架的一部分,主要用于简化Java数据库连接操作。它提供了一个抽象层,使得开发者能够以统一的方式处理各种数据库,而无需直接与JDBC API打交道,从而降低了代码的复杂性和错误率。在"Spring ...

    spring jdbc示例代码

    Spring JDBC是Spring框架的一部分,它提供了一种更高级的方式来处理传统的Java JDBC(Java Database Connectivity),以简化数据库操作。本示例代码将展示如何在Spring环境中使用JDBC进行数据的增删改查操作,并对比...

    spring JDbc

    Spring JDBC是Spring框架的一个核心模块,它为Java数据库连接(JDBC)提供了一个高级抽象层,简化了数据库操作。在本实例中,我们将深入探讨Spring JDBC的使用,并以`SpringJdbcTemplate`为例来阐述其主要功能和优势...

    spring jdbc.zip

    《Spring JDBC:Spring框架对JDBC的封装与实践》 Spring框架是Java开发中的一个核心组件,它极大地简化了企业级应用的开发工作。在Spring框架中,Spring JDBC(Java Database Connectivity)模块扮演着重要的角色,...

    SpringMVC+SpringJDBC

    SpringMVC和SpringJDBC是Java开发中两个重要的框架,它们分别是Spring框架在Web层和数据访问层的应用。本文将详细介绍这两个组件的核心概念、工作原理以及如何整合使用,旨在帮助开发者更好地理解和应用。 **...

    最简单的用户登录与注册系统 spring mvc spring jdbc

    Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,而Spring JDBC则是Spring提供的用于简化数据库操作的工具。 【描述】"用spring4.0.5版本开发的,spring mvc,spring jdbc,最简单的用户登录,注册和...

    spring4 、 springmvc4.2、springjdbc

    Spring框架是Java开发中广泛应用的一个开源框架,它主要由Spring Core、Spring MVC和Spring JDBC等模块组成。在本文中,我们将深入探讨这三个核心模块以及它们的功能和整合方式。 首先,Spring Core是整个Spring...

    maven-springMVC-springJDBC-Demo

    【标题】"maven-springMVC-springJDBC-Demo"是一个综合性的项目示例,它演示了如何使用Maven、Spring MVC和Spring JDBC在Java Web开发中构建一个简单的应用。这个Demo旨在帮助开发者理解这三大技术的集成与协同工作...

    Spring JDBC应用实例讲解

    Spring JDBC是Spring框架中的一个核心模块,主要用于简化Java数据库编程。在本文中,我们将深入探讨Spring JDBC的应用实例,了解如何利用它来实现高效且灵活的数据访问。首先,我们需要理解Spring JDBC是如何通过...

    spring JDBC所需jar包

    在Java开发中,Spring框架是不可或缺的一部分,尤其在处理数据访问层时,Spring JDBC提供了一种强大而灵活的方式来管理数据库连接。Spring JDBC模块是Spring框架的一部分,它简化了JDBC的使用,使得开发者可以更加...

    SpringJDBC训练素材.zip

    Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得开发者可以更方便地使用Java数据库连接(JDBC)进行数据库操作。Spring JDBC的核心是JdbcTemplate类,它简化了执行SQL语句的过程,减少了代码量,并提高...

    Spring JDBC 增删改查

    Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得我们能够更方便地使用Java数据库连接(JDBC)来处理数据库操作,如增删改查(CRUD)。在这个主题下,我们将深入探讨Spring JDBC的核心概念、配置、以及...

    SpringJDBC.rar_SpringJDBC_spring jdbc

    通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...

    SpringJDBC

    Spring JDBC是Spring框架的一个核心模块,它为Java开发者提供了便捷的方式来操作数据库。Spring JDBC通过抽象出数据库连接管理、事务处理以及结果集处理等繁琐工作,使得开发者可以专注于SQL语句和业务逻辑,而不必...

    Spring JDBC实现代码

    Spring JDBC模块是Spring框架的一部分,它简化了Java Database Connectivity (JDBC)的使用,使得数据库操作更加简单且易于管理。本篇文章将深入探讨如何使用Spring JDBC在Spring 2.5版本中与MySQL数据库进行交互,...

    spring JDBC

    ### Spring JDBC 概述 Spring框架提供了一种强大的机制来简化Java应用程序中的数据库访问操作,这一机制即为Spring JDBC模块。通过Spring JDBC,开发者能够更加高效地管理与数据库的交互,减少传统JDBC编程中常见的...

    Spring事务管理和SpringJDBC思维导图

    本话题主要关注Spring的两个重要模块:事务管理和Spring JDBC。这些知识点对于任何使用Spring进行后端开发的程序员来说都是至关重要的。 首先,我们来深入理解Spring事务管理。事务是数据库操作的基本单元,它确保...

    SpringMVC3 + SpringJDBC整合 源码。

    SpringJDBC是Spring框架的一部分,它简化了传统的JDBC编程模型,通过提供模板方法和回调机制,使得数据库操作更加容易。SpringJDBC提供了一层抽象,可以避免大量重复的JDBC代码,如打开和关闭连接、处理结果集等,使...

Global site tag (gtag.js) - Google Analytics