版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址: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);
}
二、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;
}