日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

JdbcTemplate基本使用

作者:趙同學& 更新時間: 2023-07-07 編程語言

1.JdbcTemplate基本使用

1.1-JdbcTemplate基本使用-概述(了解)

JdbcTemplate是spring框架中提供的一個對象,是對原始繁瑣的Jdbc API對象的簡單封裝。spring框架為我們提供了很多的操作模板類。例如:操作關系型數據的JdbcTemplate和HibernateTemplate,操作nosql數據庫的RedisTemplate,操作消息隊列的JmsTemplate等等。

1.2-JdbcTemplate基本使用-開發步驟(理解)

①導入spring-jdbc和spring-tx坐標

②創建數據庫表和實體

③創建JdbcTemplate對象

④執行數據庫操作

1.3-JdbcTemplate基本使用-快速入門代碼實現(應用)

導入spring-jdbc和spring-tx坐標

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.4</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.4</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.20</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.3.8</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.3.20</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.3.20</version>
    </dependency>
  </dependencies>

創建數據庫表和實體

create table Account(
    name  varchar(50),
    money double )
public class Account {
    private String name;
    private double money;
    //生成getter setter方法

先測試連接能不能用:

創建JdbcTemplate對象

執行數據庫操作

//測試jdbcTemplate能否使用
@Test
public void test(){
    //創建數據連接池對象
    DruidDataSource druidDataSource=new DruidDataSource();
    druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
    druidDataSource.setUrl("jdbc:mysql://localhost:3306/db1");
    druidDataSource.setUsername("root");
    druidDataSource.setPassword("12345");
    //創建jdbc模板對象
    JdbcTemplate jdbcTemplate=new JdbcTemplate();
    //設置數據源對象
    jdbcTemplate.setDataSource(druidDataSource);
    //執行sql語句
    int row=jdbcTemplate.update("insert into account values(?,?)","lisi",5000);
    System.out.println(row);
}

1.4-JdbcTemplate基本使用-spring產生模板對象分析(理解)

我們可以將JdbcTemplate的創建權交給Spring,將數據源DataSource的創建權也交給Spring,在Spring容器內部將數據源DataSource注入到JdbcTemplate模版對象中,然后通過Spring容器獲得JdbcTemplate對象來執行操作。

1.5-JdbcTemplate基本使用-spring產生模板對象代碼實現(應用)

配置如下:

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/db1"/>
        <property name="username" value="root"/>
        <property name="password" value="12345"/>
    </bean>
  <!--jdbc模板對象-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

測試代碼:

@Test
    //測試Spring產生jdbcTemplate對象
    public void test2() throws PropertyVetoException {
        ApplicationContext app = new ClassPathXmlApplicationContext("application.xml");
        JdbcTemplate jdbcTemplate = app.getBean(JdbcTemplate.class);
        int row = jdbcTemplate.update("insert into account values(?,?)", "lisi", 5000);
        System.out.println(row);
    }

1.6-JdbcTemplate基本使用-spring產生模板對象代碼實現(抽取jdbc.properties)(應用)

將數據庫的連接信息抽取到外部配置文件中,和spring的配置文件分離開,有利于后期維護

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db1
jdbc.username=root
jdbc.password=12345
<!--加載jdbc.properties-->
<context:property-placeholder location="classpath:jdbc.properties"/>
?
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<!--jdbc模板對象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

1.7-JdbcTemplate基本使用-常用操作-更新操作(應用)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JdbcTemplateCRUDTest {
?
@Autowired
private JdbcTemplate jdbcTemplate;
?
//修改更新
@Test
public void testUpdate(){
    jdbcTemplate.update("update account set money=? where name=?",10000,"tom");
}
//刪除
@Test
public void testDelete(){
    jdbcTemplate.update("delete from account where name=?","tom");
}
?
}

1.8-JdbcTemplate基本使用-常用操作-查詢操作(應用)

對應的方法:

方法名 參數說明
queryForObject(String sql, Class type) sql: 表示sql語句 Class:表示返回值類型
queryForObject(String sql,RowMapper rowmapper, Class type) sql:表示sql語句, RowMappr是一個接口,針對返回不同類型數據,使用這個接口進行封裝 。 calss:表示返回值類型
query(sql, rowMapper, class) sql:表示sql語句, RowMappr是一個接口,針對返回不同類型數據,使用這個接口進行封裝 。 calss:表示返回值類型
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JdbcTemplateCRUDTest {
?
@Autowired
private JdbcTemplate jdbcTemplate;
?
//聚合查詢
@Test
public void testQueryCount(){
    Long count = jdbcTemplate.queryForObject("select count(*) from account", Long.class);
    System.out.println(count);
}
//查詢一個
@Test
public void testQueryOne(){
    Account account = jdbcTemplate.queryForObject("select * from account where name=?", new BeanPropertyRowMapper<Account>(Account.class), "tom");
    System.out.println(account);
}
//查詢所有
@Test
public void testQueryAll(){
    List<Account> accountList = jdbcTemplate.query("select * from account", new BeanPropertyRowMapper<Account>(Account.class));
    System.out.println(accountList);
}
?
}

1.9 總結 jdbcTemplate基本使用

①導入spring-jdbc和spring-tx坐標

②創建數據庫表和實體

③創建JdbcTemplate對象

JdbcTemplate jdbcTemplate = new JdbcTemplate();
       jdbcTemplate.setDataSource(dataSource);

④執行數據庫操作

更新操作:

jdbcTemplate.update (sql,params)

查詢操作:

jdbcTemplate.query (sql,Mapper,params)
jdbcTemplate.queryForObject(sql,Mapper,params)

2. jdbc整合案例

  • JdbcTemplate是jar包里的類,不是自己創建的。

  • JdbcTemplate中有個屬性叫:dataSource,源碼中已經為其設置了set方法,所以用的是set方法注入屬性

  • JdbcTemplate的屬性dataSource注入的正是上面數據庫連接池對象,等于說把JdbcTemplate對象和數據庫連接起來了

實現數據添加功能:

案例分析:

1.創建dao接口和實現類

2.使用jdbcTmplate對象添加數據

3.構建service接口和實現類

4.測試運行

實現步驟:

1、創建Dao接口和實現類

public interface AccountDao {
    public void save(Account account);
}
實現類如下
@Repository
public class AccountDaoImpl implements AccountDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public void save(Account account) {
 //2、調用jdbcTemplate.update(實現添加 刪除 修改等)
        //創建添加的sql語句
        String sql="insert into by_account values(?,?,?)";
       Object[] acc= {account.getId(),account.getName(),account.getMoney()};
        //調用jdbcTemplate.update(實現添加 刪除 修改等)
        int update = jdbcTemplate.update(sql, acc);
        //返回值添加了幾行
        System.out.println(update);
    }
}

3、構建service接口和方法

public interface AccountService {
    public void save(Account account);
}
實現類
@Service
public class AccountServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;
    @Override
    public void save(Account account) {
        bookDao.save(account);
    }
}

4、測試運行

@Test
public void testadd(){
    ApplicationContext ac=new ClassPathXmlApplicationContext("application.xml");
    BookService bookService = ac.getBean(BookService.class);
    Account account=new Account();
    account.setId(null);
    account.setName("xiaoli");
    account.setMoney("50000");
    bookService.save(account);
}

2.2 修改name和money的值

實現步驟

1、Dao接口添加update方法

//修改
public void update(Account account);

2、實現類進行數據編寫

@Override
public void update(Account account) {
    //根據id修改name和money的值
    String sql="update by_account set name=? ,money=? where id=?";
    Object[] acc={account.getName(),account.getMoney(),account.getId()};
    int update = jdbcTemplate.update(sql, acc);
    if(update>0){
        System.out.println("修改成功");
    }else{
        System.out.println("修改失敗");
    }
}

3、service接口和實現類編寫

public void update(Account account);
?
@Override
public void update(Account account) {
    bookDao.update(account);
}

4、測試類編寫

@Test
public void testUpdate(){
    ApplicationContext ac=new ClassPathXmlApplicationContext("application.xml");
    BookService bookService = ac.getBean(BookService.class);
    Account account=new Account();
    account.setId("3");
    account.setName("大壯");
    account.setMoney("3000");
    bookService.update(account);
}

查詢系列根據id查詢

實現步驟:

  • 創建Dao接口方法并實現方法

  • 實現查詢邏輯

  • 創建service方法和實現類

  • 測試

第一步:創建Dao接口方法并實現方法

//查詢
public Account findById(String id);

第二步:實現查詢邏輯

@Override
public Account findById(String id) {
    String sql="select * from by_account where id=?";
    RowMapper<Account> rowMapper=new BeanPropertyRowMapper<Account>(Account.class);
    Account account = jdbcTemplate.queryForObject(sql, rowMapper, id);
  //  Account account = jdbcTemplate.query(sql, rowMapper, id).get(0);
    return account;
}

第三步:創建service方法和實現類

//查詢
public Account findById(String id);
實現類:
 @Override
    public Account findById(String id) {
        Account account = bookDao.findById(id);
        return account;
    }

第四步:測試

@Test
public void testfindById(){
    ApplicationContext ac=new ClassPathXmlApplicationContext("application.xml");
    BookService bookService = ac.getBean(BookService.class);
    Account account = bookService.findById("2");
    System.out.println(account);
}

查詢所有的數據:

第一步:創建Dao方法

public List<Account> findAll();

第二步:實現邏輯

@Override
public List<Account> findAll() {
    String sql="select * from by_account";
    RowMapper<Account> rowMapper=new BeanPropertyRowMapper<Account>(Account.class);
    List<Account> list = jdbcTemplate.query(sql, rowMapper);
    return list;
}

第三步:service接口和實現類

public List<Account> findAll();
?
@Override
public List<Account> findAll() {
    List<Account> list = bookDao.findAll();
    return list;
}

第四步:構建測試類

@Test
public void testfindAll(){
    ApplicationContext ac=new ClassPathXmlApplicationContext("application.xml");
    BookService bookService = ac.getBean(BookService.class);
    List<Account> list = bookService.findAll();
    for (Account account : list) {
        System.out.println(account);
    }
}

原文鏈接:https://blog.csdn.net/qq_52963857/article/details/131512660

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新