SpringBoot-jdbc
SpringBoot中的jdbcTemplate和Spring中的jdbc基本上是一样的,没什么变化的。但是也有不同的,在spring中使用jdbc的话使用的是配置的数据源,但是在boot中如果使用数据源的话会默认会自动使用数据库连接池的,如果不配置自己的数据库连接池都会触发这个默认的数据源的操作的。在自动装配的过程中,jdbc是自动装配的。支持的数据源有:
1、tomcat的数据库连接池 2、HikariDataSource的数据库连接池 3、dbcp2数据库连接池
springBoot默认支持的数据库连接池是上面的三种。我们要想使用jdbc的话需要引入一个依赖:jdbc 加上这个依赖的话,会默认的将HikariDataSource这个数据源给装配到了spring容器中去。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
如果不指定下面的type的话,默认的是使用HikariDataSource的数据库连接池,如果指定type的话就使用指定的数据库连接池。
在装配Hikari,会默认的装配DataSource对象到spring容器中去。报错的原因是内置的数据源的url等等一些列的信息没有配置。
配置下数据源:然后这些的配置会被加载到源代码的DataSourceProperties文件里面去。
然后再次启动项目运行下:我们可以通过DataSource得到数据源
然后通过数据源就可以把连接给拿出来:
bean.getConnection().getCatalog()
如果想用druid的数据库连接池的话:
1、加上相关的依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
2、在属性的配置文件中加上type的属性,然后就会把默认的数据库连接池给覆盖掉,从而用新的数据库连接池。
启动下项目运行下:
在SpringBoot中装配DataSource对象的同时会把jdbcTemplate对象装配进去。我们可以获取下:
1、新建个UserDaoImpl的类,代码如下:
package com.example.bootjdbc2;
import com.example.bootjdbc2.domain.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
@Repository
public class UserDaoImpl {
@Autowired
private JdbcTemplate jdbcTemplate;
class BookRowMapper implements RowMapper<Book> {
@Override
//ResultSet结果集映射一个对象Book
public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
Book book = new Book();
book.setBookAuthor(rs.getString("book_author"));
book.setBookDate(new Date(rs.getDate("book_date").getTime()));
book.setBookId(rs.getInt("book_id"));
book.setBookName(rs.getString("book_name"));
book.setBookPrice(rs.getBigDecimal("book_price"));
return book;
}
}
public void add() {
String sql = "INSERT INTO `testdb`.`t_book`(`book_name`, `book_author`, `book_price`, `book_date`) VALUES ('222', '333', 444, '2018-07-11');\n";
jdbcTemplate.execute(sql);
}
public Book selectOne() {
String sql = "select * from t_book where book_id=?";
Book book = jdbcTemplate.queryForObject(sql, new BookRowMapper(), 2);
return book;
}
public List<Book> selectList() {
String sql = "select * from t_book";
return jdbcTemplate.query(sql,new BookRowMapper());
}
public void update() {
String sql = "UPDATE `testdb`.`t_book` SET `book_name` = '333', `book_author` = '555', `book_price` = 444, `book_date` = '2018-07-11' WHERE `book_id` = 2;\n";
jdbcTemplate.update(sql);
}
public void delete() {
String sql = "delete from t_book where book_id=?";
jdbcTemplate.update(sql,3);
}
}
Book类的代码如下:
package com.example.bootjdbc2.domain;
import java.math.BigDecimal;
import java.util.Date;
public class Book {
private Integer bookId;
private String bookName;
private String bookAuthor;
private BigDecimal bookPrice;
private Date bookDate;
public Integer getBookId() {
return bookId;
}
public void setBookId(Integer bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookAuthor() {
return bookAuthor;
}
public void setBookAuthor(String bookAuthor) {
this.bookAuthor = bookAuthor;
}
public BigDecimal getBookPrice() {
return bookPrice;
}
public void setBookPrice(BigDecimal bookPrice) {
this.bookPrice = bookPrice;
}
public Date getBookDate() {
return bookDate;
}
public void setBookDate(Date bookDate) {
this.bookDate = bookDate;
}
@Override
public String toString() {
return "Book{" +
"bookId=" + bookId +
", bookName='" + bookName + '\'' +
", bookAuthor='" + bookAuthor + '\'' +
", bookPrice=" + bookPrice +
", bookDate=" + bookDate +
'}';
}
}
主类的代码如下:
package com.example.bootjdbc2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.sql.SQLException;
@SpringBootApplication
public class BootJdbc2Application {
public static void main(String[] args) throws SQLException {
ConfigurableApplicationContext context = SpringApplication.run(BootJdbc2Application.class, args);
DataSource bean = context.getBean(DataSource.class);
//获取数据源的
System.out.println(bean.getClass());
System.out.println(context.getBean(JdbcTemplate.class));
UserDaoImpl bean1 = context.getBean(UserDaoImpl.class);
System.out.println(bean1.selectOne());
}
}
输出的结果如下:
总结:上面的就是SpringBoot中的jdbcTemplate的用法。