zoukankan      html  css  js  c++  java
  • 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实现分布式事务管理

  • 相关阅读:
    归一化与标准化区别
    pytorch进行mnist识别实战
    pytorch实现学习率衰减
    RNN
    Python中9大时间序列预测模型
    InfluxDB基本概念
    如何在CentOS 7上使用InfluxDB分析系统指标(转载学习用)
    InfluxDB1.2.4部署(centos7)
    Centos7搭建influxdb+chronograf
    python通过SNMP协议收集服务器监控信息
  • 原文地址:https://www.cnblogs.com/cashew/p/10682329.html
Copyright © 2011-2022 走看看