zoukankan      html  css  js  c++  java
  • 【spring-boot】spring-boot-SpringBoot与数据访问

    六、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>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: 123456
        url: jdbc:mysql://192.168.15.22:3306/jdbc
        driver-class-name: com.mysql.jdbc.Driver:
      datasource:
        username: root
        password: 123456
        url: jdbc:mysql://192.168.15.22:3306/jdbc
        driver-class-name: com.mysql.jdbc.Driver

    效果:

    ​ 默认是用org.apache.tomcat.jdbc.pool.DataSource作为数据源;

    ​ 数据源的相关配置都在DataSourceProperties里面;

    自动配置原理:

    org.springframework.boot.autoconfigure.jdbc:

    1、参考DataSourceConfiguration,根据配置创建数据源,默认使用Tomcat连接池;可以使用spring.datasource.type指定自定义的数据源类型;

    2、SpringBoot默认可以支持;

    org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource、
    
    
    

    3、自定义数据源类型

    /**
     * Generic DataSource configuration.
     */
    @ConditionalOnMissingBean(DataSource.class)
    @ConditionalOnProperty(name = "spring.datasource.type")
    static class Generic {
    ​
       @Bean
       public DataSource dataSource(DataSourceProperties properties) {
           //使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
          return properties.initializeDataSourceBuilder().build();
       }
    ​
    }
     * Generic DataSource configuration.
     */
    @ConditionalOnMissingBean(DataSource.class)
    @ConditionalOnProperty(name = "spring.datasource.type")
    static class Generic {
    ​
       @Bean
       public DataSource dataSource(DataSourceProperties properties) {
           //使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
          return properties.initializeDataSourceBuilder().build();
       }
    ​
    }

    4、DataSourceInitializer:ApplicationListener

    ​ 作用:

    ​ 1)、runSchemaScripts();运行建表语句;

    ​ 2)、runDataScripts();运行插入数据的sql语句;

    默认只需要将文件命名为:

    schema-*.sql、data-*.sql
    默认规则:schema.sql,schema-all.sql;
    可以使用   
        schema:
          - classpath:department.sql
          指定位置
    默认规则:schema.sql,schema-all.sql;
    可以使用   
        schema:
          - classpath:department.sql
          指定位置

    5、操作数据库:自动配置了JdbcTemplate操作数据库

    2、整合Druid数据源

    导入druid数据源
    @Configuration
    public class DruidConfig {
    ​
        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource druid(){
           return  new DruidDataSource();
        }
    ​
        //配置Druid的监控
        //1、配置一个管理后台的Servlet
        @Bean
        public ServletRegistrationBean statViewServlet(){
            ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
            Map<String,String> initParams = new HashMap<>();
    ​
            initParams.put("loginUsername","admin");
            initParams.put("loginPassword","123456");
            initParams.put("allow","");//默认就是允许所有访问
            initParams.put("deny","192.168.15.21");
    ​
            bean.setInitParameters(initParams);
            return bean;
        }
    ​
    ​
        //2、配置一个web监控的filter
        @Bean
        public FilterRegistrationBean webStatFilter(){
            FilterRegistrationBean bean = new FilterRegistrationBean();
            bean.setFilter(new WebStatFilter());
    ​
            Map<String,String> initParams = new HashMap<>();
            initParams.put("exclusions","*.js,*.css,/druid/*");
    ​
            bean.setInitParameters(initParams);
    ​
            bean.setUrlPatterns(Arrays.asList("/*"));
    ​
            return  bean;
        }
    }
    ​
    @Configuration
    public class DruidConfig {
    ​
        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource druid(){
           return  new DruidDataSource();
        }
    ​
        //配置Druid的监控
        //1、配置一个管理后台的Servlet
        @Bean
        public ServletRegistrationBean statViewServlet(){
            ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
            Map<String,String> initParams = new HashMap<>();
    ​
            initParams.put("loginUsername","admin");
            initParams.put("loginPassword","123456");
            initParams.put("allow","");//默认就是允许所有访问
            initParams.put("deny","192.168.15.21");
    ​
            bean.setInitParameters(initParams);
            return bean;
        }
    ​
    ​
        //2、配置一个web监控的filter
        @Bean
        public FilterRegistrationBean webStatFilter(){
            FilterRegistrationBean bean = new FilterRegistrationBean();
            bean.setFilter(new WebStatFilter());
    ​
            Map<String,String> initParams = new HashMap<>();
            initParams.put("exclusions","*.js,*.css,/druid/*");
    ​
            bean.setInitParameters(initParams);
    ​
            bean.setUrlPatterns(Arrays.asList("/*"));
    ​
            return  bean;
        }
    }
    ​

    3、整合MyBatis

            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.1</version>
            </dependency>    <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.1</version>
            </dependency>

    步骤:

    ​ 1)、配置数据源相关属性(见上一节Druid)

    ​ 2)、给数据库建表

    ​ 3)、创建JavaBean

    4)、注解版

    //指定这是一个操作数据库的mapper
    @Mapper
    public interface DepartmentMapper {
    ​
        @Select("select * from department where id=#{id}")
        public Department getDeptById(Integer id);
    ​
        @Delete("delete from department where id=#{id}")
        public int deleteDeptById(Integer id);
    ​
        @Options(useGeneratedKeys = true,keyProperty = "id")
        @Insert("insert into department(departmentName) values(#{departmentName})")
        public int insertDept(Department department);
    ​
        @Update("update department set departmentName=#{departmentName} where id=#{id}")
        public int updateDept(Department department);
    }
    @Mapper
    public interface DepartmentMapper {
    ​
        @Select("select * from department where id=#{id}")
        public Department getDeptById(Integer id);
    ​
        @Delete("delete from department where id=#{id}")
        public int deleteDeptById(Integer id);
    ​
        @Options(useGeneratedKeys = true,keyProperty = "id")
        @Insert("insert into department(departmentName) values(#{departmentName})")
        public int insertDept(Department department);
    ​
        @Update("update department set departmentName=#{departmentName} where id=#{id}")
        public int updateDept(Department department);
    }

    问题:

    自定义MyBatis的配置规则;给容器中添加一个ConfigurationCustomizer;

    @org.springframework.context.annotation.Configuration
    public class MyBatisConfig {
    ​
        @Bean
        public ConfigurationCustomizer configurationCustomizer(){
            return new ConfigurationCustomizer(){
    ​
                @Override
                public void customize(Configuration configuration) {
                    configuration.setMapUnderscoreToCamelCase(true);
                }
            };
        }
    }.springframework.context.annotation.Configuration
    public class MyBatisConfig {
    ​
        @Bean
        public ConfigurationCustomizer configurationCustomizer(){
            return new ConfigurationCustomizer(){
    ​
                @Override
                public void customize(Configuration configuration) {
                    configuration.setMapUnderscoreToCamelCase(true);
                }
            };
        }
    }
    使用MapperScan批量扫描所有的Mapper接口;
    @MapperScan(value = "com.atguigu.springboot.mapper")
    @SpringBootApplication
    public class SpringBoot06DataMybatisApplication {
    ​
        public static void main(String[] args) {
            SpringApplication.run(SpringBoot06DataMybatisApplication.class, args);
        }
    }
    @MapperScan(value = "com.atguigu.springboot.mapper")
    @SpringBootApplication
    public class SpringBoot06DataMybatisApplication {
    ​
        public static void main(String[] args) {
            SpringApplication.run(SpringBoot06DataMybatisApplication.class, args);
        }
    }

    5)、配置文件版

    mybatis:
      config-location: classpath:mybatis/mybatis-config.xml 指定全局配置文件的位置
      mapper-locations: classpath:mybatis/mapper/*.xml  指定sql映射文件的位置:
      config-location: classpath:mybatis/mybatis-config.xml 指定全局配置文件的位置
      mapper-locations: classpath:mybatis/mapper/*.xml  指定sql映射文件的位置

    更多使用参照

    http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/

    4、整合SpringData JPA

    1)、SpringData简介

    2)、整合SpringData JPA

    JPA:ORM(Object Relational Mapping);

    1)、编写一个实体类(bean)和数据表进行映射,并且配置好映射关系;

    //使用JPA注解配置映射关系
    @Entity //告诉JPA这是一个实体类(和数据表映射的类)
    @Table(name = "tbl_user") //@Table来指定和哪个数据表对应;如果省略默认表名就是user;
    public class User {
    ​
        @Id //这是一个主键
        @GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键
        private Integer id;
    ​
        @Column(name = "last_name",length = 50) //这是和数据表对应的一个列
        private String lastName;
        @Column //省略默认列名就是属性名
        private String email;
    @Entity //告诉JPA这是一个实体类(和数据表映射的类)
    @Table(name = "tbl_user") //@Table来指定和哪个数据表对应;如果省略默认表名就是user;
    public class User {
    ​
        @Id //这是一个主键
        @GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键
        private Integer id;
    ​
        @Column(name = "last_name",length = 50) //这是和数据表对应的一个列
        private String lastName;
        @Column //省略默认列名就是属性名
        private String email;

    2)、编写一个Dao接口来操作实体类对应的数据表(Repository)

    //继承JpaRepository来完成对数据库的操作
    public interface UserRepository extends JpaRepository<User,Integer> {
    }
    ​
    public interface UserRepository extends JpaRepository<User,Integer> {
    }
    ​

    3)、基本的配置JpaProperties

    spring:  
     jpa:
        hibernate:
    #     更新或者创建数据表结构
          ddl-auto: update
    #    控制台显示SQL
        show-sql: true:  
     jpa:
        hibernate:
    #     更新或者创建数据表结构
          ddl-auto: update
    #    控制台显示SQL
        show-sql: true
  • 相关阅读:
    Service Name Port Number Transport Protocol tcp udp 端口号16bit
    linux linux 互传文件 win 不通过 ftp sftp 往linux 传文件(文件夹)
    soft deletion Google SRE 保障数据完整性的手段
    Taylor series
    Taylor's theorem
    Moving average
    REQUEST
    Unix file types
    mysqld.sock
    Tunneling protocol
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860970.html
Copyright © 2011-2022 走看看