發布時間: 2020-06-28 16:32:00
【Java技術培訓】SpringBoot整合JDBC?
一、 JDBC簡介
Java數據庫連接,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規范客戶端程序如何來訪問數據庫的應用程序接口,提供了諸如查詢和更新數據庫中數據的方法。JDBC也是Sun Microsystems的商標。我們通常說的JDBC是面向關系型數據庫的。
二、 使用JDBC操作數據庫的基本步驟
加載驅動。
建立鏈接
創建數據庫操作對象
發送sql語句
解析sql語句
參數解析
資源回收
通過上面的執行流程使用JDBC來操作數據庫是比較復雜的。
SpringBoot提供了對JDBC封裝的啟動器包,簡化了JDBC的開發流程,
三、 在SpringBoot項目中引入JDBC依賴實現對數據庫的操作
1. 引入必須的依賴包<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>2. 修改application.yml編寫配置文件server:
port: 9001
spring:
application:
name: springboot-jdbc
# 配置連接數據庫
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC
username: root
password: 123456aB3. 編寫與數據庫對應的實體類@Data
public class TbUser {
private Integer id;
private String username;
private String password;
private String role;
}
4. 編寫dao層
l jdbcTemplate.update適合于insert 、update和delete操作
l jdbcTemplate.queryForObject用于查詢單條記錄返回結果
l jdbcTemplate.query用于查詢結果列表
l BeanPropertyRowMapper可以將數據庫字段的值向對象映射,滿足駝峰標識也可以自動映射。@Repository
public class TbUserDao {
@Resource
private JdbcTemplate jdbcTemplate;
//保存用戶
public void saveUser(TbUser user){
jdbcTemplate.update("insert into tb_user(username,password,role) values (?,?,?)",
user.getUsername(),
user.getPassword(),
user.getRole());
}
//刪除用戶
public void deleteUserById(Integer id){
jdbcTemplate.update("delete from tb_user where id =?",new Object[]{id});
}
//更新用戶信息
public void updateUserById(TbUser tbUser){
jdbcTemplate.update("update tb_user set username = ?,password = ?,role = ? where id = ?",
tbUser.getUsername(),
tbUser.getPassword(),
tbUser.getRole(),
tbUser.getId());
}
//id查詢
public TbUser findUserById(Integer id){
return (TbUser) jdbcTemplate.queryForObject("select * from tb_user where id = ?", new Object[]{id}, new BeanPropertyRowMapper(TbUser.class));
}
//查詢所有
public List<TbUser> findAll(){
List<TbUser> tbUserList = jdbcTemplate.query("select * from tb_user", new BeanPropertyRowMapper<>(TbUser.class));
return tbUserList;
}
}
5. 編寫service層public interface TbUserService {
TbUser saveUser(TbUser tbUser);
void deleteUserById(Integer id);
void updateUserById(TbUser tbUser);
TbUser findUserById(Integer id);
List<TbUser> findAll();
}
6. 編寫serviceImpl@Service
public class TbUserServiceImpl implements TbUserService {
@Resource
TbUserDao tbUserDao;
@Override
@Transactional //事務管理 當出現異常時,事務回滾,數據不會插入到數據庫中
public TbUser saveUser(TbUser tbUser) {
tbUserDao.saveUser(tbUser);
//int a = 3/0;
return tbUser;
}
@Override
public void deleteUserById(Integer id) {
tbUserDao.deleteUserById(id);
}
@Override
public void updateUserById(TbUser tbUser) {
tbUserDao.updateUserById(tbUser);
}
@Override
public TbUser findUserById(Integer id) {
return tbUserDao.findUserById(id);
}
@Override
public List<TbUser> findAll() {
return tbUserDao.findAll();
}
}
7. 編寫單元測試@SpringBootTest
@Slf4j
class SpringbootjdbcApplicationTests {
private Logger LOGGER = LoggerFactory.getLogger(this.getClass());
@Resource
TbUserService tbUserService;
@Resource
DataSource dataSource;
//獲取數據源
@Test
public void getDataSource() throws SQLException {
log.info("獲取到的數據源是:{}",dataSource);
Connection con = dataSource.getConnection();
log.info("獲取到的連接信息是:{}",con);
}
@Test
void contextLoads() {
}
@Test
void saveUserTest(){
TbUser tbUser = new TbUser();
tbUser.setUsername("qtd");
tbUser.setPassword("23456789");
tbUser.setRole("Oracle");
TbUser user = tbUserService.saveUser(tbUser);
log.info("操作成功,獲取到的信息是:{}",user);
}
@Test
void deleteUserByIdTest(){
tbUserService.deleteUserById(4);
}
@Test
void updateUserById(){
TbUser tbUser = new TbUser();
tbUser.setId(5);
tbUser.setUsername("qtdu");
tbUser.setPassword("23456789u");
tbUser.setRole("Oracleu");
tbUserService.updateUserById(tbUser);
}
@Test
void findUserById(){
TbUser user = tbUserService.findUserById(7);
log.info("操作成功,獲取到的信息是:{}",user);
}
}
上一篇: 【人工智能】機器學習訓練方法—梯度下降