JdbcTemplate的基本用法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: JdbcTemplate的基本用法

JdbcTemplate的基本用法

JdbcTemplate原始代码

publicclassJdbcTemplateDemo1 {

   publicstaticvoidmain(String[] args) {

       //准备数据源:spring的内置数据源

       DriverManagerDataSourceds=newDriverManagerDataSource();

       //com.mysql.cj.jdbc.Driver

       ds.setDriverClassName("com.mysql.cj.jdbc.Driver");

       ds.setUrl("jdbc:mysql://localhost:3306/eesy?serverTimezone=GMT%2B8");

       ds.setUsername("ggbond");

       ds.setPassword("password");

       //1.创建JdbcTemplate对象

       JdbcTemplatejt=newJdbcTemplate();

       //2.给jt设置数据源

       jt.setDataSource(ds);

       //3.执行操作

       jt.execute("insert into account(name,money) values ('ddd',1000)");

   }

}

使用AOP对代码解耦

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="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-->

   <beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate">

       <propertyname="dataSource"ref="dataSource"></property>

   </bean>

<!--    配置数据源-->

   <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">

       <propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"></property>

       <propertyname="url"value="jdbc:mysql://localhost:3306/eesy?serverTimezone=GMT%2B8"></property>

       <propertyname="username"value="ggbond"></property>

       <propertyname="password"value="password"></property>

   </bean>

</beans>

publicclassJdbcTemplateDemo2 {

   publicstaticvoidmain(String[] args) {

       //1.获取容器

       ApplicationContextac=newClassPathXmlApplicationContext("bean.xml");

       //2.获取对象

       JdbcTemplatejt= (JdbcTemplate)ac.getBean("jdbcTemplate");

       //3.执行操作

       jt.execute("insert into account(name,money) values ('eee',1000)");

   }

}

JdbcTemplate的CRUD操作

publicclassJdbcTemplateDemo3 {

   publicstaticvoidmain(String[] args) {

       //1.获取容器

       ApplicationContextac=newClassPathXmlApplicationContext("bean.xml");

       //2.获取对象

       JdbcTemplatejt= (JdbcTemplate)ac.getBean("jdbcTemplate");

       //增加(保存)

       jt.update("insert into account(name,money) values (?,?)", "fff",1000);

       //删除

       jt.update("delete from account where id=?", 10);

       //更改(更新)

       jt.update("update account set name=?,money=? where id=?", "test",4567,11);

       //查询所有

       List<Account>list=jt.query("select * from account where money=?", newBeanPropertyRowMapper<>(Account.class), 1000);

       for (Accountaccount: list) {

           System.out.println(account);

       }

       //查询一个

       List<Account>accounts=jt.query("select * from account where id=?", newBeanPropertyRowMapper<>(Account.class), 11);

       System.out.println(accounts.isEmpty()?"没有内容":accounts.get(0));

       //查询返回一行一列(使用聚合函数,但不使用group by子句)

       Longcount=jt.queryForObject("select count(*) from account where money=?", Long.class, 1000);

       System.out.println(count);

   }

}

JdbcTemplate在DAO中的使用

/**

* 账户的持久层实现类

*/

publicclassAccountDaoImplimplementsIAccountDao {

   //通过set方法注入JdbcTemplate对象

   privateJdbcTemplatejt;

   publicvoidsetJt(JdbcTemplatejt) {

       this.jt=jt;

   }

   /**

    * 根据id查找,可能为0或1

    * @param accountId

    * @return

    */

   @Override

   publicAccountfindAccountById(IntegeraccountId) {

       List<Account>list=jt.query("select * from account where id=?", newBeanPropertyRowMapper<>(Account.class), accountId);

       returnlist.isEmpty()?null:list.get(0);

   }

   /**

    * 根据name查找,可能为0或1或多个

    * @param accountName

    * @return

    */

   @Override

   publicAccountfindAccountByName(IntegeraccountName) {

       List<Account>list=jt.query("select * from account where name=?", newBeanPropertyRowMapper<>(Account.class), accountName);

       if (list.isEmpty()){//0

           returnnull;

       }elseif (list.size()>1){//多个

           thrownewRuntimeException("结果集不唯一");

       }

       returnlist.get(0);//1

   }

   /**

    * 更新账户

    * @param account

    */

   @Override

   publicvoidupdateAccount(Accountaccount) {

       jt.update("update account set name=?,money=? where id=?", account.getName(),account.getMoney(),account.getId());

   }

}

dao中通过set方法注入JdbcTemplate对象的重复代码,spring封装在JdbcDaoSupport类中,只要继承即可


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
ModelScope-FunASR的返回格式是可以自定义的
ModelScope-FunASR的返回格式是可以自定义的【1月更文挑战第11天】【1月更文挑战第54篇】
162 1
|
缓存 NoSQL 关系型数据库
|
编解码 安全 测试技术
对支付宝进行测试用例分析
对支付宝进行测试用例分析
532 0
uni-app提交表单成功之后跳转首页
uni-app提交表单成功之后跳转首页
116 1
|
设计模式 Java API
基于Guava API实现异步通知和事件回调
当小伙伴们在社区提问时,如果有设置指定用户回答,则对应的用户就会收到邮件通知,这就是观察者模式的一种应用场景。有些小伙伴可能会想到MQ、异步队列等,其实JDK本身就提供这样的API。我们用代码来还原这样一个应用场景,首先创建GPer类。
211 0
|
传感器 机器学习/深度学习 监控
【无人机控制】基于PRISM模型实现无人机目标搜索及避碰附matlab代码
【无人机控制】基于PRISM模型实现无人机目标搜索及避碰附matlab代码
|
网络协议 物联网 数据安全/隐私保护
NB-IoT 之 M5310-A 模块介绍及应用场景分析 | 学习笔记
快速学习 NB-IoT 之 M5310-A 模块介绍及应用场景分析
NB-IoT 之 M5310-A 模块介绍及应用场景分析 | 学习笔记
|
人机交互 vr&ar 计算机视觉
《科技与人:元宇宙与未来产业跨界对话》电子版地址
当计算机视觉、人机交互、AR/VR、数字孪生等计算技术一步一步发展,为现实物理世界在数字空间中复制一个“新视界”,各行各业如何在这一次数字化全新浪潮中前瞻探索、布局未来,通过全息数字交互技术赋予行业新的生命力?本次科技与人系列论坛邀请来自学术界、技术界、金融界的大咖,展开元宇宙科技与未来行业的跨界对话。对时下热门的元宇宙冷思考,探讨技术的普惠之路,共同探索人类数字世界的全新空间。
86 0
《科技与人:元宇宙与未来产业跨界对话》电子版地址
|
Java
接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
有一个面试四连击的题目:接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
216 0
接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
|
前端开发 JavaScript 数据可视化
【译】JavaScript中的Promises
你有没有在JavaScript中遇到过promises并想知道它们是什么?它们为什么会被称为promises呢?它们是否和你以任何方式对另一个人做出的承诺有关呢?
【译】JavaScript中的Promises