简述
在java领域里,哪怕是新手恐怕也是对mybatis这个大名略有耳闻。毕竟这项技术在应用方面表现优异,是每一个编写java的程序员都得掌握的技能。
什么是mybatis?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
准备工作
-
一个springboot项目:
点击查看生成一个springboot项目 -
应用mybatis生成相对应的实体类、mapper等;
点击查看如何应用mybatis生成代码 -
关键的pom文件代码:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql连接-->
<!--<dependency>-->
<!--<groupId>mysql</groupId>-->
<!--<artifactId>mysql-connector-java</artifactId>-->
<!--</dependency>-->
<!--整合mybatis-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
- 数据库生成一张表,这里以一张简单的demo表做示范:
CREATE TABLE `demo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`code` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf
开始使用
准备好了这些,就可以开始编码了:
- 获取列表:
@RequestMapping(value = "/getList")
public List<Demo> getList() {
//创建一个Demo类的搜索条件类,利用example可以添加搜索条件
DemoCriteria example = new DemoCriteria();
//selectByExample可表示使用搜索条件做搜索,得出一个List结果
List<Demo> demos = this.demoMapper.selectByExample(example);
System.out.println("demos = " + demos);
return demos;
}
效果图:
- 用主键ID获取单条数据:
@RequestMapping(value = "/getOne")
public Demo getOne(Integer id) {
//selectByPrimaryKey表示按主键选择该条数据
Demo demo = this.demoMapper.selectByPrimaryKey(id);
System.out.println("demo = " + demo);
return demo;
}
效果图:
- 新增:
@RequestMapping(value = "/insert")
public Boolean insert(String name,String code) {
Demo demo = new Demo();
demo.setName(name);
demo.setCode(code);
//insertSelective按照现已设定参数的参做insert,而不是整个类做insert
if (this.demoMapper.insertSelective(demo) == 1){
System.out.println("true");
return true;
}else {
System.out.println("false");
return false;
}
}
效果图(从2图变为3图):
- 修改(从2图变为3图):
@RequestMapping(value = "/update")
public Boolean update(Integer id,String name,String code) {
//按id找到该条数据
Demo demo = this.demoMapper.selectByPrimaryKey(id);
//如该条数据不在库,则需返回错误或者业务处理
if (demo == null){
return false;
}
//设定参数
demo.setName(name);
demo.setCode(code);
//updateByPrimaryKeySelective按照现已设定参数的参做update,而不是整个类做update
if (this.demoMapper.updateByPrimaryKeySelective(demo) == 1){
System.out.println("true");
return true;
}else {
System.out.println("false");
return false;
}
}
效果图:
- 删除:
@RequestMapping(value = "/delectById")
public Boolean delectById(Integer id) {
//deleteByPrimaryKey按主键删除该条数据
//成功删除1条则返回1,删除失败则返回0
if (this.demoMapper.deleteByPrimaryKey(id) == 1){
System.out.println("true");
return true;
}else {
System.out.println("false");
return false;
}
}
效果图:
整合:
package com.example.demo.controller;
import com.example.demo.mapper.DemoMapper;
import com.example.demo.model.dto.Demo;
import com.example.demo.model.dto.DemoCriteria;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class DemoController {
@Autowired
DemoMapper demoMapper;
@RequestMapping("/hello")
public String Hello(String name) {
return "Hello World";
}
@RequestMapping(value = "/getList")
public List<Demo> getList() {
//创建一个Demo类的搜索条件类,利用example可以添加搜索条件
DemoCriteria example = new DemoCriteria();
//selectByExample可表示使用搜索条件做搜索,得出一个List结果
List<Demo> demos = this.demoMapper.selectByExample(example);
System.out.println("demos = " + demos);
return demos;
}
@RequestMapping(value = "/getOne")
public Demo getOne(Integer id) {
//selectByPrimaryKey表示按主键选择该条数据
Demo demo = this.demoMapper.selectByPrimaryKey(id);
System.out.println("demo = " + demo);
return demo;
}
@RequestMapping(value = "/delectById")
public Boolean delectById(Integer id) {
//deleteByPrimaryKey按主键删除该条数据
//成功删除1条则返回1,删除失败则返回0
if (this.demoMapper.deleteByPrimaryKey(id) == 1){
System.out.println("true");
return true;
}else {
System.out.println("false");
return false;
}
}
@RequestMapping(value = "/insert")
public Boolean insert(String name,String code) {
Demo demo = new Demo();
demo.setName(name);
demo.setCode(code);
//insertSelective按照现已设定参数的参做insert,而不是整个类做insert
if (this.demoMapper.insertSelective(demo) == 1){
System.out.println("true");
return true;
}else {
System.out.println("false");
return false;
}
}
@RequestMapping(value = "/update")
public Boolean update(Integer id,String name,String code) {
//按id找到该条数据
Demo demo = this.demoMapper.selectByPrimaryKey(id);
//如该条数据不在库,则需返回错误或者业务处理
if (demo == null){
return false;
}
//设定参数
demo.setName(name);
demo.setCode(code);
//updateByPrimaryKeySelective按照现已设定参数的参做update,而不是整个类做update
if (this.demoMapper.updateByPrimaryKeySelective(demo) == 1){
System.out.println("true");
return true;
}else {
System.out.println("false");
return false;
}
}
}
备注:以上请求为未设定请求方式,因此可以用浏览器直接请求访问,这种请求方式为GET方式。
设定请求方式的方法:
@RequestMapping(value = "/getList", method = RequestMethod.GET)
请求方式除了GET以外还有许多,例如:POST,DELETE,HEAD,TRACE等等;