侧边栏壁纸
博主头像
coydone博主等级

记录学习,分享生活的个人站点

  • 累计撰写 306 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Spring中使用JdbcTemplate

coydone
2022-03-16 / 0 评论 / 0 点赞 / 329 阅读 / 4,979 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

JdbcTemplate概述

它是Spring框架中提供的一个对象,是对原始JDBC API对象的简单封装。Spring框架为我们提供了很多的操作模板类。

  • 操作关系型数据的:JdbcTemplate、HibernateTemplate。

  • 操作 nosql 数据库的:RedisTemplate。

  • 操作消息队列的:JmsTemplate。

JdbcTemplate的作用:用于和数据库交互的,实现对表的CRUD操作。

JdbcTemplate操作数据库

1、导入环境依赖

<packaging>jar</packaging>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
	<!--事务-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
</dependencies>

2、快速入门

public static void main(String[] args) {
    //准备数据源:spring的内置数据源
    DriverManagerDataSource ds = new DriverManagerDataSource();
    ds.setDriverClassName("com.mysql.jdbc.Driver");
    ds.setUrl("jdbc:mysql://localhost:3306/eesy_mybatis");
    ds.setUsername("root");
    ds.setPassword("root123");

    //1.创建JdbcTemplate对象
    JdbcTemplate jt = new JdbcTemplate();
    //给jt设置数据源
    jt.setDataSource(ds);
    //2.执行操作
    jt.execute("insert into account(name,money)values('ccc',1000)");
}

在IoC中使用JdbcTemplate

1、配置Spring主配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <!--配置JdbcTemplate-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root123"></property>
    </bean>
</beans>

2、测试配置

public static void main(String[] args) {
    //1.获取容器
    ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
    //2.获取对象
    JdbcTemplate jt = ac.getBean("jdbcTemplate",JdbcTemplate.class);
    //3.执行操作
    //保存
    jt.update("insert into account(name,money)values(?,?)","eee",3333f);
    //更新
    jt.update("update account set name=?,money=? where id=?","test",4567,7);
    //删除
    jt.update("delete from account where id=?",8);
    //查询所有
    List<Account> accounts = jt.query("select * from account where money > ?",new AccountRowMapper(),1000f);
    List<Account> accounts = jt.query("select * from account where money > ?",new BeanPropertyRowMapper<Account>(Account.class),1000f);
    for(Account account : accounts){
        System.out.println(account);
    }
    //查询一个
    List<Account> accounts = jt.query("select * from account where id = ?",new BeanPropertyRowMapper<Account>(Account.class),1);
    System.out.println(accounts.isEmpty()?"没有内容":accounts.get(0));

    //查询返回一行一列(使用聚合函数,但不加group by子句)
    Long count = jt.queryForObject("select count(*) from account where money > ?",Long.class,1000f);
    System.out.println(count);
}

//定义Account的封装策略
class AccountRowMapper implements RowMapper<Account>{
    //把结果集中的数据封装到Account中,然后由spring把每个Account加到集合中
    @Override
    public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
        Account account = new Account();
        account.setId(rs.getInt("id"));
        account.setName(rs.getString("name"));
        account.setMoney(rs.getFloat("money"));
        return account;
    }
}

优化:抽取dao中的重复代码

//方式一:(只能用于基于 XML 的方式)
import org.springframework.jdbc.core.support.JdbcDaoSupport;
//账户的持久层实现类
public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao {}
<!-- 配置账户的持久层-->
<bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl">
	<!--<property name="jdbcTemplate" ref="jdbcTemplate"></property>-->
	<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置JdbcTemplate
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
	<property name="dataSource" ref="dataSource"></property>
</bean>-->

//方式二:(适用于所有配置方式:xml 和注解都可以)
@Repository
public class AccountDaoImpl2 implements AccountDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
}
0

评论区