MyBatis 使用权威指南
发布时间 - 2026-01-11 00:21:03 点击率:次什么是 MyBatis

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
SpringBoot 中使用
使用 Maven
在你的pom.xml中:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.1-SNAPSHOT</version> </dependency>
使用 Gradle
在你的 build.gradle中:
dependencies {
compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.2.1-SNAPSHOT")
}
使用
目录结构
--src --main --java --com.example --dao --UserDao.java --entity --User.java --DemoApplication.java --UserSex.java --resources --mapper --UserMapper.xml --application.properties
基于注解
使用MyBatis-Spring-Boot-Starter will:
将自动检测存在的数据源
将数据源输入然后创建注册一个SqlSessionFactoryBean实例
从SqlSessionFactoryBean中创建注册一个SqlSessionTemplate实例
自动扫描你的 mappers,将它们连接到SqlSessionTemplate然后将它们注册到 Spring 的上下文
我们新建一个实体类User.java,在这里我们使用 Lombok (使用说明见这篇文章)来简化代码
@Data
public class User {
private Long id;
private String userName;
private String password;
private UserSex userSex;
private String nickName;
}
接着我们创建一张叫 user的表
DROP TABLE IF EXISTS user; CREATE TABLE user( id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', user_name VARCHAR(32) DEFAULT NULL COMMENT '用户名', password VARCHAR(32) DEFAULT NULL COMMENT '密码', user_sex VARCHAR(32) DEFAULT NULL , nick_name VARCHAR(32) DEFAULT NULL , PRIMARY KEY (id) ) ENGINE = InnoDB DEFAULT CHARSET = utf8;
然后创建一个 Dao 文件UserDao.java
@Mapper
public interface UserDao {
@Select("SELECT * FROM user WHERE id = #{id}")
@Results({
@Result(property = "userName", column = "user_name"),
@Result(property = "password", column = "password"),
@Result(property = "userSex", column = "user_sex", javaType = UserSex.class),
@Result(property = "nickName",column = "nick_name")
})
User findById(@Param("id") Long id);
@Insert("INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})")
void save(User user);
@Update("UPDATE user set user_name = #{userName}, nick_name = #{nickName} WHERE id = #{id}")
void update(User user);
@Delete("DELETE FROM user where id = #{id}")
void remove(Long id);
}
每个方法都对应的对应的 sql 语句,其中@Select注解用于查询,@Result注解将实体类属性跟数据库的字段一一对应,@Insert注解用于插入数据,@Update注解用于修改数据,@Delete注解用于删除
接下来我们简单的测试下
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
UserDao userDao;
@Test
public void test(){
User one = new User();
one.setUserName("张三");
one.setPassword("123456");
one.setUserSex(UserSex.MAN);
userDao.save(one);
User two = new User();
two.setUserName("李四");
two.setPassword("123456");
two.setUserSex(UserSex. WOMAN);
userDao.save(two);
}
}
结果如下
结果
基于 XML 配置
在application.properties配置文件中新增以下配置
mybatis.type-aliases-package= com.example.entity mybatis.mapper-locations=classpath:mapper/*.xml
然后在resources文件夹中创建mapper文件夹,然后新建一个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.dao.UserDao">
<resultMap id="userMap" type="com.example.entity.User">
<result column="id" property="id"/>
<result column="user_name" property="userName"/>
<result column="password" property="password"/>
<result column="user_sex" property="userSex" javaType="com.example.UserSex"/>
<result column="nick_name" property="nickName"/>
</resultMap>
<insert id="save" parameterType="com.example.entity.User">
INSERT INTO user (user_name,password,user_sex ) VALUES (#{userName},#{password},#{userSex})
</insert>
<delete id="remove" parameterType="java.lang.Long">
DELETE FROM user where id = #{id}
</delete>
<update id="update" parameterType="com.example.entity.User">
UPDATE user SET user_name = #{userName}, nick_name =#{nickName} WHERE id = #{id}
</update>
<select id="findById" parameterType="java.lang.Long" resultMap="userMap">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
然后将UserDao.java文件修改如下
public interface UserDao {
User findById(Long id);
void save(User user);
void update(User user);
void remove(Long id);
}
最后在SpringBoot的主程序上加上@MapperScan的注解将 dao 文件跟 sql 语句对应起来
@SpringBootApplication
@MapperScan("com.example.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
总结
mybatis-spring-boot-starter可以快速的通过注解来开发,十分方便,可以灵活的使用 SQL 和调整 SQL,具体用注解还是基于 XML,我觉得还是看自己的喜好。
下面看下#{}和${}的区别
#{}在底层实现上使用?做占位符来生成PreparedStatement,然后将参数传入,大多数情况都应使用这个,它更快、更安全。
${}将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值是111,那么解析成sql时的值为order by 111, 如果传入的值是id,则解析成的sql为order by id.
以上所述是小编给大家介绍的MyBatis 使用指南,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# mybatis指南
# mybatis
# 使用
# Mybatis分页插件PageHelper的使用详解
# Mybatis中注解@MapKey的使用详解
# MyBatis Generator生成代码及使用方式详解
# MyBatis Mapper代理使用方法详解
# Java的MyBatis框架中Mapper映射配置的使用及原理解析
# 详解Java的MyBatis框架中的缓存与缓存的使用改进
# oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
# 小编
# 新建一个
# 自己的
# 在这里
# 我觉得
# 在此
# 主程序
# 给大家
# 实体类
# 更快
# 这篇文章
# 几乎所有
# 以对
# 所述
# 连接到
# 都应
# 创建一个
# 使用这个
# 给我留言
# 配置文件
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Laravel如何为API生成Swagger或OpenAPI文档
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何在万网利用已有域名快速建站?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
三星网站视频制作教程下载,三星w23网页如何全屏?
jQuery validate插件功能与用法详解
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel如何实现用户密码重置功能?(完整流程代码)
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
如何在阿里云域名上完成建站全流程?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
EditPlus中的正则表达式 实战(1)
米侠浏览器网页背景异常怎么办 米侠显示修复
jquery插件bootstrapValidator表单验证详解
如何撰写建站申请书?关键要点有哪些?
LinuxShell函数封装方法_脚本复用设计思路【教程】
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
高性能网站服务器部署指南:稳定运行与安全配置优化方案
北京网站制作的公司有哪些,北京白云观官方网站?
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
手机网站制作与建设方案,手机网站如何建设?
如何在VPS电脑上快速搭建网站?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
如何为不同团队 ID 动态生成多个独立按钮
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
php json中文编码为null的解决办法
如何注册花生壳免费域名并搭建个人网站?
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
Laravel如何实现多对多模型关联?(Eloquent教程)
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
b2c电商网站制作流程,b2c水平综合的电商平台?
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
如何在云服务器上快速搭建个人网站?
做企业网站制作流程,企业网站制作基本流程有哪些?
微信推文制作网站有哪些,怎么做微信推文,急?
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南

