1、MyBatis简介
MyBatis的前身是Apache社区的一个开源项目iBatis,于2010年更名为MyBatis。MyBatis是支持定制化SQL、存储过程和高级映射的优秀持久层框架。它避免了几乎所有的JDBC代码、手动设置参数和获取结果集的操作,使得开发人员更加关注SQL本身和业务逻辑,不用再花费时间关注整个复杂的JDBC操作过程。
MyBatis的结构图。
MyBatis的优点如下所示。
①封装了JDBC大部分操作,减少了开发人员的工作量
②半自动化的操对于编写SQL语句灵活度更高
③Java代码与SQL语句分离,降低维护难度
④自动映射结果集,减少重复的编码工作⑤开源社区十分活跃,文档齐全,学习成本低
2、添加依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
这样,MyBatis的场景启动器和相关依赖就整合进Spring Boot项目中了
idea新建:
3、application.properties的配置
# mybatis config mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.mapper-locations:配置Mapper文件对应的XML文件路径。
4、启动类增加Mapper扫描
在启动类中添加对Mapper包的扫描@MapperScan,Spring Boot在启动的时候会自动加载包路径下的Mapper接口。代码如下所示:
package com.example.sp0217b; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @MapperScan("com.example.sp0217b.dao") @SpringBootApplication public class Sp0217bApplication { public static void main(String[] args) { SpringApplication.run(Sp0217bApplication.class, args); } }
5、在MySQL中先创建一张表
/* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 100137 Source Host : localhost:3306 Source Database : newbee_mall_db Target Server Type : MYSQL Target Server Version : 100137 File Encoding : 65001 Date: 2022-02-17 16:36:13 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for tb_user -- ---------------------------- DROP TABLE IF EXISTS `tb_user`; CREATE TABLE `tb_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(100) NOT NULL DEFAULT '' COMMENT '登录名', `password` varchar(100) NOT NULL DEFAULT '' COMMENT '密码', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=975964 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tb_user -- ---------------------------- INSERT INTO `tb_user` VALUES ('1', 'Spring Boot', '123456'); INSERT INTO `tb_user` VALUES ('2', 'java', '123456'); INSERT INTO `tb_user` VALUES ('3', 'Mybatis', '123456'); INSERT INTO `tb_user` VALUES ('4', 'Thymeleaf', '123456');
6、新建实体类和Mapper接口
新建entity包并在entity包下新建User类,将tb_user中的字段映射到该实体类中,代码如下所示:
package com.example.sp0217b.entity; public class User { private Integer id; private String name; private String password; public void setId(Integer id){ this.id =id; } public String getName (){ return name; } public void setName(String name){ this.name = name; } public String getPassword(){ return password; } public void setPassword(String password){ this.password = password; } }
新建dao包并在dao包中新建UserDao接口,并定义增、删、改、查四个方法,代码如下所示:
package com.example.sp0217b.dao; import com.example.sp0217b.entity.User; import java.util.List; public interface UserDao { /** * 返回数据列表 */ List<User> findAllUsers(); /** * 添加 * @param User * @return */ int insertUser(User User); /** * 修改 * @param User * @return */ int updUser(User User); /** * 删除 * @param id * @return */ int delUser(Integer id); }
7、创建Mapper接口的映射文件
在resources目录下新建mapper目录,并在mapper目录下新建Mapper接口的映射文件UserMapper.xml,再进行映射文件的编写。
首先,定义映射文件与Mapper接口的对应关系。
比如在该示例中,需要将UserMapper.xml文件与对应的UserDao接口类之间的关系定义出来:
<mapper namespace="com.example.sp0217b.dao.UserDao">
然后,配置表结构和实体类的对应关系:
<resultMap type="com.example.sp0217b.entity.User" id="UserResult"> <result property="id" column="id"></result> <result property="name" column="name"></result> <result property="password" column="password"></result> </resultMap>
最后,按照对应的接口方法,编写增、删、改、查方法的具体SQL语句,最终的UserMapper.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.sp0217b.dao.UserDao"> <resultMap type="com.example.sp0217b.entity.User" id="UserResult"> <result property="id" column="id"></result> <result property="name" column="name"></result> <result property="password" column="password"></result> </resultMap> <select id="findAllUsers" resultMap="UserResult"> select id,name,password from tb_user order by id desc </select> <insert id="insertUser" parameterType="com.example.sp0217b.entity.User"> insert into tb_user (id,name,password) values (#{id},#{name},#{password}) </insert> <update id="updUser" parameterType="com.example.sp0217b.entity.User"> update tb_user set name = #{name},password=#{password} where id=#{id} </update> <delete id="delUser" parameterType="int"> delete from tb_user where id=#{id} </delete> </mapper>
8、新建MyBatisController
为了对MyBatis进行功能测试,在controller包下新建MyBatisController类,并新增4个方法分别接收对于tb_user表的增、删、改、查请求,代码如下所示:
package com.example.sp0217b.controller; import com.example.sp0217b.dao.UserDao; import com.example.sp0217b.entity.User; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; @RestController public class MyBatisController { @Resource UserDao userDao; // 查询所有记录 @GetMapping("/user/mybatis/queryAll") public List<User> queryAll(){ return userDao.findAllUsers(); } // 新增 @GetMapping("/user/mybatis/insert") public Boolean insert(String name,String password){ if(StringUtils.isEmpty(name) || StringUtils.isEmpty(password)){ return false; } User user = new User(); int id = (int) (Math.random()*1000000); // user.setId(id); user.setName(name+"-"+id); user.setPassword(password+"-"+id); System.out.println(id); return userDao.insertUser(user)>0; } // 修改 @GetMapping("/user/mybatis/update") public Boolean update(Integer id, String name, String password){ if(id==null || StringUtils.isEmpty(name)||StringUtils.isEmpty(password)){ return false; } User user = new User(); user.setId(id); user.setName(name); user.setPassword(password); return userDao.updUser(user)>0; } // 删除 @GetMapping("user/mybatis/delete") public Boolean delete(Integer id){ if(id==null || id <1){ return false; } return userDao.delUser(id)>0; } }
在上述步骤完成后,项目的代码目录就如图
在编码完成后启动Spring Boot项目。在启动成功后打开浏览器,对以上四个功能进行验证
添加
http://localhost:8080/user/mybatis/insert?name=李沙发&password=234567
修改
http://localhost:8080/user/mybatis/update?id=1&name=李沙发2&password=234567
删除
http://localhost:8080/user/mybatis/delete?id=1
查询所有
http://localhost:8080/user/mybatis/queryAll