SpringJDBC 使用笔记

it2022-05-05  109

在 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); }  

二、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; }  


最新回复(0)