MyBatis 是一款优秀的持久层框架,而在springboot中去使用它也是非常的方便.
1.首先先在springboot中的pom.xml中添加mybatis依赖和所需的数据源,在这里我使用的是alibaba的数据源
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
</dependencies>
这个是一个mybatis的小demo的整个依赖,其中我需要的是
<artifactId>druid</artifactId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<artifactId>mysql-connector-java</artifactId>
这三个依赖,然后配置好application.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/mybatisdemo
spring.datasource.username=root
spring.datasource.password=123456
2.然后我们创建一个实体类和数据库里面的表的值一样
public class Book {
private Integer id;
private String name;
private String author;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
3.然后我们再创建一个BookMapper.xml来对数据库里面的数据进行操作
<?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="com.example.demo.ty.BookMapper">
<insert id="addBook" parameterType="com.example.demo.ty.Book">
INSERT INTO book(name,author) VALUES (#{name},#{author})
</insert>
<delete id="deleteBookById" parameterType="int">
DELETE FROM book WHERE id=#{id}
</delete>
<update id="updateBookById" parameterType="com.example.demo.ty.Book">
DELETE FROM book WHERE id=#{id}
</update>
<select id="getBookById" parameterType="int" resultType="com.example.demo.ty.Book">
SELECT * FROM book WHERE id=#{id}
</select>
<select id="getAllBooks" resultType="com.example.demo.ty.Book">
SELECT * FROM book
</select>
<select id="queryBooksBySql" parameterType="map" resultType="com.example.demo.ty.Book">
select * from book limit #{currIndex} , #{pageSize}
</select>
</mapper >
其中parameterType参数指的是你所通过数据进行操作的sql的值的类型,而resultType参数是指操作SQL语句之后所返回的值的类型,一定要匹配,不匹配会出现异常
4.然后我们再创建一个BookMapper.java来调用对应xml里面的sql语句
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BookMapper {
int addBook(Book book);
int deleteBookById(int id);
int updateBookById(Book book);
Book getbookById();
List<Book> getAllBooks() ;
List<Book> queryBooksBySql(Map<String,Object> data);
}
其中我们的方法名一定要和xml里面的id相对应,不然会找不到对应的方法进而产生异常,而@Mapper这个注解也不能少
5.写一个BookService.java来进行调用BookMapper.java里面的方法
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookService {
@Autowired
BookMapper bookMapper;
public int addBook(Book book) {
return bookMapper.addBook(book);
}
public int updateBook(Book book) {
return bookMapper.updateBookById(book) ;
}
public int deteleBook(int id) {
return bookMapper.deleteBookById(id) ;
}
public Book getBookByid(Integer id) {
return bookMapper.getbookById () ;
}
public List<Book> getAllBooks () {
return bookMapper.getAllBooks ();
}
public List<Book> queryBooksBySql(int currPage, int pageSize) {
Map<String, Object> data = new HashMap();
data.put("currIndex", (currPage-1)*pageSize);
data.put("pageSize", pageSize);
return bookMapper.queryBooksBySql(data);
}
}
其中@Autowired 注解是把BookMapper自动装载进来
6.在BookController.java进行调用
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BookController {
@Autowired
BookService bookService;
//添加
@GetMapping ("/addBool")
public void addBook () {
Book bl= new Book() ;
bl.setName ("西厢记");
bl.setAuthor("魯迅");
int i = bookService.addBook (bl) ;
System.out.println("addBook>>" + i);
}
//查询
@GetMapping ("/findAll")
public List<Book> findBook () {
List<Book> bl = bookService.getAllBooks();
System.out.println(bl);
return bl;
}
//分页查询
@ResponseBody
@RequestMapping("/book/{currPage}/{pageSize}")
public List<Plan> queryBooksBySql(@PathVariable("currPage") int currPage, @PathVariable("pageSize") int pageSize) {
List<Book> books= bookService.bkqueryBooksBySql(currPage, pageSize);
return books;
}
}
}
我在Controller层调用了mybatis的添加和查询方法,和分页查询方法,其它的大伙可以自行尝试,其中分页查询方法主要是用了limit这个值,而这个值在mysql的可视化工作里也有查询使用
大家看最底下的那句LIMIT 0,1000就是在这个表里查询第0页的1000个值,这就是mybatis的简单增删查改和分页查询的方法,