springboot学习(6)springboot整合Mybatis例子

来源:互联网 发布:如何编译java程序 编辑:程序博客网 时间:2024/05/17 22:38

上一篇介绍了使用spring-data-jpa来实现数据的持久化及展示,现在使用比较流行的Mybatis来整合springboot,这里通过一个完整的例子来展示。实现数据的录入,展示以及按条件查询,同样,在上一篇的基础上进行,springboot基础的配置搭建不做介绍。


首先引入Mybatis的依赖包

<dependency>    <groupId>org.mybatis.spring.boot</groupId>    <artifactId>mybatis-spring-boot-starter</artifactId>    <version>1.0.0</version></dependency>

接着在application.properties中(多用更简洁的yml,大家随意)配置mapper及映射路径等信息

mybatis.typeAliasesPackage=org.amuxia.entitymybatis.mapperLocations=classpath:mapper/*.xml

配置之后定义实体类,基本前几篇的无异,把为spring-data-jpa写的注解信息去掉即可,这里不做展示。

接下来定义接口,代码如下:

public interface ItemsDAO{public List<Items> findList();public void save(Items items);public List<Items> findItemByName(@Param("name") String name);}

Mybatis是基于接口编程的,我们写好接口,对应编写映射文件中的sql语句即可,非常灵活。我们在resources文件夹下新建一个mapper文件,存放XML映射文件,这里做简单的例子学习使用,mapper文件不按功能具体细分,实际应该把映射文件归类的,映射文件代码如下:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="org.amuxia.dao.ItemsDAO"><resultMap id="BaseResultMap" type="org.amuxia.entity.Items"><result column="id" property="id" /><result column="title" property="title" /><result column="name" property="name" /><result column="detail" property="detail" /></resultMap><parameterMap id="Items" type="org.amuxia.entity.Items"/><sql id="Base_Column_List">id, title,name,detail</sql><select id="findList" resultMap="BaseResultMap">select<include refid="Base_Column_List" />from items</select><select id="findItemByName" resultMap="BaseResultMap" parameterType="java.lang.String">select<include refid="Base_Column_List" />from itemswhere name = #{name}</select><insert id="save" parameterType="Items">insert into items (title,name,detail) values (#{title},#{name},#{detail})</insert></mapper>

控制器类调用接口,即可对数据进行操作,但是我们一般很少直接多DAO类进行直接调用,通常包一层Service类,代码如下:

package org.amuxia.service;import java.util.List;import org.amuxia.dao.ItemsDAO;import org.amuxia.entity.Items;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Service public class ItemsService implements ItemsDAO{@Autowiredprivate ItemsDAO dao;@Overridepublic List<Items> findList() {// TODO Auto-generated method stubreturn dao.findList();}@Overridepublic void save(Items items) {// TODO Auto-generated method stubdao.save(items);}@Overridepublic List<Items> findItemByName(String name) {// TODO Auto-generated method stubreturn dao.findItemByName(name);}}

接着定义Controller,实现具体的业务功能:

package org.amuxia.controller;import java.util.List;import org.amuxia.entity.Items;import org.amuxia.service.ItemsService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.ComponentScan;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.servlet.ModelAndView;@ComponentScan@RestController@RequestMapping("/items1")public class ItemsController1 {@Autowiredprivate ItemsService service;/** * @return * 查询全部信息 */@RequestMapping("/list")public ModelAndView  itemsList() {List<Items> list = service.findList();ModelAndView mav = new ModelAndView("items");mav.addObject("list", list);return mav;}@RequestMapping("/findItemByName")public ModelAndView  item(@RequestParam(value = "name", required = true) String name) {List<Items> list = service.findItemByName(name);ModelAndView mav = new ModelAndView("item");mav.addObject("item", list);return mav;}/** * @return * 跳转到新增接界面 */@RequestMapping("/toAdd")public ModelAndView  toAdd() {ModelAndView mav = new ModelAndView("add");return mav;}/** * 新增数据 * @param items * @return */@RequestMapping("/add")public @ResponseBody boolean  addItems(Items items) {try {service.save(items);return true;}catch (Exception e) {// TODO: handle exceptione.printStackTrace();return false;}}}


展示页面我们使用thymeleaf模版,新增页面不动,按之前文章中介绍的即可,列表展示(items)代码如下:

<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>springboot学习</title></head><body><div><form name="findByName" method="post" action="findItemByName"><input type="text" name="name" /><input type="submit" value="查询" /></form></div><div th:each="item : ${list}"><h1 th:text="${{item.title}}"></h1><p><a th:text="${{item.name}}"></a></p><p><a th:text="${{item.detail}}"></a></p></div></body></html>

效果如下:



在输入框中输入阿木侠,搜索他的所有文章信息,效果如下:

我们看到效果已经实现,展示条件搜索的页面代码如下:

<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>springboot学习</title></head><body><div th:each="item : ${item}"><h1 th:text="${{item.title}}"></h1><p><a th:text="${{item.name}}"></a></p><p><a th:text="${{item.detail}}"></a></p></div></body></html>

当然,我们一般搜索展示页面和列表展示都一个页面,这里为了直观点理解,呵呵。

这样,一个简单的springboot整合Mybatis的demo就完成了,配置大大简化了,确实很方便,挺好的,也没有什么不好理解的地方,先搭起一个简单的demo,然后一步一步去完善,往复杂去做,边做边学,也是一种挺好的学习方法。