使用 jdbc 实现查询返回 User 对象操作:
//jdbc 实现代码 @Test public void testJDBC() throws SQLException { Connection conn = null; PreparedStatement psmt = null; ResultSet rs = null; //加载驱动 try { Class.forName("com.mysql.jdbc.Driver"); //创建连接 conn = DriverManager.getConnection("jdbc:mysql:///sampledb", "root" , ""); //编写 sql 语句 String sql = "select * from user where username=?"; //预编译 sql psmt = conn.prepareStatement(sql); //设置参数值 psmt.setString(1, "lucy"); //执行 sql rs = psmt.executeQuery(); //遍历结果集 while (rs.next()){ //得到返回值 String username = rs.getString("username"); String password = rs.getString("password"); //放到 user 对象里 User user = new User(); user.setUsername(username); user.setPassword(password); System.out.println(user); } } catch (Exception e){ e.printStackTrace(); } finally { rs.close(); conn.close(); psmt.close(); } } 使用 jdbcTemplate 实现查询返回对象操作将使用到 queryForObject(String sql, RowMapper<T> rowMapper, Object... args) 方法。
第一个参数是 SQL 语句
第二个参数是 RowMapper,是接口,需要自己封装
第三一参数是可变参数
还是举个栗子:
//查询返回对象 @Test public void testObject(){ //设置数据库信息 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///sampledb"); dataSource.setUsername("root"); dataSource.setPassword(""); //创建jdbcTemplate对象,设置数据源 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); //写 SQL 语句,根据 username 查询 String sql = "select * from user where username=?"; //调用 jdbcTemplate的方法实现 //第二个参数是接口 rowMapper, 需要自己写类实现接口,自己做数据封装 User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "lucy"); System.out.println(user); }RowMapper 封装的接口类:
class MyRowMapper implements RowMapper<User> { @Override public User mapRow(ResultSet rs, int num) throws SQLException { //1 从结果集里面把数据得到 String username = rs.getString("username"); String password = rs.getString("password"); //2 把得到数据封装到对象里面 User user = new User(); user.setUsername(username); user.setPassword(password); return user; } } 查询返回列表使用 query(String sql, RowMapper<T> rowMapper, Object... args):List<T> 方法。
第一个参数:SQL 语句
第二个参数:RowMapper 接口,自己写类实现数据封装
第三个参数:可变参数
举个栗子:
//查阅返回列表 @Test public void testList(){ //设置数据库信息 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///sampledb"); dataSource.setUsername("root"); dataSource.setPassword(""); //创建jdbcTemplate对象,设置数据源 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); //写 SQL 语句,根据 username 查询 String sql = "select * from user"; //调用 jdbcTemplate的方法实现 //第二个参数是接口 rowMapper, 需要自己写类实现接口,自己做数据封装 List<User> list = jdbcTemplate.query(sql, new MyRowMapper()); System.out.println(list); } } spring 配置连接池和 dao 层使用 jdbcTemplate上述的方法虽然能实现数据库的 crud 操作,但未免太过繁琐,我们更希望能以更简单的方式来实现数据的 crud 操作,spring 为我们提供了通过配置 xml 文件的方式来实现上述操作。
spring 配置 c3p0连接池首先我们导入相应的 jar 包,还是相似的,利用 maven 来导入:
<dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>mchange-commons-java</artifactId> <version>0.2.15</version> </dependency>然后创建 spring 配置文件,配置连接池:
<!-- 配置c3p0连接池 --> <bean> <!-- 注入属性值 --> <property value="com.mysql.jdbc.Driver"></property> <property value="jdbc:mysql:///sampledb"></property> <property value="root"></property> <property value=""></property> </bean> dao 使用 jdbctemplate(1)创建 UserDao.java 和 UserService.java 文件
UserDao.java:
package cn.itcast.c3p0; import org.springframework.jdbc.core.JdbcTemplate; public class UserDao { //得到 jdbcTemplate 对象 private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void add(){ String sql = "insert into user values(?,?)"; jdbcTemplate.update(sql, "李雷", "520"); } }