1 spring框架一站式框架
(1)針對javaee三層,每一層都有解決技術
(2)在dao層,使用 jdbcTemplate
2 spring對不同的持久化層技術都進行封裝
(1)jdbcTemplate對jdbc進行封裝
3 jdbcTemplate使用和dbutils使用很相似,都數據庫進行crud操作
CURD操作
增加
updata();方法
1 導入jdbcTemplate使用的jar包
2 創建對象,設置數據庫信息
3 創建jdbcTemplate對象,設置數據源
4 調用jdbcTemplate對象里面的方法實現操作
// 1 添加操作 @Test public void add() { // 設置數據庫信息 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///spring_day03"); dataSource.setUsername("root"); dataSource.setPassword("root"); // 創建jdbcTemplate對象,設置數據源 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); // 調用jdbcTemplate對象里面的方法實現操作 //創建sql語句 String sql = "insert into user values(?,?)"; int rows = jdbcTemplate.update(sql, "lucy","250"); System.out.println(rows); }
修改
updata();方法
//2 修改操作 @Test public void update() { //設置數據庫信息 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///spring_day03"); dataSource.setUsername("root"); dataSource.setPassword("root"); //創建jdbcTemplate對象 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); //調用jdbcTemplate里面的方法實現 update方法 String sql = "update user set password=? where username=?"; int rows = jdbcTemplate.update(sql, "1314","lucy"); System.out.println(rows); }
刪除
updata();方法
//3 刪除操作 @Test public void delete() { //設置數據庫信息 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///spring_day03"); dataSource.setUsername("root"); dataSource.setPassword("root"); //創建jdbcTemplate對象 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); //調用update方法實現刪除 String sql = "delete from user where username=?"; int rows = jdbcTemplate.update(sql, "lucy"); System.out.println(rows); }
查詢:
jdbcTemplate.queryForObject();方法
1 使用jdbcTemplate實現查詢操作
/* * QueryRunner runner = new QueryRuner(datasource); * 返回對象 * runner.query(sql,new BeanHandler<User>(User.class)); * * 返回list集合 * runner.query(sql,new BeanListHander<User>(User.class)) * * 1 在dbutils時候,有接口 ResultSetHandler * dbutils提供了針對不同的結果實現類 * * 2 jdbcTemplate實現查詢,有接口 RowMapper, * jdbcTemplate針對這個接口沒有提供實現類,得到不同的類型數據需要自己進行數據封裝 * * */
2 查詢具體實現
第一個 查詢返回某一個值
@Override public <T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException { return queryForObject(sql, getSingleColumnRowMapper(requiredType)); }
(1)第一個參數是sql語句
(2)第二個參數 返回類型的class
//1 查詢表有多少條記錄 @Test public void testCount() { //設置數據庫信息 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///spring_day03"); dataSource.setUsername("root"); dataSource.setPassword("root"); //創建jdbcTemplate對象 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); //調用方法得到記錄數 String sql = "select count(*) from user"; //調用jdbcTemplate的方法 int count = jdbcTemplate.queryForObject(sql, Integer.class); System.out.println(count); }
Jdbc實現
//2 jdbc實現代碼 @Test public void testJDBC() { Connection conn = null; PreparedStatement psmt = null; ResultSet rs = null; //加載驅動 try { Class.forName("com.mysql.jdbc.Driver"); //創建連接 conn = DriverManager.getConnection("jdbc:mysql:///spring_day03", "root", "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 { try { rs.close(); psmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
第二個 查詢返回對象
第一個參數是sql語句
第二個參數是 RowMapper,是接口,類似於dbutils里面接口
第三個參數是 可變參數
//3 查詢返回對象 @Test public void testObject() { //設置數據庫信息 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///spring_day03"); dataSource.setUsername("root"); dataSource.setPassword("root"); //創建jdbcTemplate對象 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); //寫sql語句,根據username查詢 String sql = "select * from user where username=?"; //調用jdbcTemplate的方法實現 //第二個參數是接口 RowMapper,需要自己寫類實現接口,自己做數據封裝 User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "mary"); System.out.println(user); }
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; } }
第三個 查詢返回list集合
//創建jdbcTemplate對象 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); //寫sql語句 String sql = "select * from user"; //調用jdbcTemplate的方法實現 List<User> list = jdbcTemplate.query(sql,new MyRowMapper()); System.out.println(list);
Spring配置連接池和dao使用jdbcTemplate
1 spring配置c3p0連接池
第一步 導入jar包
第二步 創建spring配置文件,配置連接池
// ComboPooledDataSource dataSource = new ComboPooledDataSource(); // dataSource.setDriverClass("com.mysql.jdbc.Driver"); // dataSource.setJdbcUrl("jdbc:mysql:///spring_day03"); // dataSource.setUser("root"); // dataSource.setPassword("root");
<!-- 配置c3p0連接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 注入屬性值 --> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql:///spring_day03"></property> <property name="user" value="root"></property> <property name="password" value="root"></property> </bean>
2 dao使用jdbcTemplate
(1)創建service和dao,配置service和dao對象,在service注入dao對象
<!-- 創建service和dao對象,在service注入dao對象 --> <bean id="userService" class="cn.itcast.c3p0.UserService"> <!-- 注入dao對象 --> <property name="userDao" ref="userDao"></property> </bean> <bean id="userDao" class="cn.itcast.c3p0.UserDao"> <!-- 注入jdbcTemplate對象 --> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean>
(2)創建jdbcTemplate對象,把模板對象注入到dao里面
<bean id="userDao" class="cn.itcast.c3p0.UserDao"> <!-- 注入jdbcTemplate對象 --> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean> <!-- 創建jdbcTemplate對象 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
public class UserDao { //得到JdbcTemplate對象 private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } //添加操作 public void add() { //創建jdbcTemplate對象 // JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); String sql = "insert into user values(?,?)"; jdbcTemplate.update(sql, "李雷","520"); } }
(3)在jdbcTemplate對象里面注入dataSource
<!-- 創建jdbcTemplate對象 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 把dataSource傳遞到模板對象里面 --> <property name="dataSource" ref="dataSource"></property> </bean>