Java架构师之旅(十七)

夜光序言:

我必须冲在第一个,不能依靠任何的力量,就像当年的闷油瓶一样~~

 

Java架构师之旅(十七)

 

 

正文:Spring连接数据库查询,精讲~~人生总要留下点什么

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

Java架构师之旅(十七)

package cn.Genius.jdbc;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;


import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;

public class JdbcTemplateDemo2 {
    
    /*夜光:我们聊一聊查询代码的书写
     * QueryRunner runner = new QueryRunner(datasource)
     * 返回对象
     * runner.query(sql,BeanHandler<user>(User.class));
     * 
     * 
     * 返回list集合
     * 
     * 在dbutils时候,我们发现有接口ResultSetHandler
     * dbutils提供了针对不同结果的实现类~~
     * 
     * 重点:jdbcTemplate要实现,也有特定的接口,我们称之为RowMapper
     * jdbcTemplate针对这个接口没有提供实现类,得到不同类型数据需要自己去进行封装
     * 
     * 
     * */
    
    //2、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:///studentsmanager", "root", "1111");
            //编写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();
            }
            
        }
    }
    
    
    
    //1、夜光:查询表中有多少条数据
    
    @Test
    public void testCount(){
        //创建一个对象,用来设置数据库信息
        DriverManagerDataSource dataSource =new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        //下面,我们还需要设置数据库地址
        dataSource.setUrl("jdbc:mysql:///studentsmanager");
        dataSource.setUsername("root");
        dataSource.setPassword("1111");
        //创建jdbcTemplate模板对象,设置数据源
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        
    //夜光:调用jdbcTemplate里面的方法实现计数
        //我们先写一个sql语句
    String sql = "select count(*) from user";
    
    //调用jdbcTemplate里面的方法来实现
    int count = jdbcTemplate.queryForObject(sql, Integer.class);
    System.out.println(count);
    }
    
    
    
    
    //3、夜光:查询返回对象~~
    
        @Test
        public void testObject(){
            //创建一个对象,用来设置数据库信息
            DriverManagerDataSource dataSource =new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            //下面,我们还需要设置数据库地址
            dataSource.setUrl("jdbc:mysql:///studentsmanager");
            dataSource.setUsername("root");
            dataSource.setPassword("1111");
            //创建jdbcTemplate模板对象,设置数据源
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            
            
        //上面的是固定的~~
        //夜光:先写一个sql语句,根据username进行查询
       
        String sql = "select * from user where username=?";
        
       
        //调用jdbcTemplate里面的方法来实现
        //夜光:第二个参数是接口,需要自己写类实现接口,就是对数据的封装~~
        User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "jack");
        System.out.println(user);
        }


        
//4、夜光:查询list返回对象~~

        @Test
        public void testList(){
            //创建一个对象,用来设置数据库信息
            DriverManagerDataSource dataSource =new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            //下面,我们还需要设置数据库地址
            dataSource.setUrl("jdbc:mysql:///studentsmanager");
            dataSource.setUsername("root");
            dataSource.setPassword("1111");
            //创建jdbcTemplate模板对象,设置数据源
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            
            
        //上面的是固定的~~
        //夜光:先写一个sql语句,根据username进行查询
       
        String sql = "select * from user ";
        
       
        //调用jdbcTemplate里面的方法来实现
      
        java.util.List<User> list = jdbcTemplate.query(sql, new MyRowMapper());
        
        System.out.println(list);
        
        }

}

//夜光:我们手写一个封装过程~~
class MyRowMapper implements RowMapper<User>{
//上面这个就是范型的意思,代表要把数据封装到哪里~~,我们学模型驱动就是这么写的嗯
    @Override
    public User mapRow(ResultSet rs, int num) throws SQLException {
        // 里面嵌套了一个方法,num就代表行号嗯~~
        //1、从结果集把数据拿到~~
        String username = rs.getString("username");
        String password = rs.getString("password");
        //2、把得到数据封装到对象里面去
        
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        return user;
    }
}