JdbcTemplate--spring 提供的一个操作数据库(表)功能强大的类

JdbcTemplate–spring 提供的一个操作数据库(表)功能强大的类

简介

​ 想要使用spring 框架来做项目,我们可以用 ioc 容器来配置一个jdbcTemplate 对象,使用它来完成对数据库表的各种操作.

官方文档:

JdbcTemplate APIs : /spring-framework-5.3.8/docs/javadoc-api/index.html

JdbcTemplate-基本介绍

  1. 通过 Spring 可以配置数据源,从而完成对数据表的操作。
  2. JdbcTemplate 是Spring 提供的访问数据库的技术,是功能强大彪悍的。可以将JDBC 的常用操作封装为模板方法。

JdbcTemplate的使用

需要引入JdbcTemplate的jar包

​ c3p0-0.9.1.2.jar
​ mysql-connector-java-5.1.7-bin.jar
​ spring-jdbc-5.3.8.jar
​ spring-orm-5.3.8.jar
​ spring-tx-5.3.8.jar

创建配置文件src/jdbc.properties

jdbc.userName=root//名字自己命名
jdbc.password=nlc
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring

创建xml文件,引入jdbc.properties,配置数据源

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 引入外部属性文件-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!-- 配置数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.userName}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
    </bean>
        
        <!-- 配置JdbcTemplate -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
                <!-- 将上面的数据源分配给jdbcTemplate -->
                <property name="dataSource" ref="dataSource"/>
        </bean>
        
</beans>

测试数据源是否连通

我们不要一股气的直接写完,过程中可能会有一些小小的错误,编译器没有报错,为了防止最后运行错误,我们在完成一个小模块的时候要验证一下。

public class JdbcTemplateTest {
    /**
    * 通过spring 提供的JdbcTemplate 获取连接
    * @throws SQLException
    */
    @Test
    public void testDataSourceByJdbcTemplate() throws SQLException {
        ApplicationContext ioc = new  ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
        DataSource dataSource = ioc.getBean(DataSource.class);
        Connection connection = dataSource.getConnection();
        System.out.println("connection= " + connection);
        connection.close();
    }
}

简单使用JdbcTemplate

添加一个对象

@Test
public void addDataByJdbcTemplate() {
    ApplicationContext ioc = new  ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
    //得到JdbcTemplate bean
    JdbcTemplate bean = ioc.getBean(JdbcTemplate.class);
    // 1. 添加方式1
    // String sql = "INSERT INTO monster VALUES(1, '花花', '卖萌')";
    // bean.execute(sql);
    //2. 添加方式2, 绑定参数
    String sql = "INSERT INTO monster VALUES(?, ?, ?)";
    int affected = bean.update(sql, 7, "帆帆", "天赋");
    //输出影响的行数
    System.out.println("add ok affected= " + affected);
}

更新一个对象

@Test
public void updateDataByJdbcTemplate() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
    JdbcTemplate bean = ioc.getBean(JdbcTemplate.class);
    String sql = "UPDATE monster SET skill = ? WHERE id=?";
    int affected = bean.update(sql, "美人计", 3);
    System.out.println("affected= " + affected);
    System.out.println("update data ok~");
}

批量添加二个对象

@Test
public void addBatchDataByJdbcTemplate() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
    JdbcTemplate bean = ioc.getBean(JdbcTemplate.class);
    String sql = "INSERT INTO monster VALUES(?, ?, ?)";
    List<Object[]> param_list = new ArrayList<Object[]>();
    param_list.add(new Object[]{5, "白蛇", "吸收月光"});
    param_list.add(new Object[]{6, "青蛇", "吸收月光"});
    bean.batchUpdate(sql, param_list);
    System.out.println("batch add ok");
}

查询对象 并封装到 实体对象

@Test
public void selectDataByJdbcTemplate() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
    //得到JdbcTemplate bean
    JdbcTemplate bean = ioc.getBean(JdbcTemplate.class);
    String sql = "SELECT id as monsterId,name,skill FROM monster WHERE id =?";
    //下面这个rowmapper 是一个接口,可以将查询的结果,封装到你指定的Monster 对象中.
    RowMapper<Monster> rowMapper =  new BeanPropertyRowMapper<Monster>(Monster.class);
    Monster monster = bean.queryForObject(sql, rowMapper, 1);
    System.out.println("monster= " + monster);
}

查询多条记录

@Test
public void selectMulDataByJdbcTemplate() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
    //得到JdbcTemplate bean
    JdbcTemplate bean = ioc.getBean(JdbcTemplate.class);
    String sql = "SELECT id as monsterId,name,skill FROM monster WHERE id >=?";
    //下面这个rowmapper 是一个接口,可以将查询的结果,封装到你指定的Monster 对象中.
    RowMapper<Monster> rowMapper = new  BeanPropertyRowMapper<Monster>(Monster.class);
    List<Monster> monster_list = bean.query(sql, rowMapper, 2);
    for (Monster monster : monster_list) {
    	System.out.println(monster);
    }
}

查询返回结果只有一行一列的值

@Test
public void selectScalarByJdbcTemplate() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
    //得到JdbcTemplate bean
    JdbcTemplate bean = ioc.getBean(JdbcTemplate.class);
    String sql = "SELECT name FROM monster WHERE id =100";
    String name = bean.queryForObject(sql, String.class);
    System.out.println(name);
}

使用Map 传入具名参数完成操作

比如添加小狐狸:name 就是具名参数形式需要使用NamedParameterJdbcTemplate 类

<!-- 配置NamedParameterJdbcTemplate,支持具名参数-->
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<!-- 这里需要使用构造器关联数据源-->
<constructor-arg name="dataSource" ref="dataSource"/>
</bean>
/**
* 使用Map 传入具名参数完成操作,比如添加
*/
@Test
public void testDataByNamedParameterJdbcTemplate() {
    ApplicationContext ioc = new  ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
    //得到NamedParameterJdbcTemplate bean
    NamedParameterJdbcTemplate nameTemplate =  ioc.getBean(NamedParameterJdbcTemplate.class);
    String sql = "INSERT INTO monster VALUES(:my_id, :name, :skill)";
    Map<String, Object> map_parameter = new HashMap<String, Object>();
    map_parameter.put("my_id", 800);
    map_parameter.put("name", "小狐狸");
    map_parameter.put("skill", "无敌大法");
    nameTemplate.update(sql, map_parameter);
}

使用sqlparametersoruce 来封装具名参数

还是添加一个Monster 狐狸

@Test
public void operDataBySqlparametersoruce() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
    //得到NamedParameterJdbcTemplate bean
    NamedParameterJdbcTemplate namedParameterJdbcTemplate =   ioc.getBean(NamedParameterJdbcTemplate.class);
    String sql = "INSERT INTO monster VALUES(:monsterId, :name, :skill)";
    Monster monster = new Monster(900, "狐狸", "狐媚之术");
    SqlParameterSource source = new BeanPropertySqlParameterSource(monster);
    namedParameterJdbcTemplate.update(sql, source);
    System.out.println("add ok~");
}

Dao 对象中使用JdbcTemplate 完成对数据的操作

@Repository
public class MonsterDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    //添加monster
    public void save(Monster monster) {
        String sql = "INSERT INTO monster VALUES(?, ?, ?)";
        jdbcTemplate.update(sql, monster.getMonsterId(),
        monster.getName(), monster.getSkill());
    }
}

修改D:\idea_java_projects\spring5\src\JdbcTemplate_ioc.xml 增加扫描配置

<!-- 加入自动扫描包-->
<context:component-scan base-package="com.nlc.spring.jdbctemplate.dao"/>

通过dao 使用jdbcTemplate 完成操作

@Test
public void operDataByDao() {
    ApplicationContext ioc =  new ClassPathXmlApplicationContext("JdbcTemplate_ioc.xml");
    MonsterDao bean = ioc.getBean(MonsterDao.class);
    Monster monster = new Monster(10 "大虾精", "夹子功");
    bean.save(monster);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring JdbcTemplateSpring框架提供一个对JDBC进行封装的工具,它可以简化JDBC编程的复杂性,提供了一种更简便的方式来访问数据库JdbcTemplate的原理是将JDBC的访问进行封装,提供了一些常用的操作方法,例如查询、更新、批量操作等。它通过DataSource来获取JDBC的连接,并通过Connection对象进行JDBC的操作,最后释放连接资源。 使用JdbcTemplate进行数据库操作的步骤如下: 1. 配置数据源,配置JdbcTemplate。 2. 在代码中通过JdbcTemplate对象进行数据库操作。 下面是一个简单的例子: 配置数据源和JdbcTemplate: ```xml <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> ``` 在代码中通过JdbcTemplate对象进行数据库操作: ```java @Autowired private JdbcTemplate jdbcTemplate; public void insertUser(User user) { String sql = "INSERT INTO user(name, age) VALUES(?, ?)"; jdbcTemplate.update(sql, user.getName(), user.getAge()); } public List<User> getUsers() { String sql = "SELECT * FROM user"; List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class)); return users; } ``` 在上面的代码中,我们通过@Autowired注解注入了JdbcTemplate对象,并使用它来执行插入和查询操作。 通过JdbcTemplate,我们可以使用占位符来传递参数,也可以使用BeanPropertyRowMapper将查询结果映射为Java对象。 总的来说,Spring JdbcTemplate的原理是封装了JDBC的访问,提供了一种更便捷的方式来操作数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨犀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值