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

上一篇介绍了使用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.entity
mybatis.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 items
		where 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{

	@Autowired
	private ItemsDAO dao;

	@Override
	public List<Items> findList() {
		// TODO Auto-generated method stub
		return dao.findList();
	}

	@Override
	public void save(Items items) {
		// TODO Auto-generated method stub
		dao.save(items);
	}

	@Override
	public List<Items> findItemByName(String name) {
		// TODO Auto-generated method stub
		return 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 {

	@Autowired
	private 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 exception
			e.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,然后一步一步去完善,往复杂去做,边做边学,也是一种挺好的学习方法。

猜你喜欢

转载自blog.csdn.net/weixin_36380516/article/details/78876107