SpringBoot数据访问
关系型数据库访问
1.连接池
dbcp2、c3p0、druid、HikariCP、proxool等
- 依赖连接池jar包、驱动的jar包
- spring-boot-starter-jdbc默认会追加连接池(1.x tomcat-jdbc 2.x hikaricp)
- application.properties或者application.yml中配置 数据库连接参数
- 在启动类开启自动配置@SpringBootApplication
DataSourceAutoConfiguration自动配置组件规则:
- 默认按创建Hikari,然后tomcat,dbcp2顺序执行
- 如果需要创建指定类型连接池,可以采用下面配置 spring.datasource.type=xxx,或者从jdbc中把hikaricpjar包删除调
-
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <exclusions> <exclusion> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </exclusion> </exclusions> </dependency>
2.Spring DAO(JdbcTemplate)
JdbcTemplateAutoConfiguration自动配置组件创建JdbcTemplate对象,使用时直接注入应用。
- 创建连接池对象(参考上述过程)
- 根据表定义实体类
- 定义Dao接口
-
编写Dao实现类,注入JdbcTemplate
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/myemployees?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
@Repository
public class BankInfoImpl implements BankInfo {
@Autowired
JdbcTemplate jdbcTemplate;
@Override
public List<Bank> findAll() {
String sql = "select * from bank";
RowMapper<Bank> bankRowMapper = new BeanPropertyRowMapper<>(Bank.class);
List<Bank> bankList = jdbcTemplate.query(sql, bankRowMapper);
return bankList;
}
}
3.Spring+MyBatis(mybatis-spring整合包)
引jar包:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
- 自动检测现有的DataSource
- 将创建并注册SqlSessionFactory的实例,该实例使用SqlSessionFactoryBean将该DataSource作为输入进行传递
- 将创建并注册从SqlSessionFactory中获取的SqlSessionTemplate的实例。
- 自动扫描您的mappers,将它们链接到SqlSessionTemplate并将其注册到Spring上下文,以便将它们注入到您的bean中。
在启动类配置@MapperScan注解,然后就可以使用SqlSessionTemplate来获取注解的sql
mapper映射文件可以通过2中方式来做:1.直接通过注解方式来2.通过xml配置文件来映射
public interface BankMapper {
@Select("select * from bank where id=#{id}")
List<Bank> findAll(@Param("id") int id);
}
2着区别是:前者快速、简洁,后者可以动态生成sql,还可以配置mybatis逆向插件生成代码。
4.Spring+JPA(hibernate)
引jar包:
<!--JPA-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
使用jpa:
@Repository
public interface AccountRepository extends JpaRepository<Account,Integer> {
List<Account> findAll();
}
@Entity
@Table(name = "bank")
public class Account implements Serializable {
@Id
@Column(name="id")
private int id;
@Column(name = "name")
private String name;
@Column(name = "money")
private Double money;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
}