博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot整合MyBatis
阅读量:4167 次
发布时间:2019-05-26

本文共 10189 字,大约阅读时间需要 33 分钟。

一、数据准备

CREATE TABLE `tb_user` (  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',  `username` varchar(50) NOT NULL COMMENT '用户名',  `age` int(11) NOT NULL COMMENT '年龄',  `ctm` datetime NOT NULL COMMENT '创建时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
INSERT INTO `db_test`.`tb_user` (`username`, `age`, `ctm`) VALUES('张三', '18', NOW()) ;INSERT INTO `db_test`.`tb_user` (`username`, `age`, `ctm`) VALUES('李四', '20', NOW()) ;INSERT INTO `db_test`.`tb_user` (`username`, `age`, `ctm`) VALUES('王五', '19', NOW()) ;

二、引入依赖

org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.0
mysql
mysql-connector-java

另外web依赖也需要,因为我们采用MVC模式。

org.springframework.boot
spring-boot-starter-web

三、数据库配置文件

spring:  datasource:    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://localhost:3306/db_user    username: root    password: root

四、代码

最开始使用mybati比较麻烦,各种配置文件、实体类、dao层映射关联、还有一大推其它配置。当然mybatis也发现了这种弊端,初期开发了generator可以根据表结果自动生产实体类、配置文件和dao层代码,可以减轻一部分开发量;后期也进行了大量的优化可以使用注解了。

于是两种使用方式都介绍一下,一、无配置注解版 二、配置文件版

1.无配置文件注解版

加入配置文件

mybatis:  type-aliases-package: cn.saytime.bean

这里写图片描述

实体类User.class

package cn.saytime.bean;import java.util.Date;/** * @ClassName cn.saytime.bean.User * @Description * @date 2017-07-04 22:47:28 */public class User {	private int id;	private String username;	private int age;	private Date ctm;	public User() {	}	public User(String username, int age) {		this.username = username;		this.age = age;		this.ctm = new Date();	}	// Getter、Setter}

UserMapper.class

package cn.saytime.mapper;import cn.saytime.bean.User;import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import java.util.List;// @Mapper 这里可以使用@Mapper注解,但是每个mapper都加注解比较麻烦,所以统一配置@MapperScan在扫描路径在application类中public interface UserMapper {	@Select("SELECT * FROM tb_user WHERE id = #{id}")	User getUserById(Integer id);	@Select("SELECT * FROM tb_user")	public List
getUserList(); @Insert("insert into tb_user(username, age, ctm) values(#{username}, #{age}, now())") public int add(User user); @Update("UPDATE tb_user SET username = #{user.username} , age = #{user.age} WHERE id = #{id}") public int update(@Param("id") Integer id, @Param("user") User user); @Delete("DELETE from tb_user where id = #{id} ") public int delete(Integer id);}

Mybatis 注解使用 

UserService.class

package cn.saytime.service;import cn.saytime.bean.User;import org.springframework.stereotype.Service;import java.util.List;/** * @ClassName cn.saytime.service.UserService * @Description */public interface UserService {	User getUserById(Integer id);	public List
getUserList(); public int add(User user); public int update(Integer id, User user); public int delete(Integer id);}

UserServiceimpl.class

package cn.saytime.service.impl;import cn.saytime.bean.User;import cn.saytime.mapper.UserMapper;import cn.saytime.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;/** * @ClassName cn.saytime.service.impl.UserServiceImpl * @Description */@Servicepublic class UserServiceImpl implements UserService {	@Autowired	private UserMapper userMapper;	@Override	public User getUserById(Integer id) {		return userMapper.getUserById(id);	}	@Override	public List
getUserList() { return userMapper.getUserList(); } @Override public int add(User user) { return userMapper.add(user); } @Override public int update(Integer id, User user) { return userMapper.update(id, user); } @Override public int delete(Integer id) { return userMapper.delete(id); }}

JsonResult.class 通用json返回类

package cn.saytime.bean;public class JsonResult {	private String status = null;	private Object result = null;	public JsonResult status(String status) {		this.status = status;		return this;	}	// Getter Setter}

UserController.class(Restful风格

package cn.saytime.web;import cn.saytime.bean.JsonResult;import cn.saytime.bean.User;import cn.saytime.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import java.util.List;/** * @ClassName cn.saytime.web.UserController * @Description * @date 2017-07-04 22:46:14 */@RestControllerpublic class UserController {	@Autowired	private UserService userService;	/**	 * 根据ID查询用户	 * @param id	 * @return	 */	@RequestMapping(value = "user/{id}", method = RequestMethod.GET)	public ResponseEntity
getUserById (@PathVariable(value = "id") Integer id){ JsonResult r = new JsonResult(); try { User user = userService.getUserById(id); r.setResult(user); r.setStatus("ok"); } catch (Exception e) { r.setResult(e.getClass().getName() + ":" + e.getMessage()); r.setStatus("error"); e.printStackTrace(); } return ResponseEntity.ok(r); } /** * 查询用户列表 * @return */ @RequestMapping(value = "users", method = RequestMethod.GET) public ResponseEntity
getUserList (){ JsonResult r = new JsonResult(); try { List
users = userService.getUserList(); r.setResult(users); r.setStatus("ok"); } catch (Exception e) { r.setResult(e.getClass().getName() + ":" + e.getMessage()); r.setStatus("error"); e.printStackTrace(); } return ResponseEntity.ok(r); } /** * 添加用户 * @param user * @return */ @RequestMapping(value = "user", method = RequestMethod.POST) public ResponseEntity
add (@RequestBody User user){ JsonResult r = new JsonResult(); try { int orderId = userService.add(user); if (orderId < 0) { r.setResult(orderId); r.setStatus("fail"); } else { r.setResult(orderId); r.setStatus("ok"); } } catch (Exception e) { r.setResult(e.getClass().getName() + ":" + e.getMessage()); r.setStatus("error"); e.printStackTrace(); } return ResponseEntity.ok(r); } /** * 根据id删除用户 * @param id * @return */ @RequestMapping(value = "user/{id}", method = RequestMethod.DELETE) public ResponseEntity
delete (@PathVariable(value = "id") Integer id){ JsonResult r = new JsonResult(); try { int ret = userService.delete(id); if (ret < 0) { r.setResult(ret); r.setStatus("fail"); } else { r.setResult(ret); r.setStatus("ok"); } } catch (Exception e) { r.setResult(e.getClass().getName() + ":" + e.getMessage()); r.setStatus("error"); e.printStackTrace(); } return ResponseEntity.ok(r); } /** * 根据id修改用户信息 * @param user * @return */ @RequestMapping(value = "user/{id}", method = RequestMethod.PUT) public ResponseEntity
update (@PathVariable("id") Integer id, @RequestBody User user){ JsonResult r = new JsonResult(); try { int ret = userService.update(id, user); if (ret < 0) { r.setResult(ret); r.setStatus("fail"); } else { r.setResult(ret); r.setStatus("ok"); } } catch (Exception e) { r.setResult(e.getClass().getName() + ":" + e.getMessage()); r.setStatus("error"); e.printStackTrace(); } return ResponseEntity.ok(r); }}

Application.java

package cn.saytime;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan("cn.saytime.mapper")public class SpringbootMybaitsApplication {
public static void main(String[] args) { SpringApplication.run(SpringbootMybaitsApplication.class, args); }}

使用PostMan通过测试。

2.配置文件版

加入配置文件

mybatis:  mapper-locations: classpath:mybatis/mapper/*.xml  config-location: classpath:mybatis/mybatis-config.xml

项目目录结构:

这里写图片描述

代码部分,相比于上面那种方式,改变的只有配置文件以及下面几个部分。

UserMapper.class

package cn.saytime.mapper;import cn.saytime.bean.User;import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import org.springframework.stereotype.Repository;import java.util.List;/** * @ClassName cn.saytime.mapper.UesrMapper * @Description */@Repositorypublic interface UserMapper {	User getUserById(Integer id);	public List
getUserList(); public int add(User user); public int update(@Param("id") Integer id, @Param("user") User user); public int delete(Integer id);}

mybatis-config.xml

userMapper.xml

id, username, age, ctm
INSERT INTO tb_user (username,age,ctm) VALUES (#{username}, #{age}, now())
UPDATE tb_user SET username = #{user.username},age = #{user.age} WHERE id = #{id}
DELETE FROM tb_user WHERE id = #{id}

上面这种方式也使用PostMan通过测试。

五、简要说明

不知道大家有没有注意到一点,就是引入Springboot-mybatis依赖的时候,并不是spring官方的starter,往常的springboot集成的依赖,比如web,redis等,groupId以及artifactId的地址如下:

org.springframework.boot
spring-boot-starter-web

而这里是mybatis为spring提供的starter依赖,所以依赖地址是:

org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.0

而且值得注意的是,这里必须要指定版本号,往常我们使用springboot之所以不需要指定版本号,是因为我们引入的Maven Parent 中指定了SpringBoot的依赖,SpringBoot官方依赖Pom文件中已经指定了它自己集成的第三方依赖的版本号,对于Mybatis,Spring官方并没有提供自己的starter,所以必须跟正常的maven依赖一样,要加版本号。

SpringBoot自己集成的starter依赖,可以查看 

参考:

你可能感兴趣的文章
Redis哈希键冲突问题
查看>>
邮件报 535 5.7.0 Error: authentication failed
查看>>
Redis数据结构之跳跃表
查看>>
Linux定时调度crontab
查看>>
Spark释义Dataset、DataFrame、SQL
查看>>
Spark作业调度类型
查看>>
hive表修改map分隔符
查看>>
Rpc框架(一)要点介绍
查看>>
Container killed on request. Exit code is 143
查看>>
Hadoop误删文件后恢复
查看>>
Hive Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.
查看>>
eclipse添加hadoop插件连接HDFS
查看>>
flume常见报错记录
查看>>
flume知识点归纳
查看>>
Java知识点归纳
查看>>
idea行号栏太宽的问题
查看>>
java 异常java.lang.UnsupportedOperationException
查看>>
EmptyList和Arrays$ArrayLit使用介绍
查看>>
Java多线程相关(1) 线程
查看>>
Flume源码阅读记录(1)flume介绍
查看>>