SpringBoot基础教程(三) | JdbcTemplate

作者: youzhihua | 来源:发表于2019-10-22 21:34 被阅读0次

    JdbcTemplate介绍

    Spring 对数据库的JDBC操作做了深层次的封装,可以将DataSource注册到JdbcTemplate之中,使我们可以轻易的完成对象关系映射,简化数据库操作,在SpringBoot中我们也可以很轻松的使用它。

    导入Maven依赖

        <dependencies>
            <!--jdbc-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
    
            <!--web-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--mysql驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    

    配置文件编写

    我们需要在SpringBoot的配置文件中写明一些数据库的基本信息,这里我使用的.properties文件。

    # jdbc相关配置
    spring.datasource.username=root
    spring.datasource.password=yzhroot
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=CTT
    

    数据库初始化操作

    既然是持久层的操作,肯定要对数据库的库表结构进行初始化,这里我创建的是一个book表,SQL语句如下:

    CREATE DATABASE test DEFAULT character set = 'utf8';
    
    use test;
    
    create table book(
        `id` int(10) PRIMARY KEY auto_increment,
        `book_name` VARCHAR(100) not null DEFAULT '',
        `book_author` VARCHAR(100) not null DEFAULT ''
    )DEFAULT CHARSET= utf8 ;
    
    insert into book(book_name,book_author) values('Java编程规范','James Gosling');
    insert into book(book_name,book_author) values('Java核心技术:卷I基础知识','James Gosling');
    insert into book(book_name,book_author) values('Java数据结构和算法','James Gosling');
    insert into book(book_name,book_author) values('Java与模式','James Gosling');
    

    编码实现

    这里我是针对book表进行了一系列增删改查操作。

    • Book实体类
    package traning.springboot.jdbctemplate.pojo;
    
    /**
     * 书籍实体类
     */
    public class Book {
    
        private Integer id;
    
        private String bookName;
    
        private String bookAuthor;
    
        public Book() {
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getBookName() {
            return bookName;
        }
    
        public void setBookName(String bookName) {
            this.bookName = bookName;
        }
    
        public String getBookAuthor() {
            return bookAuthor;
        }
    
        public void setBookAuthor(String bookAuthor) {
            this.bookAuthor = bookAuthor;
        }
    }
    
    • BookDao接口
    package traning.springboot.jdbctemplate.dao;
    
    import traning.springboot.jdbctemplate.pojo.Book;
    
    import java.util.List;
    
    public interface BookDao {
    
        //查询所有书籍
        List<Book> queryAllBooks();
    
        //根据ID查询书籍
        Book queryBookByBookId(Integer id);
    
        //根据ID更新书籍
        boolean updateBookInfoByBookId(Book book,Integer id);
    
        //根据ID删除书籍
        boolean deleteBookByBookId(Integer id);
    
        //增加一本书籍
        boolean insertBook(Book book);
    }
    
    • BookDao的实现类
    package traning.springboot.jdbctemplate.dao;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    import traning.springboot.jdbctemplate.pojo.Book;
    
    import java.util.List;
    
    @Repository
    public class BookDaoImp1 implements BookDao{
    
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        @Override
        public List<Book> queryAllBooks() {
            String sql = "select * from book";
            return jdbcTemplate.query(sql,new Object[]{},new BeanPropertyRowMapper<>(Book.class));
        }
    
        @Override
        public Book queryBookByBookId(Integer id) {
            String sql = "select * from book where id = ?";
            return jdbcTemplate.queryForObject(sql,new Object[]{id},new BeanPropertyRowMapper<>(Book.class));
        }
    
        @Override
        public boolean updateBookInfoByBookId(Book book, Integer id) {
            String sql = "update book set book_name = ? and book_author = ? where id = ?";
            return jdbcTemplate.update(sql,book.getBookName(),book.getBookAuthor())>0;
        }
    
        @Override
        public boolean deleteBookByBookId(Integer id) {
            String sql = "delete from book where id = ?";
            return jdbcTemplate.update(sql,id)>0;
        }
    
        @Override
        public boolean insertBook(Book book) {
            String sql = "insert into book(book_name,book_author) values(?,?)";
            return jdbcTemplate.update(sql,book.getBookName(),book.getBookAuthor())>0;
        }
    }
    
    • BookService实现
    package traning.springboot.jdbctemplate.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.stereotype.Service;
    import traning.springboot.jdbctemplate.dao.BookDao;
    import traning.springboot.jdbctemplate.pojo.Book;
    
    import java.util.List;
    
    @Service
    public class BookService {
    
        @Autowired
        private BookDao bookDao;
    
        public List<Book> queryAllBooks() {
            return bookDao.queryAllBooks();
        }
    
        public Book queryBookByBookId(Integer id) {
            return bookDao.queryBookByBookId(id);
        }
    
        public boolean updateBookInfoByBookId(Book book, Integer id) {
            return bookDao.updateBookInfoByBookId(book,id);
        }
    
        public boolean deleteBookByBookId(Integer id) {
            return bookDao.deleteBookByBookId(id);
        }
    
        public boolean insertBook(Book book) {
            return bookDao.insertBook(book);
        }
    }
    
    • BookController实现
    package traning.springboot.jdbctemplate.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import traning.springboot.jdbctemplate.pojo.Book;
    import traning.springboot.jdbctemplate.service.BookService;
    
    import java.util.List;
    
    @RestController
    public class BookController {
    
        @Autowired
        private BookService bookService;
    
        @RequestMapping("/queryAllBooks")
        public List<Book> queryAllBooks() {
            return bookService.queryAllBooks();
        }
    
        @RequestMapping("/queryBookByBookId")
        public Book queryBookByBookId(Integer id) {
            return bookService.queryBookByBookId(id);
        }
    
        @RequestMapping("/updateBookInfoByBookId")
        public boolean updateBookInfoByBookId(Book book, Integer id) {
            return bookService.updateBookInfoByBookId(book,id);
        }
    
        @RequestMapping("/deleteBookByBookId")
        public boolean deleteBookByBookId(Integer id) {
            return bookService.deleteBookByBookId(id);
        }
    
        @RequestMapping("/insertBook")
        public boolean insertBook(Book book) {
            return bookService.insertBook(book);
        }
    
    }
    

    启动项目测试

    我们启动项目后,可以使用PostMan对接口进行调试,由于篇幅有限,这里只列出一个接口的测试结果。

    • 查询所有书籍接口测试结果


    完整的工程代码链接:https://github.com/youzhihua/springboot-training

    相关文章

      网友评论

        本文标题:SpringBoot基础教程(三) | JdbcTemplate

        本文链接:https://www.haomeiwen.com/subject/mmpcvctx.html