Spring Data

  • Spring的数据访问哲学

202081191941

Spring的数据访问异常体系

SQLException

  • 提供了挺多的异常
  • 数据访问模板化

配置数据源

  • 使用JNDI
  • 使用数据源连接池
@Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("Root@@715711877");
        dataSource.setUrl("jdbc:mysql:///manage");
        return dataSource;
    }
  • 使用嵌入式数据源

使用profile选择数

@Profile("product")
    @Bean
    public DataSource dataSource(){

        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl("jdbc:h2:~/test");
        return dataSource;
    }

    @Profile("dev")
    @Bean
    public DataSource dataSourceDev(){

        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("Root@@715711877");
        dataSource.setUrl("jdbc:mysql:///manage");
        return dataSource;
    }

在Spring 当中使用JDBC

JDBC模板

JdbcDaoSupport

  • update():执行DML语句。增、删、改语句
  • queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合

    • 注意:这个方法查询的结果集长度只能是1
  • queryForList():查询结果将结果集封装为list集合

    • 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
  • query():查询结果,将结果封装为JavaBean对象

    • query的参数:RowMapper

      • 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
      • new BeanPropertyRowMapper<类型>(类型.class)
  • queryForObject:查询结果,将结果封装为对象

    • 一般用于聚合函数的查询
  • 配置模板

@Bean
    public JdbcTemplate jdbcTemplate(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSourceDev());
        return jdbcTemplate;
    }
  • 执行操作
@org.springframework.stereotype.Service
public class Service {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public void insert(Admin admin){
        jdbcTemplate.update("INSERT INTO admin(username,password) VALUES(?,?)",
                admin.getUsername(),
                admin.getPassword());
    }
}

使用Lambda表达式

jdbcTemplate.query("select * from admin",r->{

            do{
                System.out.println(
                        r.getString("username")+"||"+r.getString("password")
                );
            }while (r.next());

        });

使用命名参数

public void insert(Admin admin){
        jdbcTemplate.update("INSERT INTO admin(username,password) VALUES(:username,:password)",
                Map.of("username",admin.getUsername(),
                        "password",admin.getPassword()));
    }

results matching " "

No results matching " "

results matching " "

No results matching " "