zoukankan      html  css  js  c++  java
  • SpringBoot与数据访问

    一、SpringBoot整合Jdbc

       1、添加依赖

       <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.6.RELEASE</version>
        </parent>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
            <!--JDBC依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <!--mysql依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>

    2、配置文件application.properties

    spring.datasource.password=root
    spring.datasource.username=root
    spring.datasource.url=jdbc:mysql://localhost:3306/study
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    3、测试类

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class JDBCTest {
    
        @Autowired
        private DataSource dataSource;
    
        @Test
        public  void testJdbc() throws SQLException {
            //获取数据源的类
            Class<? extends DataSource> aClass = dataSource.getClass();
            System.out.println(aClass);
            //获取数据源的连接
            Connection connection = dataSource.getConnection();
            System.out.println(connection);
        }
    }

    4:效果

    默认使用的是class com.zaxxer.hikari.HikariDataSource作为数据源,数据源的相关配置都在DataSourceProperties里面;

    自动配置原理:

    org.springframework.boot.autoconfigure.jdbc;

    1、参考DataSourceConfiguration,根据配置创建数据源,默认使用HikariDataSource 连接池;可以使用

          spring.datasource.type指定自定义的数据源类型;

        @ConditionalOnClass(HikariDataSource.class)
        @ConditionalOnMissingBean(DataSource.class)
         //指定数据类型
        @ConditionalOnProperty(name = "spring.datasource.type", havingValue = "com.zaxxer.hikari.HikariDataSource", matchIfMissing = true)
        static class Hikari {
    
            @Bean
            @ConfigurationProperties(prefix = "spring.datasource.hikari")
            public HikariDataSource dataSource(DataSourceProperties properties) {
                HikariDataSource dataSource = createDataSource(properties,
                        HikariDataSource.class);
                if (StringUtils.hasText(properties.getName())) {
                    dataSource.setPoolName(properties.getName());
                }
                return dataSource;
            }
    
        } 

    2、SpringBoot默认支持

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

    3、自定数据源类型

        @ConditionalOnMissingBean(DataSource.class)
        @ConditionalOnProperty(name = "spring.datasource.type")
        static class Generic {
               // //使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
            @Bean
            public DataSource dataSource(DataSourceProperties properties) {
                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
          指定位置

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

    @RestController
    public class UserController {
     
    
        @Autowired
        private JdbcTemplate jdbcTemplate;
       
        @RequestMapping("/query")
        public Map<String,Object> query(){
            return jdbcTemplate.queryForList("SELECT * FROM tb_user").get(0);
        }
    }

    二、整合Druid数据源

    1、application.yml文件

    spring:
      datasource:
    #   数据源基本配置
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/study
        type: com.alibaba.druid.pool.DruidDataSource
    #   数据源其他配置
        initialSize: 5
        minIdle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true

    2、引入依赖

     <!--druid 依赖-->
            <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
          </dependency>

    3、配置类

    @Configuration
    public class DruidDataSourceConfig {
    
        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource getDataSource(){
            return DruidDataSourceBuilder.create().build();
        }
        //配置Durid的监控
        //1、配置一个管理后台的Servlet
        @Bean
        public ServletRegistrationBean statViewFilter(){
            ServletRegistrationBean servletRegistrationBean =
                    new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
            Map<String,Object> initParam = new HashMap<>();
            initParam.put("loginUsername","admin");
            initParam.put("loginPassword","admin");
            initParam.put("allow","");//默认允许访问所有的
            initParam.put("deny","192.168.23.56");//不允许访问的ip
            servletRegistrationBean.setInitParameters(initParam);
            return servletRegistrationBean;
        }
        
        //2、配置一个web监控的filter
        @Bean
        public FilterRegistrationBean webFilterRegistrationBean(){
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
            filterRegistrationBean.setFilter(new WebStatFilter());
            Map<String,Object> initParam = new HashMap<>();
            initParam.put("exclusions","*.js,*.css,/druid/*");//忽略资源
            filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));//拦截所有
            return filterRegistrationBean;
        }
    }

    4、启动主启动类测试

    访问http://localhost:8080/druid

    访问一个路径之后,效果

    三、SpringBoot整合Mybatis

    1、引入依赖

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-parent</artifactId>
            <version>2.0.6.RELEASE</version>
        </parent>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
            <!--mybatis起步依赖-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.1.1</version>
            </dependency>
            <!--mysql依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>

    2、添加数据连接信息

    application.properties

    #mybatis配置信息
    #spring集成Mybatis环境
    #pojo别名扫描包
    mybatis.type-aliases-package=com.yehui.mapper
    #加载Mybatis映射文件
    mybatis.mapper-locations=classpath:mapper/*.xml

     3、创建实体类

    public class User {
        private Integer id;
        private String password;
        private String NAME;
        private int age;
        private String sex;

    4、编写Mapper

    @Mapper
    public interface UserMapper {
        public List<User> selectList();
    }
    注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中
    如果不使用@Mapper注解,可以在启动类上面加上@MapperScan(value = "com.*.mapper")进行批量扫描如下
    //使用MapperScan批量扫描所有的Mapper接口;
    @MapperScan(value = "com.hui.mapper")
    @SpringBootApplication
    public class StartApp {
        public static void main(String[] args) {
            SpringApplication.run(StartApp.class,args);
        }
    } 

     5、编写mapper配置文件

    srcmain esourcesmapper路径下加入UserMapper.xml配置文件"

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.yehui.mapper.UserMapper">
        <select id="selectList" resultType="com.yehui.entity.User">
            select * from t_user
        </select>
    </mapper>

    6、编写service

    @Service
    public class Uservice {
    
        @Autowired
        private UserMapper userMapper;
    
        public List<User> selectUser(){
            return userMapper.selectList();
        }
    }

    7、编写Controller

    @Controller
    public class UserController {
        @Autowired
        private Uservice uservice;
        @RequestMapping("/selectList")
        @ResponseBody
        public Object selectList(){
            return uservice.selectUser();
        }
    }

    8、测试

    四、springboot整合springjpa

    1、引入依赖

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.6.RELEASE</version>
        </parent>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
            <!-- springBoot JPA的起步依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <!--mysql依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>

    2、编写UserRepository

    public interface UserRepository extends Repository<User,Integer> {
        public List<User> findAll();
    }

    3、编写测试类

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class JpaTest {
    
        @Autowired
        private UserRepository userRepository;
        @Test
        public void test01(){
            List<User> all = userRepository.findAll();
            System.out.println(all);
        }
    }
  • 相关阅读:
    django 中 null=True 和 blank=True的区别!
    利用js代码屏蔽f12,右键,粘贴,复制,剪切,选中,操作!!秀!秀!秀!
    jupyter notebook快速入门教程
    锁相关
    事务相关
    索引
    体系结构
    数据类型
    字符集
    部署规范
  • 原文地址:https://www.cnblogs.com/cxyyh/p/10630248.html
Copyright © 2011-2022 走看看