springboot项目2——使用数据库

spring boot中接入数据库

(1) 在application.properties中加入datasouce的配置
(2) 在pom.xml加入mysql的依赖。
(3) 获取DataSouce的Connection进行测试。

src/main/resouces/application.properties:

########################################################
###datasource
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10

pom.xml配置:

<dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
</dependency>  

spring boot 使用Hibernate的ORM框架

JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
Hibernate就是JPA Provider中很强的一个。从功能上来说,JPA就是Hibernate功能的一个子集

JPA 和 Hibernate 有哪些区别?

JPA本身是一种规范,它的本质是一种ORM规范(不是ORM框架,因为JPA并未提供ORM实现,只是制定了规范)因为JPA是一种规范,所以,只是提供了一些相关的接口,但是接口并不能直接使用,JPA底层需要某种JPA实现,Hibernate 是 JPA 的一个实现集

JPA 可以支持动态 SQL 吗?

JPA 是根据实体类的注解来创建对应的表和字段,如果需要动态创建表或者字段,需要动态构建对应的实体类,再重新调用Jpa刷新整个Entity。动态SQL,mybatis支持的最好,jpa也可以支持,但是没有Mybatis那么灵活。

pom.xml配置:

<dependency>  
           <groupId>org.springframework.boot</groupId>  
           <artifactId>spring-boot-starter-data-jpa</artifactId>  
</dependency>  

application.properties配置:

########################################################  
### Java Persistence Api  
########################################################  
# Specify the DBMS  
spring.jpa.database = MYSQL  
# Show or not log for each sql query  
spring.jpa.show-sql = true  
# Hibernate ddl auto (create, create-drop, update)  
spring.jpa.hibernate.ddl-auto = update  
# Naming strategy  
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy  
# stripped before adding them to the entity manager)  
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect  

使用Hibernate带来的好处了,在实体类注解@Entity就会自动进行表的DDL操作。
实体类中其他常用注解:@Id @GeneratedValue、 @Transient
Dao层继承一种Repository即可,无需@Repository注解
事务@Transactional注解加在 服务层的方法上

出现无法注入的问题,可能是:
如果你的目录结构应该是这种形式:
com.baidu.dao
com.baidu.service
com.baidu.controller
而你的启动项的位置:
com.baidu.app
就会报错,说某某某无法注入的问题。
原因:
SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!
也就是说,上面的目录结构中,只会扫描com.baidu.app包和其子包,如果service和dao不在com.baidu.app包或其子包下,就会扫描不到,所有就无法注入了。

使用JdbcTemplate

以便使用自己编写的复杂sql。
(1) 在pom.xml加入jdbcTemplate的依赖;
(2) 编写DemoDao类,声明为:@Repository,引入JdbcTemplate
(3) 编写DemoService类,引入DemoDao进行使用
(4) 编写Demo2Controller进行简单测试

在Dao类中加入:

@Resource
private JdbcTemplate jdbcTemplate;  

即可直接使用了。

使用jdbcTemplate进行数据库的操作
比如:

String sql = "insert into Demo(name,age) values(?,?)";
jdbcTemplate.update(sql, new Object[]{demo.getName(),demo.getAge()});  

使用Druid数据库连接池

也可参考官方文档
它不仅是数据库连接池,并且能够提供强大的监控和扩展功能,包括一些维度的统计和分析功能。
Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource

1)在pom.xml配置druid依赖包;
2)配置application.properties加入数据库源类型等参数;
3)编写druid servlet和filter提供监控页面访问;

pom依赖:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.18</version>
        </dependency>

application.properties配置:(1.4.1以及之后支持spring.datasource.type属性,不然出现No qualifying bean of type [javax.sql.DataSource] 需要自定义datasource配置项加载)

# 数据库访问配置
# 主数据源,默认的
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root


# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true

启动项目,出现com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited表示配置成功

编写、配置监控统计功能Servlet、Filter,既可以基于注解的配置,也可以在web.xml里配置。
方法一:使用@WebServlet、@WebFilter编写servlet,filter,然后通过@ServletComponentScan进行启动扫描包的方式进行处理的,继承druid提供的基类,除了一些@WebInitParam的初始化参数,不需要任何的编码。

方法二:通过@Configuration、@Bean注册Servlet、Filter类的Bean,启动类不需要添加@ServletComponentScan注解。
编码详见

http://127.0.0.1:8080/druid/index.html 即可查看数据源及SQL统计等。

多数据源配置

方法一:
先在properties配置文件中配置两个数据源,创建分包mapper,使用@ConfigurationProperties读取properties中的配置,用不同的前缀名区分不同的数据源,使用@MapperScan注册到对应的mapper包中
方法二:

详见这里

多数据源事务如何管理

第一种方式是在service层的@TransactionManager中使用transactionManager指定DataSourceConfig中配置的事务
第二种是使用jta-atomikos实现分布式事务管理

原文地址:https://www.cnblogs.com/cashew/p/10682329.html