SpringBoot⼊门(四)数据库访问之JdbcTemplate
  本⽂记录在SpringBoot中使⽤JdbcTemplate访问数据库。
⼀ JDBC回顾
  最早是在上学时接触的使⽤JDBC访问数据库,主要有以下⼏个步骤:
1 加载驱动 Class.forName(Driver)
2 获取数据库连接 conn = Connection(url, user,password)
3 创建⼀个statement对象来访问操作数据库 statement = ateStatement();
4 执⾏SQL,访问操作数据库 rs = ute(sql)
5 得到结果集,业务处理
6 关闭连接,释放资源 statement.close(); conn.close();
使⽤jdbc访问并操作数据库时⽐较⿇烦,后来也做了⼀定的封装,主要是对statement的创建前和sql执⾏后进⾏的封装。
⼆ JdbcTemplate使⽤⽰例
  ⽬前我们使⽤的主流的开源的数据库访问框架主要有Hibernate,Mybatis,SpringJdbc。SpringJdbc时spring对JDBC封装后的⼀个ORM框架,JdbcTemplate就是SpringJdbc对外提供的⼀个访问数据库的接⼝类,我们通过它可以很容易的实现数据库的访问操作。但是需要我们⾃⼰根据业务⼿写相关的SQl,然后执⾏。
在spring boot项⽬中引⼊依赖,本⽂练习中使⽤的时MySql数据库
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
在application.properties中配置数据库连接相关信息
#数据库配置
#连接
spring.datasource.url=jdbc:mysql://localhost:3306/test
#账号
spring.datasource.username=root
#密码
spring.datasource.password=123456
#驱动
spring.datasource.sql.jdbc.Driver
完成以上配后,在启动springboot项⽬时,会⾃动把数据源信息注⼊到JdbcTemplate中,我们只需要在使⽤的地⽅注⼊JdbcTemplate就可以了
定义要操作数据库的相关⽅法接⼝
public interface UserDao {
/**
* 添加⽤户
*/
int insert(UserInfo user);
/**
* 根据ID删除⽤户
*/
int delete(Long id);
/**
* 修改⽤户
*/
int update(UserInfo user);
/**
* 根据ID查询⽤户
*/
UserInfo queryById(Long id);
/**
* 查询所有⽤户
* @return
*/
List<UserInfo> queryAll();
/**
* 分页查询⽤户
* @param start 开始位置
* @param size 要查询的数据条数
* @return
*/
List<UserInfo> pagedQuery(int start, int size);
}
接⼝的实现
@Service
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public int insert(UserInfo user) {
String insertSql = "insert into t_user(name, age) values(?, ?)";
return jdbcTemplate.update(insertSql, Name(), Age());
}
@Override
public int delete(Long id) {
String deleteSql = "delete from t_user where id = ?";
return jdbcTemplate.update(deleteSql, id);
}
@Override
public int update(UserInfo user) {
String updateSql = "update t_user set name = ?, age = ? where id = ?";
return jdbcTemplate.update(updateSql, Name(), Age(), Id());    }
@Override
public UserInfo queryById(Long id) {
String sql = "select * from t_user where id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<UserInfo>(UserInfo.class));    }
@Override
public List<UserInfo> queryAll() {
String sql = "select * from t_user";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper(UserInfo.class));
}
@Override
public List<UserInfo> pagedQuery(int start, int size) {
String sql = "select * from t_user limit ?, ?";
return jdbcTemplate.query(sql, new Object[]{start, size}, new BeanPropertyRowMapper(UserInfo.class));
}
}
可以看到,使⽤JdbcTemplate时我们完全省去了使⽤JDBC时的创建连接,释放资源等操作。不同数据库的分页查询不⼀样,MySql中⽤的limit关键字,第⼀个参数代表获取数据的起点,第⼆个是要查询的数量,如:limit 5,5  我们查询出来的是第6⾏到10⾏共5条数据
三测试,使⽤Junit Test
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootJdbctemplateApplicationTests {
@Autowired
private UserDaoImpl userDaoImpl;
@Test
public void testInsert(){
UserInfo user = new UserInfo("kg", 21);
userDaoImpl.insert(user);
}
@Test
public void testDelete(){
long id = 2;
userDaoImpl.delete(id);
}
@Test
public void testUpdate(){druid连接池配置详解
long id = 1;
UserInfo user = new UserInfo();
user.setId(id);
user.setName("kobe");
user.setAge(3);
userDaoImpl.update(user);
}
@Test
public void testQueryById(){
long id = 1;
UserInfo user = userDaoImpl.queryById(id);
}
@Test
public void testQueryAll(){
List<UserInfo> list = userDaoImpl.queryAll();
}
@Test
public void testPagedQuery(){
List<UserInfo> list = userDaoImpl.pagedQuery(1, 2);
}
}
在启动项⽬时,可以看到在控制台上输出的⽇志信息中有以下内容
四连接池配置
  在我们没有配置数据库连接池时,springboot默认给我们提供的Hikari连接池。如果我们像使⽤其他的,我们可以⾃⼰配置,⽐如我们想使⽤阿⾥的Druid连接池,我们需要引⼊依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
为了测试⽅便,我这⾥直接⽤@Value注解来获取配置信息
@SpringBootConfiguration
public class DataSourceConfig {
@Value("${spring.datasource.driver-class-name}")
private String DRIVER;
@Value("${spring.datasource.url}")
private String URL;
@Value("${spring.datasource.username}")
private String USER;
@Value("${spring.datasource.password}")
private String PASSWORD;
@Bean
public JdbcTemplate jdbcTemplate(){
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource());
return jdbcTemplate;
}
@Bean
public DataSource dataSource(){
System.out.println("初始化数据源start。。。");
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(DRIVER);
dataSource.setUrl(URL);
dataSource.setUsername(USER);
dataSource.setPassword(PASSWORD);
//连接池的其他的属性。。。
dataSource.setMaxActive(5);
//...
System.out.println("初始化数据源end。。。");
return dataSource;
}
}
 @SpringBootConfiguration 这个注解说明当前类是⼀个配置类,需要被特殊处理,在扫描时发现有@Bean 注解,会把当
前⽅法返回的类Bean注⼊的容器中,⽅法名会别标记为注⼊的Bean的别名,如上JdbcTemplate使⽤的DataSource就从默认的Hikari修改为Druid了,启动项⽬可以看到控制台⽇志信息

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。