Spring-JdbcTemplate

1.什么是JdbcTemplate

(1)spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作

2.准备工作

(1) 引入相关jar

druid.jar ,mysql.jar , spring-jdbc.jar,spring-tx.jar,spring-orm.jar

(2)在spring配置 连接池

<!--数据源-->
  <bean id="ds" class="com.alibaba.druid.pool.DruidDataSource">
     <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
     <property name="username" value="root"/>
     <property name="password" value="root"/>
     <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
  </bean>

(3)配置JdbcTemplate对象, 注入DataSource

<!--创建JDBCTemplate 对象-->
   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
      <!--配置 数据源-->
      <property name="dataSource" ref="ds"/>
   </bean>

(4)创建service类 创建dao 类,在dao注入jdbcTemplate 对象

在配置文件中 添加: <context:component-scan base-package="com.ly.aop"/>

在service中注入dao, 在dao中注入jdbcTemplate对象

@Repository
public class BookDaoImpl implements BookDao {

    //注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
}
@Service
public class BookService {
    //注入dao
    @Autowired
    private BookDao bookDao;
}

3.jdbcTemplate 操作数据库(添加)  

1.对应数据库表,创建实体类

2.编写service 和dao

(1) 在dao中实现添加方法

(2)在JDBCTemplate对象里面调用update方法实现添加操作

@Repository
public class BookDaoImpl implements BookDao {

    //注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void save(Book book) {
        String sql = "insert into book(name,status) values(?,?)";
        Object[] args = {book.getName(),book.getStatus()};
        int row = jdbcTemplate.update(sql,args);
        System.out.println("受影响的行数"+row);
    }
}
public void saveBook(Book book){
        bookDao.save(book);
    }

3.编写测试类

@Test
    public void testJdbc(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        BookService bs = ac.getBean("bookService",BookService.class);
        Book book = new Book("java编程思想","1");
        bs.saveBook(book);
    }

jdbcTemplate 操作数据库(修改和删除) 

@Service
public class BookService {
    //注入dao
    @Autowired
    private BookDao bookDao;


    public void saveBook(Book book){
        bookDao.save(book);
    }

    public void updateBook(Book book){
        bookDao.update(book);
    }

    public void delById(int id){
        bookDao.delete(id);
    }
}
@Repository
public class BookDaoImpl implements BookDao {

    //注入JdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void save(Book book) {
        String sql = "insert into book(name,status) values(?,?)";
        Object[] args = {book.getName(),book.getStatus()};
        int row = jdbcTemplate.update(sql,args);
        System.out.println("添加-受影响的行数"+row);
    }

    @Override
    public void update(Book book) {
        String sql = "update book set name=?,status=? where id=? ";
        Object[] args = {book.getName(),book.getStatus(),book.getId()};
        int row = jdbcTemplate.update(sql,args);
        System.out.println("修改-受影响的行数"+row);
    }

    @Override
    public void delete(int id) {
        String sql = "delete from book where id="+id;
        int row = jdbcTemplate.update(sql);
        System.out.println("删除-受影响的行数"+row);
    }
}

测试类:

@Test
    public void testJdbc(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        BookService bs = ac.getBean("bookService",BookService.class);
       // Book book = new Book("html","1");
       // bs.saveBook(book);//添加

       // bs.delById(1);// 删除

        Book b = new Book(2,"1111","3");
        bs.updateBook(b);//修改
    }

jdbcTemplate 操作数据库(查询返回某个值)

  1. 查询表里 一共有多少条数据, 返回是 某个值

  2. 使用JdbcTemplate实现,返回某个值

 @Override
    public int selectCount() {
        String sql = " select count(*) from book ";
        Integer count = jdbcTemplate.queryForObject(sql,Integer.class);
        return count;
    }

 

测试类
      int count =  bs.findCount();
        System.out.println(count);

jdbcTemplate 操作数据库(查询返回对象)

1.按照 主键id 查询所有信息

2.使用JdbcTemplate的queryForObject方法实现,返回对象

RowMapper是接口,返回不同类型数据

封装

 //dao
  @Override
     public Book findOne(int id){
         String sql = " select * from book where id=?";
         Book book = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),id);
         return book;
     }
 //service
   public Book findOne(int id){
         return bookDao.findOne(id);
     }

jdbcTemplate 操作数据库(查询返回集合) 

  1. 查询 全部图书信息

  2. 调用jdbcTemplate方法query实现查询 返回集合

 @Override
    public List<Book> findAllBook() {
        String sql = " select * from book ";
        List<Book> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class));
        return list;
    }

 

 public List<Book> findAll(){
        return bookDao.findAllBook();
    }

jdbcTemplate 操作数据库(批量添加)

  1. 批量操作: 操作表里多条记录

    2.JdbcTemplate的batchUpdate 方法实习批量添加

//批量添加
    @Override
    public void batchAdd(List<Object[]> list) {
        String sql = "insert into book(name,status) values(?,?)";
        int[] count = jdbcTemplate.batchUpdate(sql,list);
        System.out.println(Arrays.toString(count));
    }
//测试
 // 批量添加
        List<Object[]> list = new ArrayList<>();
        Object[] obj = {"lisi","1"};
        list.add(obj);
        Object[] obj1 = {"2222","2"};
        list.add(obj1);
        Object[] obj2 = {"44444","4"};
        list.add(obj2);
        bs.batchAdd(list);

jdbcTemplate 操作数据库(批量修改与删除) 

//批量修改
    @Override
    public void batchUpdate(List<Object[]> list) {
        String sql = "update book set name=?,status=? where id=? ";
        int[] count = jdbcTemplate.batchUpdate(sql,list);
        System.out.println(Arrays.toString(count));
    }
测试:      
       //批量修改
        List<Object[]> list = new ArrayList<>();
        Object[] obj = {"22","2",2};
        list.add(obj);
        Object[] obj1 = {"333","3",3};
        list.add(obj1);
        Object[] obj2 = {"4444","4",4};
        list.add(obj2);
        bs.batchUpdate(list);
@Override
    public void batchDel(List<Object[]> list) {
        String sql = "delete from book where id=? ";
        int[] count = jdbcTemplate.batchUpdate(sql,list);
        System.out.println(Arrays.toString(count));
    }
//测试
 //批量删除
        List<Object[]> list = new ArrayList<>();
        Object[] obj = {2};
        list.add(obj);
        Object[] obj1 = {3};
        list.add(obj1);
        Object[] obj2 = {4};
        list.add(obj2);
        bs.batchDel(list);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/285430.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【GitHub】ssh: connect to host github.com port 22: Connection refused

本地使用git上传GitHub仓库时发现的一个报错&#xff0c;以为是本机连不上github了&#xff0c;ping过后发现能够正常访问&#xff0c;于是上网找到了一个很完美的解决方案 原因&#xff1a;22端口被占用或被防火墙屏蔽 解决方法&#xff1a;切换GitHub的443端口 1.首先找到…

普中STM32-PZ6806L开发板(HAL库函数实现-PWM呼吸灯)

简介 实现PWM呼吸灯。 主芯片 STM32F103ZET6呼吸灯引脚 : PC7电路原理图 LED8 电路图 LED8 与 主芯片连接图 其他知识 公式 PWM周期公式: Tpwm ( (ARR 1) * (PSC 1) ) / Tclk Tclk为定时器的输入时钟频率 Tout则为定时器溢出时间 ARR为计数周期 PSC为预分频器的值…

undefined reference to `pthread_create‘的另外一种解法

背景 编译带有thread的程序人&#xff0c;如果忘记-lpthread&#xff0c;那么就会报错 解决办法一&#xff1a;添加-lpthread 很简单添加-lpthread就行了 解决办法二&#xff1a;升级glibc 在高版本的glibc上&#xff0c;可能无需增加-lpthread Why glibc 2.34 removed li…

数字图像处理(3)——频域图像增强

&#x1f525;博客主页&#xff1a;是dream &#x1f680;系列专栏&#xff1a;深度学习环境搭建、环境配置问题解决、自然语言处理、语音信号处理、项目开发 &#x1f498;每日语录&#xff1a;贤才&#xff0c;难进易出&#xff1b;庸才&#xff0c;易进易初出&#xff1b;…

区块链复习

文章目录 考试重点哈希碰撞哈希函数的应用哈希算法对称加密密钥解决方法 椭圆曲线加密算法数字签名国密算法第一章第二章比特币比特币公钥 区块比特币的信息查询去中心化与分布式BIP治理结构 第三章 比特币区块结构头哈希值的作用&#xff1a;防篡改自然分叉&#xff1a; 交易数…

MySQL数据库学习一

1 什么是数据库的事务&#xff1f; 1.1 事务的典型场景 在项目里面&#xff0c;什么地方会开启事务&#xff0c;或者配置了事务&#xff1f;无论是在方法上加注解&#xff0c;还 是配置切面。 <tx:advice id"txAdvice" transaction-manager"transactionMa…

CodeWave 3.4版本新特性AI智能助手功能的革新与实践

目录 1 前言2 CodeWave 3.4版本&#xff1a;AI智能助手功能的新特性2.1 逻辑生成2.2 逻辑解读 3 CodeWave提供了全方位的逻辑组件4 AI智能助手功能的实践案例4.1 生成逻辑的实践4.2 解读逻辑的实践4.3 CodeWave的解读描述和逻辑的对比 5 结语 1 前言 在数字化时代&#xff0c;…

【ModelScope】从入门到进阶

计算机视觉任务 任务&#xff08;Task&#xff09;中文任务&#xff08;Task&#xff09;英文任务说明单标签图像分类image-classification对图像中的不同特征根据类别进行区分通用图像分割image-segmentation识别图像主体与图像背景进行分离文字检测ocr-detection将图像中的文…

Ansible自动化运维(一)简介及部署、清单

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

python设计模式:模板方法模式

更多Python学习内容&#xff1a;ipengtao.com 软件设计和编程中&#xff0c;设计模式是一种有助于解决常见问题的强大工具。其中之一是"模板方法模式"&#xff0c;它是一种行为型设计模式&#xff0c;允许你定义一个算法的骨架&#xff0c;但将一些步骤的具体实现延迟…

微功遥测终端机RTU:守护城市生命线的智能卫士

在城市的繁华背后&#xff0c;隐藏着一套高效运转的“生命线”——排水系统。而在这条生命线上&#xff0c;微功遥测终端机RTU(MGTR-W4131U)发挥着不可或缺的作用&#xff0c;为城市的正常运转提供了坚实保障。 微功遥测终端机RTU(MGTR-W4131U)&#xff0c;顾名思义&#xff0…

Redis双写一致性

文章目录 Redis双写一致性1. 延迟双删&#xff08;有脏数据风险&#xff09;2. 异步通知&#xff08;保证数据最终一致性&#xff09;3. 分布式锁&#xff08;数据的强一致&#xff0c;性能低&#xff09; Redis双写一致性 当修改了数据库的数据也要同时更新缓存的数据&#xf…

云计算:OpenStack 分布式架构添加NFS存储(单控制节点与多计算节点)

目录 一、实验 1.环境 2.安装并配置NFS节点 3.安装并配置存储节点storage02 4.使用NFS存储 一、实验 1.环境 (1) 主机 表1 主机 主机架构IP备注controller控制节点192.168.204.210已部署compute01计算节点1192.168.204.211 已部署compute02计算节点2192.168.204.212已部…

【AIGC-图片生成视频系列-5】I2V-Adapter:一种用于视频扩散模型的通用图像生成视频适配器

目录 一. 项目与贡献概述 二. 方法详解 a. 整体框架图 b. 帧相似性先验 三. 一般化图像生成动画结果 四. 基于个性化 T2I 模型的动画结果 五. 结合ControlNet动画结果 六. 项目论文和代码 七. 个人思考与总结 在快速发展的数字内容生成领域&#xff0c;焦点已从文本到…

[DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]

文章目录 概要I Introduction小结 概要 提出的架构&#xff0c;双注意力U-Net与特征融合&#xff08;DAU-FI Net&#xff09;&#xff0c;解决了语义分割中的挑战&#xff0c;特别是在多类不平衡数据集上&#xff0c;这些数据集具有有限的样本。DAU-FI Net 整合了多尺度空间-通…

数据流的中位数

题目链接 数据流的中位数 题目描述 注意点 在调用 findMedian 之前&#xff0c;数据结构中至少有一个元素如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值 解答思路 使用两个优先队列存储数据流&#xff0c;其中一个优先队列队首为最…

webrtc中的接口代理框架

文章目录 接口代理框架Proxy体系类结构导出接口 webrtc的实际运用PeerConnectionFactoyPeerConnection使用 接口代理框架 webrtc体系庞大&#xff0c;模块化极好&#xff0c;大多数模块都可以独立使用。模块提供接口&#xff0c;外部代码通过接口来使用模块功能。 在webrtc中通…

面向对象基础-析构函数-this-static-const

析构函数 析构函数是与构造函数对立的函数。 构造函数 析构函数 创建对象时手动调用 当对象销毁时&#xff0c;自动调用 函数名称与类名相同 函数名称是~类名 构造函数可以重载 析构函数没有参数&#xff0c;不能重载 用于创建对象时并初始化 用于销毁对象时释放资源 …

webRTC实时通信demo

参考文档&#xff1a; https://www.jianshu.com/p/f439ce5cc0be https://www.w3cschool.cn/socket demo流程示意图&#xff08;用户A向用户B推送视频&#xff09;&#xff1a; #mermaid-svg-0KZaDQ5DBl28zjmZ {font-family:"trebuchet ms",verdana,arial,sans-seri…

影视后期:PR 调色处理,灰片还原,校色偏色素材

灰片还原 确定拍摄灰片的相机型号品牌官网下载专用log文件LUT-浏览-导入slog3分析亮部波形-增加画面对比分析矢量示波器-提高整体饱和 校正LUT可以将前期拍摄的log色彩模式的视频转换为成709色彩模式&#xff0c;即将灰度视频转换为正常效果(灰片还原) 各个相机有对应的校正L…