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>
server:
  port: 8083
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123.abc
    url: jdbc:mysql://192.168.254.129:3306/testdb
    initialization-mode: always  //在程序自动执行sql脚本时,需要将这个属性设置为always,否则不执行。脚本创建ok,需要去掉这个属性或设置为never

效果:

默认的是class com.zaxxer.hikari.HikariDataSource作为数据源

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

自动配置原理

org.springframework.boot.autoconfigure.jdbc

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

2)SpringBoot默认可以支持

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

3)自定义数据源类型

    @Configuration(
        proxyBeanMethods = false
    )
    @ConditionalOnMissingBean({DataSource.class})
    @ConditionalOnProperty(
        name = {"spring.datasource.type"}
    )
    static class Generic {
        Generic() {
        }

        @Bean
        DataSource dataSource(DataSourceProperties properties) {
            //使用DataSourceBuilder创建数据源,利用反射创建响应type的数据源,并且绑定相关属性
            return properties.initializeDataSourceBuilder().build();
        }
    }

4)DataSourceInitializer:

作用:

  1. runSchemaScripts();运行创建表语句
  2. runDataScripts()运行插入数据的sql语句

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

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

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

2,整合Druid数据源

1)引入依赖

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

2)配置连接参数

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123.abc
    url: jdbc:mysql://192.168.254.129:3306/testdb
    initialization-mode: never
    type: com.alibaba.druid.pool.DruidDataSource

    #以下属性配置在DataSourceProperties没有的,因此没有办法绑定,需要单独处理
    #初始化链接数量
    initialSize: 5
    #最小空闲链接数
    minIdle: 5
    #最大并发连接数
    maxActive: 10
    #获取链接等待超时的时间
    maxWait: 60000
    #配置间隔多久才进行一次检测,检测需要关闭的空闲链接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000

3)定义DruidDataSouce,绑定连接池属性。另外设置druid的web监控

@Configuration
public class DruidConfig {
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DruidDataSource druid(){
        return new DruidDataSource();
    }

    //配置druid的监控
    //1,配置一个管理后台的servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean servletRegistrationBean = 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.254.129");//禁止访问
        servletRegistrationBean.setInitParameters(initparams);
        return servletRegistrationBean;
    }

    // 2,配置一个web监控的filter
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());

        Map<String,String> initParams=new HashMap<>();
        initParams.put("exclusions","*.js,*.css,/druid/*");
        filterRegistrationBean.setInitParameters(initParams);
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
        return filterRegistrationBean;
    }
}

4)通过http://localhost:8083/druid/访问

3,整合mybatis

1)引入依赖

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

 

 

 步骤:

  1. 配置数据源相关属性
  2. 给数据库建表
  3. 创建JavaBean

2)注解版

//操作数据库的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(name) values(#{name})")
    public int insertDept(Department department);

    @Update("update department set name=#{name} where id=#{id}")
    public int updateDept(Department department);

    @Select("select * from department")
    public List<Department> getDepts();
}

使用MapperScan批量扫描mapper接口

//使用MapperScan批量扫描所有的Mapper接口;
@MapperScan(value = "com.atguigu.springboot.mapper")
@SpringBootApplication
public class SpringBoot06DataMybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBoot06DataMybatisApplication.class, args);
    }
}

自定义设置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);
            }
        };
    }
}

在yml或xml文件中设置

mybatis:
  configuration:
    map-underscore-to-camel-case: true

3)配置文件版

springboot全局配置文件中设置mybatis的属性

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

mapper的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.company.springbootjdbc.mapper.DepartmentMapper">
    <select id="getDeptById" resultType="com.company.springbootjdbc.pojo.Department" parameterType="Integer">
        select * from department where id=#{id}
    </select>
</mapper>

4,整合SprigData JPA

SpringData 简介

 整合SpringData JPA

JPA:ORM(Object Relational Mapping)

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

//使用JPA注解配置映射关系
@Entity //告诉JPA这是一个实体类(和数据表映射的类)
@Table(name="tbl_user")   //@Table来指定和哪个数据表对相应,如果省略默认表名就是user
@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })  //标记不生成json对象的属性,一定要有该注解处理,否则会报错
public class User {
    @Id   //这是一个主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)  //自增主键
    private Integer id;

    @Column(name="LastName",length = 50)  // 这是和数据表对应的一个列,省略name值,默认列名就是属性名
    private String lastName;

    @Column(name="Email")
    private String email;

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

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

3)基本的配置JPAProperties

spring:
    jpa:
      hibernate:
          # 更新或者创建数据表结构
         ddl‐auto: update
      # 控制台显示SQL
      show‐sql: true

4)controller处理请求

@RestController
public class UserController {

    @Autowired
    public UserRepository userRepository;

    @GetMapping("/user/{id}")
    public User getUserById(@PathVariable("id") Integer id){
       // User user = userRepository.getOne(id);
        User user = userRepository.findById(id).orElse(null);
        return user;
    }

    @GetMapping("/user")
    public User addUser(User user){
        User save = userRepository.save(user);
        return save;
    }
}

 

 posted on 2020-12-01 20:20  会飞的金鱼  阅读(125)  评论(0)    收藏  举报