栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring封装Jdbc技术—— JdbcTemplate

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring封装Jdbc技术—— JdbcTemplate

JdbcTemplate
  • 什么是JdbcTemplate?

    Spring框架对Jdbc技术的封装,使用JdbcTemplate可以更方便的实现对数据库的操作

  • 前期准备

    要想使用JdbcTemplate,我们除了jdbc的jar包和Druid的jar包之外,还需导入Spring相关jar包

    在整篇文章的中,我们举例拿Book类来举例,同时使用之前所学的IOC操作来创建对象和注入属性

    第一步:使用IOC操作来创建数据库连接池对象和JdbcTemplate对象,并将两者匹配

    
    
        
        
    
        
        
            
            
            
            
        
    
        
        
            
            
        
    
    

    第二步,创建BookService对象和BookDao对象并对他们设置注解

    @Service
    public class BookService {
        @Autowired
        private BookDaoImpl bookDao;
    }
    
    @Component
    public class BookDaoImpl implements BookDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    }
    
  • 使用JdbcTemplate对数据进行增删改操作

    首先我们先创建Book实体类

    public class Book {
        private Integer id;
        private String bookname;
        private String author;
        //构造器、getset方法,toString方法省略
    }
    

    调用jdbcTemplate.update()

    第一个参数为sql语句,第二个参数为需要填充占位符的值

    @Service
    public class BookService {
        @Autowired
        private BookDaoImpl bookDao;
    
        public void add(Book book){
            bookDao.add(book);
        }
    
        public void update(Book book){ bookDao.update(book); }
    
        public void delete(int id){ bookDao.delete(id); }
    }
    
    @Component
    public class BookDaoImpl implements BookDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public void add(Book book) {
            String sql = "insert into jdbc_book (`id`,`bookname`,`author`) values(?,?,?)";
            int update = jdbcTemplate.update(sql, book.getId(), book.getBookname(), book.getAuthor());
            System.out.println("受影响的行数为:" + update);
        }
    
        @Override
        public void update(Book book) {
            String sql = "update jdbc_book set `bookname` = ? ,`author` = ? where `id` = ?";
            int update = jdbcTemplate.update(sql, book.getBookname(), book.getAuthor(), book.getId());
            System.out.println("受影响的行数为:" + update);
        }
    
        @Override
        public void delete(int id) {
            String sql = "delete from jdbc_book where id = ?";
            int update = jdbcTemplate.update(sql, 1);
            System.out.println("受影响的行数为:" + update);
        }
    }
    
  • 使用JdbcTemplate查询一条数据

    使用jdbcTemplate.queryForObject()

    第一个参数为sql语句

    第二个参数是一个接口,针对返回的不同数据类型,使用他的实现类对数据进行封装

    第三个参数为填充占位符的数值

    @Service
    public class BookService {
        @Autowired
        private BookDaoImpl bookDao;
    
        public Book queryOne(int id){ return bookDao.queryOne(id); }
    }
    
    @Component
    public class BookDaoImpl implements BookDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public Book queryOne(int id) {
            String sql = "select `id`,`bookname`,`author` from jdbc_book where id = ?";
            Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Book.class), id);
            return book;
        }
    }
    
  • 使用JdbcTemplate查询特殊值(比如count*

    使用jdbcTemplate.queryForObject()

    第一个参数为sql语句,第二个参数为返回值对象类型

    @Service
    public class BookService {
        @Autowired
        private BookDaoImpl bookDao;
    
        public int queryCount(){ return bookDao.queryCount(); }
    }
    
    @Component
    public class BookDaoImpl implements BookDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public int queryCount() {
            String sql = "select count(*) from jdbc_book";
            Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);
            return integer;
        }
    }
    
  • 使用JdbcTemplate查询集合

    参数和查询一个对象相同

    @Service
    public class BookService {
        @Autowired
        private BookDaoImpl bookDao;
    
        public List queryList(){return bookDao.queryList();}
    }
    
    @Component
    public class BookDaoImpl implements BookDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public List queryList() {
            String sql = "select `id`,`bookname`,`author` from jdbc_book";
            List query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Book.class));
            return query;
        }
    }
    
  • 使用JdbcTemplate进行批量增删改

    使用jdbcTemplate.batchUpdate()

    第一个参数为sql语句,第二个参数为参数列表构成的数组

    @Service
    public class BookService {
        @Autowired
        private BookDaoImpl bookDao;
        public void batchAdd(List batchArgs){ bookDao.batchAdd(batchArgs); }
    
        public void batchUpdate(List batchArgs){ bookDao.batchUpdate(batchArgs);}
    
        public void batchDelete(List batchArgs){ bookDao.batchDelete(batchArgs);}
    }
    
    @Component
    public class BookDaoImpl implements BookDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public void batchAdd(List batchArgs) {
            String sql = "insert into jdbc_book (`id`,`bookname`,`author`) values(?,?,?)";
            int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
            System.out.println(Arrays.toString(ints));
        }
    
        @Override
        public void batchUpdate(List batchArgs) {
            String sql = "update jdbc_book set `bookname` = ? ,`author` = ? where `id` = ?";
            int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
            System.out.println(Arrays.toString(ints));
        }
    
        @Override
        public void batchDelete(List batchArgs) {
            String sql = "delete from jdbc_book where id = ?";
            int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
            System.out.println(Arrays.toString(ints));
        }
    }
    	//演示一个测试方法
        @Test
        public void test7(){
            ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
            BookService bookSerivce = context.getBean("bookService", BookService.class);
            List list = new ArrayList<>();
            //需要注意的是,数组里存放的数据,必须与占位符匹配
            Object[] o1 = {3,"第三本书","第三个作者"};
            Object[] o2 = {4,"第四本书","第四个作者"};
            Object[] o3 = {5,"第五本书","第五个作者"};
            list.add(o1);
            list.add(o2);
            list.add(o3);
            bookSerivce.batchAdd(list);
        }
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/281713.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号