授课语音

图书网站结合Ajax和ArtTemplate模板实现图书查询

在本节课中,我们将结合图书网站的功能需求,使用 Ajax 和 ArtTemplate 模板引擎实现一个简单的图书查询功能。通过 Ajax 异步请求与 ArtTemplate 模板的结合,可以实现前后端分离的图书查询功能。前端通过 Ajax 向后端发起请求,后端通过数据库查询返回数据,再通过 ArtTemplate 渲染数据并展示给用户。


1. 图书查询功能简介

1.1 功能需求

在图书查询功能中,用户可以根据图书的名称或作者等信息查询相关图书,查询结果可以实时显示,避免页面的刷新,提高用户体验。使用 Ajax 和 ArtTemplate 模板引擎将使得前端与后端的交互更加高效和灵活。

1.2 技术栈

  • 前端技术:使用 Ajax 请求数据,ArtTemplate 渲染数据。
  • 后端技术:使用 SSM 框架(Spring、SpringMVC、MyBatis)来实现图书查询的后端逻辑。

2. 前端实现:Ajax 与 ArtTemplate 配合

2.1 引入 ArtTemplate 模板引擎

在 HTML 文件中引入 ArtTemplate 模板引擎的 JavaScript 文件。

<script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/art-template/4.13.2/template.min.js"></script>

中文注释:

  • art-template 是一种快速、简洁的 JavaScript 模板引擎,支持高效的前端渲染。

2.2 图书查询表单

前端页面提供一个查询表单,用户可以输入查询条件,如图书名称、作者等,点击查询按钮后,页面将异步发送请求。

<div class="search-box">
    <input type="text" id="bookName" placeholder="请输入图书名称">
    <button onclick="searchBooks()">查询</button>
</div>

<div id="bookList"></div>

<script type="text/javascript">
    function searchBooks() {
        // 获取用户输入的图书名称
        var bookName = document.getElementById('bookName').value;
        
        // 使用 Ajax 发送请求到后端
        $.ajax({
            url: '/book/query', // 请求路径
            method: 'GET', // 请求方法
            data: { name: bookName }, // 请求参数
            success: function(response) {
                // 将返回的数据传递给模板渲染
                var html = template('bookTemplate', { books: response.data });
                // 将渲染的内容插入到页面
                document.getElementById('bookList').innerHTML = html;
            },
            error: function() {
                alert('查询失败,请稍后重试');
            }
        });
    }
</script>

中文注释:

  • searchBooks 函数获取用户输入的图书名称,通过 Ajax 发送 GET 请求到后端查询数据。
  • template('bookTemplate', {...}) 使用 ArtTemplate 渲染查询到的数据,response.data 是后端返回的图书数据。
  • 渲染后的 HTML 内容会被插入到 bookList 容器中。

2.3 定义 ArtTemplate 模板

在前端页面中定义 ArtTemplate 的模板,用于渲染查询结果。

<script type="text/html" id="bookTemplate">
    {{each books}}
        <div class="book-item">
            <h3>{{ $value.title }}</h3>
            <p>作者:{{ $value.author }}</p>
            <p>出版社:{{ $value.publisher }}</p>
            <p>价格:{{ $value.price }} 元</p>
        </div>
    {{/each}}
</script>

中文注释:

  • {{each books}} 遍历图书数据,并通过模板引擎渲染每一本图书的详细信息。

3. 后端实现:SpringMVC 与 MyBatis

3.1 配置 SpringMVC 控制器

后端使用 SpringMVC 控制器处理前端发来的请求。这里定义一个 BookController 控制器,负责处理图书查询请求。

@Controller
@RequestMapping("/book")
public class BookController {

    @Autowired
    private BookService bookService; // 注入图书服务

    // 查询图书
    @RequestMapping("/query")
    @ResponseBody
    public Map<String, Object> queryBooks(@RequestParam String name) {
        List<Book> books = bookService.queryBooksByName(name); // 根据图书名称查询
        Map<String, Object> result = new HashMap<>();
        result.put("data", books);
        return result; // 返回查询结果
    }
}

中文注释:

  • @Controller 注解表明该类是一个控制器。
  • @RequestMapping("/query") 映射 /book/query 请求。
  • @ResponseBody 表示返回的数据将直接作为响应体,而不是跳转到视图。
  • queryBooks 方法通过 bookService.queryBooksByName 调用图书服务进行查询,并将结果封装到 Map 中返回。

3.2 定义 BookService 与 BookMapper

3.2.1 BookService

@Service
public class BookService {

    @Autowired
    private BookMapper bookMapper; // 注入图书数据访问层

    public List<Book> queryBooksByName(String name) {
        return bookMapper.findBooksByName(name); // 调用数据访问层查询图书
    }
}

中文注释:

  • BookService 负责业务逻辑处理,调用 BookMapper 查询图书数据。

3.2.2 BookMapper

@Mapper
public interface BookMapper {

    // 根据图书名称查询图书
    List<Book> findBooksByName(@Param("name") String name);
}

中文注释:

  • @Mapper 注解标识该接口是 MyBatis 的 Mapper 接口。
  • findBooksByName 方法通过 @Param("name") 参数绑定查询条件。

3.2.3 Book 实体类

public class Book {

    private String title;     // 图书名称
    private String author;    // 作者
    private String publisher; // 出版社
    private double price;     // 价格

    // 省略 getter 和 setter 方法
}

中文注释:

  • Book 类定义了图书实体,包括图书的名称、作者、出版社和价格等字段。

4. 总结

通过本节课的学习,我们实现了一个简单的图书查询系统,前端使用 Ajax 异步请求数据,后端使用 SpringMVC 处理请求并通过 MyBatis 查询数据库。前端通过 ArtTemplate 模板引擎渲染图书查询结果,实现了一个高效、灵活的前后端分离的查询功能。

关键点回顾:

  • Ajax 请求:前端使用 Ajax 向后端发送查询请求,避免页面刷新。
  • ArtTemplate 模板引擎:前端使用 ArtTemplate 渲染数据,实现动态展示。
  • SpringMVC 控制器:后端通过 SpringMVC 控制器接收请求并处理逻辑。
  • MyBatis 数据访问:使用 MyBatis 进行数据库操作,查询图书信息。

通过这种方式,可以实现图书网站的快速查询与展示,提升用户体验。

去1:1私密咨询

系列课程: