【Spring4.0笔记整理十六】SpringJDBC

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/80552041

  在 Spring 中也为我们提供了专门用来操作数据库的框架,它叫做 SpringJDBC。SpringJDBC 本身并不是一个 orm框架,与现在市场上流行的 Hibernate、MyBatis 相比弱了很多,如果我们写一个小型的系统,用 SpringJDBC 还是很灵活的。
  
  Spring JDBC 中的 JdbcTemplate类 在小型开发中还是比较常用的,而 NamedParameterJdbcTemplate、SimpleJdbcTemplate等这些在 3.X版本中就已经标记过了,在以后的版本中也可能会被抛弃或删除。我们本篇就对 JdbcTemplate类 进行讲解。

  在使用 JdbcTemplate 小工具时,我们还需要依赖一个连接池,在本篇中就选当下比较流行的 C3P0连接池。(在这里我强调一下,数据源的意思是数据的来源,也就是数据库,而连接池是对数据源进行了绑定,它保存着连接数据源的相关信息,所以说数据源和连接池并不是一回事)

  

本文可以分为两大部分:

  一、配置 C3P0连接池

  二、JdbcTemplate 小工具操作总结





一、配置 C3P0连接池

  c3p0 是现在比较流行的一款开源的 JDBC连接池,它主要用来保存连接数据源的相关信息。数据源这个词理解起来也比较容易,它就是数据的来源,也就是我们常说的数据库。

  我们在使用 JdbcTemplate 小工具前必须要配置好一个连接池,也就是必须要获取到一个连接对象。

  那么我们接下来就带着大家在 Spring 中配置 c3p0连接池,在配置之前我们需要将 c3p0连接池 的 jar包导入。(c3p0-0.9.1.2.jar)

  一般情况下,我们在配置连接池时都会将配置信息写入到外部属性文件(详情请看 在Spring中使用外部属性文件),本小节只为演示,便不写入外部属性文件中。

1、配置XML

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <!-- 配置url -->
    <property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:XE"></property>    
    <!-- 配置driver -->
    <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
    <!-- 配置username -->
    <property name="user" value="system"></property>
    <!-- 配置password -->
    <property name="password" value="system"></property>
</bean>

2、测试

public static void main(String[] args) throws SQLException {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
    DataSource dataSource = (DataSource) ioc.getBean("dataSource");
    Connection conn = dataSource.getConnection();
    System.out.println(conn);
}

c3p0输出连接对象

二、JdbcTemplate 小工具操作总结

  JdbcTemplate小工具 也比较强大,在开发小型项目时运用的比较广泛。我们对数据库基本的CURD操作在本小节会作简单的总结。

注意:JdbcTemplate暂时不支持级联查询

导入 jar包

  spring-jdbc-4.0.0.RELEASE.jar
  spring-tx-4.0.0.RELEASE.jar

  c3p0-0.9.1.2.jar
  commons-logging-1.1.1.jar
  ojdbc14.jar
  spring-beans-4.0.0.RELEASE.jar
  spring-context-4.0.0.RELEASE.jar
  spring-core-4.0.0.RELEASE.jar
  spring-expression-4.0.0.RELEASE.jar

注:红字字样的是 新增 的 jar包。

jar包详解:

  1)spring-jdbc-4.0.0.RELEASE.jar:JDBC包)这个 jar 文件包含 Spring 对 JDBC 数据访问进行封装的所有类;
  2)spring-tx-4.0.0.RELEASE.jar:事务包)为 JDBC 等提供的一致的声明式和编程式事务管理(关于 事务 方面的知识,后续章节会继续讲解,大家在这里不必进行过多的了解)。

1、修改一条记录:

  • int update(String sql, Object… args)
  • 参数sql:sql语句
  • 参数args:可变参,sql语句中?的实际值
  • 返回值:影响行数
public int update(User user) {
    String sql = "update s_user set username = ? where id = ?";
    Object[] objs = {user.getUsername(), user.getId()};
    int update = jdbcTemplate.update(sql, objs);
    System.out.println(update);
    return update;
}

2、添加一条记录:

  • int update(String sql, Object… args)
  • 参数sql:sql语句
  • 参数args:可变参,sql语句中?的实际值
  • 返回值:影响行数
public int insert(User user) {
    String sql = "insert into s_user values(?, ?, ?, ?, ?, ?, sysdate)";
    Object[] objs = {user.getId(), user.getUsername(), user.getPassword(),
        user.getZip(), user.getPhone(), user.getEmail()};
    int insert = jdbcTemplate.update(sql, objs);
    return insert;
}

3、删除一条记录:

  • int update(String sql, Object… args)
  • 参数sql:sql语句
  • 参数args:可变参,sql语句中?的实际值
  • 返回值:影响行数
public int delete(int id) {
    String sql = "delete from s_user where id = ?";
    Object[] objs = {id};
    int delete = jdbcTemplate.update(sql, objs);
    return delete;
}

4、查询所有:

  • List<T> query(String sql, RowMapper<T> rowMapper)
  • 参数sql:sql语句
  • 参数rowMapper:可以将数据中的每一行数据封装成用户定义的类
  • 返回值:数据列表
public List<User> showAll() {
    String sql = "select * from s_user";
    RowMapper<User> rowMapper = ParameterizedBeanPropertyRowMapper.newInstance(User.class);
    List<User> list = jdbcTemplate.query(sql, rowMapper);
    return list;
}

5、根据zip查询多条记录:

  • List<T> query(String sql, RowMapper<T> rowMapper, Object… args)
  • 参数sql:sql语句
  • 参数rowMapper:可以将数据中的每一行数据封装成用户定义的类
  • 参数args:可变参,sql语句中?的实际值
  • 返回值:数据列表
public List<User> showByZip(String zip) {
    String sql = "select * from s_user where zip = ?";
    RowMapper<User> rowMapper = ParameterizedBeanPropertyRowMapper.newInstance(User.class);
    List<User> list = jdbcTemplate.query(sql, rowMapper, zip);
    return list;
}

6、根据id查询一条记录:

  • T queryForObject(String sql, RowMapper<T> rowMapper, Object… args)
  • 参数sql:sql语句
  • 参数rowMapper:可以将数据中的每一行数据封装成用户定义的类
  • 参数args:可变参,sql语句中?的实际值
  • 返回值:查询得到的一条记录,并封装成用户定义的类
public User showAllById(int id) {
    String sql = "select id,username,password,zip,phone,email,udate from s_user where id = ?";
    RowMapper<User> rowMapper = ParameterizedBeanPropertyRowMapper.newInstance(User.class);
    User user = jdbcTemplate.queryForObject(sql, rowMapper, id);
    return user;
}

7、根据id查询指定字段:

  • T queryForObject(String sql, Class<T> class, Object… args)
  • 参数sql:sql语句
  • 参数class:返回类型的Class对象
  • 参数args:可变参,sql语句中?的实际值
  • 返回值:查询得到的一条记录,并封装成用户定义的类
public String showUsernameById(int id) {
    String sql = "select username from s_user where id = ?";
    String username = jdbcTemplate.queryForObject(sql, String.class, id);
    return username;
}




猜你喜欢

转载自blog.csdn.net/sun8112133/article/details/80552041