首页 > 数据库技术 > 详细

springboot学习 spring-boot-starter-data-jdbc

时间:2021-04-24 16:24:24      阅读:296      评论:0      收藏:0      [点我收藏+]

starter-data-jdbc

包含

  1. 配置
  2. starter-jdbc
  3. data-jdbc https://docs.spring.io/spring-data/jdbc/docs/2.2.0/reference/html/#project

data-jdbc

注解 + 反射

interface PersonRepository extends PagingAndSortingRepository<Person, String> {
	// @Query("SELECT * FROM person WHERE name = :name")
	// List<Person> findByLastname(String lastname);
	// 上下等价
	List<Person> findByLastname(String lastname);
}

流程

findByLastname -> Lastname 对应的实体有没有@Column注解 -> 有注解 Lastname = name

SELECT * FROM person WHERE name = :name -> mate -> 有注解 name = Lastname -> setter

选用这种orm没问题,再来看看starter-jdbc

starter-jdbc

starter-jdbc的一个很大的缺点就是,每一个bean都会和sql执行绑定,重复且繁琐.现在的好消息是orm以及帮我们解决了这个,但是orm维护的bean,不灵活.

比如一个很复杂的sql返回了,各部门薪资前三的员工,这是一个联表,很明显无法映射到两各类中.

jdbc有两种风格

  1. bean-base 缺点复杂用spring-data-jdbc解决
  2. map-base 缺点认为所有结果都是map,而map不好读.(只看代码你无法知道map有什么?需要看sql语句)

现在1.解决了.2,灵活适合这种情况下.

func map(
new map
List<Actor> actors = this.jdbcTemplate.query(
        "select first_name, last_name from t_actor",
        new RowMapper<Actor>() {
            public void mapRow(ResultSet rs, int rowNum) throws SQLException {
                map.put("first_name", rs.getString("first_name"));
                map.put("last_name", rs.getString("last_name"));
            }
        });
return map
)

存在线程竞争,可以考虑concurrent包。

springboot学习 spring-boot-starter-data-jdbc

原文:https://www.cnblogs.com/zeerbeer/p/14696656.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!