SpringBoot-整合JdbcTemplate

整合JdbcTemplate

1.源码解释

Jdbc Template 是Spring 提供的一套JDBC模板,SpringBoot中对Jdbc Template的使用提供了自动化配置类JdbcTemplateAutoConfiguration,部分源码如下:

@AutoConfiguration(after = DataSourceAutoConfiguration.class)
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties(JdbcProperties.class)
@Import({ DatabaseInitializationDependencyConfigurer.class, JdbcTemplateConfiguration.class,
		NamedParameterJdbcTemplateConfiguration.class })
public class JdbcTemplateAutoConfiguration {

}

从源码可以看出,当classpath下存在DataSource和JdbcTemplate并且DataSource只有一个实例时,自动配置才会生效。若没有提JdbcOperations,则SpringBoot会自动向容器注入一个JdbcTemplate。要想使用JdbcTemplate,只需要提供JdbcTemplate依赖和DataSource,操作步骤如下:

2. 创建数据库和表

CREATE DATABASE `chapter05` DEFAULT CHARACTER SET utf8;

USE `chapter05`

CREATE TABLE `book`(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(128) DEFAULT NULL,
`author` VARCHAR(64) DEFAULT NULL,
PRIMARY KEY(`id`)			
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `book`(`id`,`name`,`author`) VALUES (1,'刻在你心底的名字','DiFer'),(2,'活着','余华');

3. 创建项目

创建Spring Boot 项目,添加依赖

<!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
<!-- 数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
<!--        druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>

4. 数据库配置

在application.yml 中配置数据库基本连接信息:

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/chapter05?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    #druid 数据源专有配置
    druid:
      filters: stat,wall
      aop-patterns: com.chen.*
      stat-view-servlet:
        enabled: true
        login-username: admin
        login-password: 123456
        reset-enable: false

      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: '*.js,*.gif,*jpg,*.png,*.ico,/druid/*'

      filter:
        stat:
          slow-sql-millis: 1000
          log-slow-sql: true
          enabled: true
        wall:
          enabled: true

注意:msql8.0版本以上要有时区的配置 serverTimezone=GMT%2B8

5. 创建实体类

创建Book实体类,代码如下:

public class Book {
    private Integer id;
    private String name;
    private String author;

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                '}';
    }

    public Book() {
    }

    public Book(Integer id, String name, String author) {
        this.id = id;
        this.name = name;
        this.author = author;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
}

6. 创建数据库访问层

创建BookDao,代码如下:

@Repository
public class BookDao {

   @Autowired
    JdbcTemplate jdbcTemplate;

   public int addBook(Book book){
       return jdbcTemplate.update("insert into book(name,author) values (?,?)",book.getName(),book.getAuthor());
   }

   public int updateBook(Book book){
       return jdbcTemplate.update("update book set name=?,author=? where id=?",book.getName(),book.getAuthor(),book.getId());
   }

    public int deleteBookById (Integer id) {
        return jdbcTemplate.update("delete from book where id=?",id);
    }
    
    public Book getBookById(Integer id){
       return jdbcTemplate.queryForObject("select * from book where id=?",new BeanPropertyRowMapper<>(Book.class),id);
    }
    
    public List<Book> getAllBooks(){
       return jdbcTemplate.query("select * from book",new BeanPropertyRowMapper<>(Book.class));
    }

7.创建Service和Controller

创建BookService和BookController,代码如下:

@Service
public class BookService {
 @Autowired
 BookDao bookDao;

 public int addBook(Book book){
     return bookDao.addBook(book);
 }

 public int updateBook(Book book){
     return bookDao.updateBook(book);
 }

 public int deleteBookById (Integer id) {
     return bookDao.deleteBookById(id);
 }

 public Book getBookById(Integer id){
     return bookDao.getBookById(id);
 }

 public List<Book> getAllBooks(){
     return bookDao.getAllBooks();
 }
}
@RestController
public class BookController {

    @Autowired
    BookService bookService;

    @GetMapping("/bookOps")
    public void bookOps(){
        Book b1 = new Book();
        b1.setName("SpringBoot");
        b1.setAuthor("Jack");
        int i = bookService.addBook(b1);
        System.out.println("addBook>>>"+i);

        Book b2 = new Book();
        b2.setId(2);
        b2.setName("兄弟");
        int updateBook = bookService.updateBook(b2);
        System.out.println("update>>>"+updateBook);

        Book b3 = bookService.getBookById(1);
        System.out.println("getBookById>>>"+b3);

        List<Book> allBooks = bookService.getAllBooks();
        System.out.println("getAllBooks>>>"+allBooks);
    }
}

控制台打印日志:
在这里插入图片描述
数据库表更新:
在这里插入图片描述

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值