Spring5——JdbcTemplate笔记

Spring5——JdbcTemplate笔记

概念

template,翻译过来是模板的意思,顾名思义,JdbcTemplate就是一个JDBC的模板,它对JDBC进行了封装,可以很方便地实现对数据库的CRUD(增、删、改、查)的操作。

JdbcTemplate准备工作

引入相关的依赖

  • druid-1.1.9.jar
  • mysql-connector-java-5.1.7-bin.jar
  • spring-tx-5.2.6.RELEASE.jar
  • spring-orm-5.2.6.RELEASE.jar
  • 在这里要注意相关jar包的版本,比如说Java连接MySQL的驱动包的版本应该与目的数据库的版本一致

配置数据库连接池、在JdbcTemplate对象中注入DataSource(数据源)

这里用xml配置文件来配置相关的信息


JdbcTemplate的使用

创建service类、创建dao类

package com.spring.service;
//  service类
@Service
public class UserService {

}
package com.spring.dao;
//  dao类
public interface UserDao {
}
package com.spring.dao;
//  dao的实现类
@Repository
public class UserDaoImpl implements UserDao {
}

在service类中注入dao类的对象属性

package com.spring.service;

@Service
public class UserService {
    //注入dao对象
    @Autowired
    private UserDao userDao;
}

在dao类中注入JdbcTemplate对象

package com.spring.dao;

@Repository
public class UserDaoImpl implements UserDao {
    //注入jdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;

}

增删改查

  • 实体类
package com.spring.entiey;

public class User {
    private Integer id;
    private String name;
    private Integer age;
    private String email;

    public User() {
    }

    public User(Integer id, String name, Integer age, String email) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

  • UserDao
package com.spring.dao;

public interface UserDao {
    //添加的方法
    void add(User user);

    //修改的方法
    void updateUser(User user);

    //删除的方法
    void deleteUser(int id);

    //查询表记录数
    int selectCount();

    //查询返回对象
    User findUserInfo(int id);

    //查询返回集合
    List findAllUser();

    //批量添加数据
    void batchAddUser(List batchArgs);
}

  • UserDaoImpl
package com.spring.dao;

@Repository
public class UserDaoImpl implements UserDao {
    //注入jdbcTemplate对象
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void add(User user) {
        //用jdbcTemplate来操作数据库
        String sql = "insert into userinfo values (?,?,?,?)";
        Object[] args = {user.getId(),user.getName(),user.getAge(),user.getEmail()};
        int update = jdbcTemplate.update(sql,args);
        System.out.println(update);
    }

    @Override
    public void updateUser(User user) {
        String sql = "update userinfo set name=? where id=?";
        Object[] args = {user.getName(),user.getId()};
        int update = jdbcTemplate.update(sql, args);
        System.out.println("修改了:"+update);
    }

    @Override
    public void deleteUser(int id) {
        String sql = "delete from userinfo where id=?";
        int update = jdbcTemplate.update(sql, id);
        System.out.println("删除了:"+update);
    }

    //查询表中的记录数
    @Override
    public int selectCount() {
        String sql = "select count(*) from userinfo";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }

    //查询返回对象
    @Override
    public User findUserInfo(int id) {
        String sql  = "select * from userinfo where id=?";
        User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper(User.class), id);
        return user;
    }

    //查询返回集合
    @Override
    public List findAllUser() {
        String sql = "select * from userinfo";
        List users = jdbcTemplate.query(sql, new BeanPropertyRowMapper(User.class));
        return users;
    }

    //批量添加
    @Override
    public void batchAddUser(List batchArgs) {
        String sql = "insert into userinfo values (?,?,?,?)";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }

}

  • UserService
package com.spring.service;

@Service
public class UserService {
    //注入dao对象
    @Autowired
    private UserDao userDao;

    //添加数据的方法
    public void addUser(User user){
        userDao.add(user);
    }

    //修改数据的方法
    public void updateUser(User user){
        userDao.updateUser(user);
    }

    //删除数据的方法
    public void deleteUser(int id){
        userDao.deleteUser(id);
    }

    //查询表中记录数
    public int findCount(){
        int count = userDao.selectCount();
        return count;
    }

    //查询返回对象
    public User findOne(int id){
        User userInfo = userDao.findUserInfo(id);
        return userInfo;
    }

    //查询返回集合
    public List findAll(){
        return userDao.findAllUser();
    }

    //批量添加数据
    public void batchAdd(List batchArgs){
        userDao.batchAddUser(batchArgs);
    }
}

  • 测试类
package com.spring.testdemo;

@SuppressWarnings({"all"})
public class TestSpringDemo {

    //添加单条数据
    @Test
    public void testAdd(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean.xml");

        UserService userService = context.getBean("userService", UserService.class);

        User user = new User();
        user.setName("111");
        user.setId(10);
        user.setAge(18);
        user.setEmail("shuaiwang2019@126.com");
        System.out.println("user= "+user);

        userService.addUser(user);
    }

    //修改单条数据
    @Test
    public void testUpdate(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean.xml");

        UserService userService = context.getBean("userService", UserService.class);

        User user = new User();
        user.setName("test");
        user.setId(1);
        System.out.println("user= "+user);

        userService.updateUser(user);
    }

    //删除单条数据
    @Test
    public void testDelete(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean.xml");

        UserService userService = context.getBean("userService", UserService.class);

        userService.deleteUser(1);
    }

}

package com.spring.testdemo;

public class TestJdbcTemplateSelect {

    //查询记录数
    @Test
    public void testSelectCount(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean.xml");

        UserService userService = context.getBean("userService", UserService.class);

        int count = userService.findCount();
        System.out.println(count);
    }

    //查询返回对象
    @Test
    public void testSelectUserInfo(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean.xml");

        UserService userService = context.getBean("userService", UserService.class);

        User userInfo = userService.findOne(10);
        System.out.println(userInfo);
    }

    //查询返回集合
    @Test
    public void testSelectAll(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean.xml");

        UserService userService = context.getBean("userService", UserService.class);

        List users = userService.findAll();

        System.out.println(users);
    }

    //批量添加
    @Test
    public void testBatchAdd(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("bean.xml");

        UserService userService = context.getBean("userService", UserService.class);

        //要添加的集合
        List batchArgs = new ArrayList<>();
        Object[] o1 = {11,"java",24,"java@126.com"};
        Object[] o2 = {12,"python",30,"python@126.com"};
        Object[] o3 = {13,"c++",40,"c++@126.com"};
        batchArgs.add(o1);
        batchArgs.add(o2);
        batchArgs.add(o3);
        userService.batchAdd(batchArgs);
    }

}

Original: https://www.cnblogs.com/nanfengashuai/p/16398226.html
Author: Blueshadow
Title: Spring5——JdbcTemplate笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588329/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 编码中的Adapter,不仅是一种设计模式,更是一种架构理念与解决方案

    大家好,又见面了。 不知道下面这玩意大家有没有见过或者使用过?这是一个 插座转换器。我们都知道日常使用的是 220v的交流电,而国外不同国家使用的电流电压是不一样的(比如日本使用的…

    Java 2023年6月7日
    091
  • Java获取个个地区邮编(附源码、抓取的数据)

    因公司需要..个个地区的邮编..一个个去搜显然是很麻烦的很耗时间、体力… (不想偷懒的程序猿,不是好程序猿,23333,开玩笑滴) 技术栈:Java + Jsoup 开…

    Java 2023年5月29日
    080
  • 【Unity Shader学习笔记】Unity基础纹理-渐变纹理

    纹理可以用来存储任何表面属性。 可以通过使用渐变纹理来实现插画风格的渲染效果。 这项技术是由Valve公司提出的。Valve使用它来渲染游戏中具有插画风格的角色。 我们使用半兰伯特…

    Java 2023年6月8日
    0110
  • 【转载】分享下多年积累的对JAVA程序员成长之路的总结

    注:该文是从百度贴吧转载过来,之前看到觉得写得还不错,对Java开发学习者来说很有意义的,可以看看。 我也搞了几年JAVA 了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩…

    Java 2023年6月7日
    084
  • Day4

    package operator;import java.util.Date;//三元运算符public class Demo8 { public static void main…

    Java 2023年6月5日
    080
  • JSON数据和Java对象的相互转换

    JSON数据和Java对象的相互转换 JSON解析器 创建的解析器:Jsonlib,Gson,Fastjson,jackson JSON转为Java对象 使用步骤: 导入jacks…

    Java 2023年6月6日
    068
  • Spring Cloud Alibaba分布式事务组件 seata 详解(小白都能看懂)

    一,什么是事务(本地事务)? 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 简单的说,事务就是并发控制的单位,是用户定义的一个操作序列。 _而一个逻辑…

    Java 2023年6月14日
    094
  • Lombok

    Lombok项目是一个 Java 库,它会自动插入编辑器和构建工具中,Lombok 提供了一组有用的注释,用来消除Java类中的大量样板代码。 常用注解 可以在记录组件或方法或构造…

    Java 2023年6月8日
    061
  • SpringBoot定时任务-开箱即用分布式任务框架xxl-job

    除了前文介绍的ElasticJob,xxl-job在很多中小公司有着应用(虽然其代码和设计等质量并不太高,License不够开放,有着个人主义色彩,但是其具体开箱使用的便捷性和功能…

    Java 2023年6月6日
    082
  • Java基础 变量名的开头可以使用$

    JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code packag…

    Java 2023年5月29日
    069
  • 12.zookeeper的配置

    1.下载zookeeper 2、配置zookeeper ,主要是修改zoo.cfg 文件,在zookeppe 的conf 文件夹下找到zoo_sample.cfg 文件复制一份出来…

    Java 2023年6月13日
    084
  • 各种集合的集合

    数组千千万,集合是真理 我们在代码中常见的数据保存形式一般就是两种—>数组与集合;数组和集合的最大的区别在于查询和扩展,一般情况下,在数据确定的情况下,我们采用数组的形式会更…

    Java 2023年5月29日
    087
  • 【Android】线程池原理及Java简单实现

    线程池简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为: T1 创建线程…

    Java 2023年5月29日
    075
  • Jmix 中 REST API 的两种实现

    你知道吗,在 Jmix 中,REST API 有两种实现方式! 很多应用是采取前后端分离的方式进行开发。这种模式下,对前端的选择相对灵活,可以根据团队的擅长技能选择流行的 Angu…

    Java 2023年6月15日
    075
  • SpringBoot集成文件-如何集成itextpdf导出PDF?itext的变迁?

    除了处理word, excel等文件外,最为常见的就是PDF的导出了。在java技术栈中,PDF创建和操作最为常用的itext了,但是使用itext一定要了解其版本历史和Licen…

    Java 2023年6月6日
    098
  • Spring Boot PDF文件转图片

    spring boot 里的 pdf 转 图片 开发环境: java 8 spring boot 2.x 前后端分离 需求:先从FTP文件服务器里获取PDF文件,再把PDF文件转换…

    Java 2023年6月5日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球