SpringBoot与数据访问
1、JDBC
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
spring:
datasource:
username: root
password: 1234
url: jdbc:mysql://localhost:3306/jdbc
driver-class-name: com.mysql.jdbc.Driver
SpringBoot
默认使用的数据是org.apache.tomcat.jdbc.pool.DataSource
,SpringBoot
默认可以支持org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource
,若要修改数据源的类型,在配置文件中添加spring.datasource.type
属性即可。
在resource
目录下,创建schema-*.sql、data-*sql
的建表语句,在SpringBoot
启动时,就会执行命令。或者指定spring.datasource.schema=- classpath:a.sql
可以自定义名建表语句。
SpringBoot
自动配置了JdbcTemplate
去操作数据库。
2、整合Druid数据源
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
指定spring.datasource.type
为com.alibaba.druid.pool.DruidDataSource
即可。
@Configuration
public class DruidConfig {
//配置数据源,或在application.yml中指定spring.datasource.type
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid() {
return new DruidDataSource();
}
//配置Druid的监控
//1、配置一个管理后台的Servlet
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean();
bean.setServlet(new StatViewServlet());
bean.addUrlMappings("/druid/*");
Map<String, String> initParams = new HashMap<>();
initParams.put("loginUserName", "admin");
initParams.put("loginPassword", "admin");
//设置白名单
initParams.put("allow", "");
//设置黑名单
initParams.put("deny", "");
bean.setInitParameters(initParams);
return bean;
}
//2、配置一个web监控的filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
bean.setUrlPatterns(Arrays.asList("/*"));
Map<String, String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css,/druid/*");
bean.setInitParameters(initParams);
return bean;
}
}
3、整合MyBatis
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
①注解版
@Mapper
public interface DeptMapper {
@Select("select * from dept where dept_no = #{deptNo}")
Dept getDeptByDeptNo(@Param("deptNo") Integer deptNo);
@Delete("delete from dept where dept_no = #{deptNo}")
int deleteDeptById(@Param("deptNo") Integer deptNo);
@Options(useGeneratedKeys = true, keyProperty = "deptNo")
@Insert("insert into dept(name,loc) values(#{dept.name},#{dept.loc})")
int insertDept(@Param("dept")Dept dept);
@Update("update dept set name = #{dept.name},loc = #{dept.loc} where dept_no = #{dept.deptNo}")
int updateDept(@Param("dept") Dept dept);
}
@Mapper
指定这个文件是一个操作数据库的Mapper
,并不能使该Mapper
添加到IOC
容器中,需要在启动类上添加注解MapperScan()
扫描该包。
设置支持驼峰mybatis.configuration.map-underscore-to-camel-case=true
。
②配置文件版
mybatis:
config-location: classpath:mybatis/mybatis-config.xml 指定全局配置文件的位置
mapper-locations: classpath:mybatis/mapper/*.xml 指定sql映射文件的位置
4、整合SpringData JPA
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
spring:
datasource:
username: root
password: 1234
url: jdbc:mysql://localhost:3306/jdbc
jpa:
database: mysql
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
show-sql: true
hibernate:
ddl-auto: update
#懒加载支持
open-in-view: true
properties:
hibernate:
enable_lazy_load_no_trans: true
//String为主键的类型
public interface RoleRepository extends JpaRepository<Role,String> {
}
配置完这些后在Service层
就可以直接操作持久层了,JPA
和通用xMapper
很像,但支持一对多,多对多...这种会更好。因为JPA
的作者也是Hibernate
的作者,所以JPA
用到了很多Hibernate
的注解,后面我将写一遍详细关于JPA
的使用。