MyBatis-基本入门
MyBatis官方文档-中文:https://mybatis.org/mybatis-3/zh/index.html
这个文档是每个学习Mybatis都应该看的。
简介
MyBatis 是一款优秀的【持久层框架】,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 【XML】或【注解】来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
作用在项目:持久层,也就是数据库操作。
MyBatis属于SSM三大框架之一
使用MyBatis的原因
1、方便,容易上手。
2、简化 传统的JDBC复杂代码。
3、帮助程序员将数据存入到数据中。
4、sql语句写在XML文件里,便于统一化管理。
5、解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护。
第一个MyBatis程序
思路:搭建环境-->导入MyBatis-->编写代码-->测试
1、搭建环境
1-1、搭建数据库
正常搭建数据库,本次使用MySQL数据库非窗口化方式。
-- 注意``不是单引号,而是着重号 create database `mybatis`; //创建名为mybatis的数据库 use `mybatis`; -- 创建tset表 create table `tset` ( `id` int(20) not null primary key, `name` varchar(30) default null, `pwd` varchar(30) default null) engine=innodb default=utf8; -- 插入数据 insert into `tset` (`id`,`name`,`pwd`) values (1,"渔舟唱晚","123"), (2,"生生灯火","123"), (3,"半杯月","123");

2、新建项目导入依赖(IDEA)
①创建普通的maven项目
Tips:需要检查的是,每次Idea新建Maven项目后,Maven的选择是默认的,并不是我们所真正使用的。
②删除新建项目的src文件,将此项目作为父工程。
-方便后面继续学习。
③导入依赖jar包。
-MySQL驱动
-mybatis
-junit测试框架
在pom.xml文件中添加导入依赖代码
<!--导入Maven依赖--> <dependencies> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!--junit测试框架--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>
继续在pom.xml文件中添加代码防止资源导出失败的问题
<!--在build中配置resource,来防止我们资源导出失败的问题--> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
④在此项目中创建Maven模块
- 在src文件夹下创建main文件夹
- 在main文件夹下创建java文件夹、resource文件夹
- 在resource文件夹下创建”mybatis-config.xml“文件
- 打开mybatis-config.xml文件粘贴【MyBatis官方文档】中的【MyBatis核心配置】的简单示例,并修改为自己的driver、url、username、password。
可以直接复制如下代码:
(注意:在xml文件中”&”字符,需要转义“&”,另外每一个mapper.xml都需要在mybatis核心配置文件中注册)
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--核心配置文件--> <configuration> <!--环境--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--每一个mapper.xml都需要在mybatis核心配置文件中注册--> <mappers> <mapper resource="com/du/dao/UserMapper.xml"/> </mappers> </configuration>
3、代码编写

MybatisUtils.java(几乎为MyBatis框架为了获取sqlSession的固定写法)
public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { // 使用mybatis第一步:获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; // 读取xml配置文件 InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } // 通过sqlsessionfactory获取sqlsession的实例 // SQL session完全包含了面向数据库执行sql命令所需的所有方法 public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } }
User.java
public class User { private int id; private String name; private String pwd; 自己生成:无参/有参、get/set、toString方法 }
UserMapper.java
- 这是一个interface接口,也就是UserDao.java
- 关于数据库增删改方法返回值类型为什么是int
- 返回值int是对sql中该sql语句影响的行数,比如你插入一条数据,成功的话sql会提示1行代码收影响,返回的int是1
insert:插入n条记录,返回影响行数n。(n>=1,n为0时实际为插入失败)
update:更新n条记录,返回影响行数n。(n>=0)
delete:删除n条记录,返回影响行数n。(n>=0)
public interface UserMapper { List<User> getUserList(); User getUserById(int id); int addUser(User user); int updateUser(User user); int deleteUser(int id); }
UserMapper.xml
相当于以前UserDaoImpl.java但是更加清晰直观
- resultType="返回值类型"
- parameterType="参数类型"
(因为没有配置别名,注意需要全类名,如:com.du.pojo.User)
<?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绑定一个对应的dao/mapper接口--> <mapper namespace="com.du.dao.UserMapper"> <!-- resultType:返回值类型 parameterType:参数类型 --> <select id="getUserList" resultType="com.du.pojo.User"> select * from test </select> <select id="getUserById" parameterType="int" resultType="com.du.pojo.User"> select * from test where id = #{id} </select> <insert id="addUser" parameterType="com.du.pojo.User"> insert into test (id, name, pwd) values (#{id},#{name},#{pwd}) </insert> <update id="updateUser" parameterType="com.du.pojo.User"> update test set name = #{name},pwd = #{pwd} where id = #{id}; </update> <delete id="deleteUser" parameterType="int"> delete from test where id = #{id} </delete> </mapper>
4、测试
UserMapperTest.java
(注意:
- 数据库的数据库发生写时必须要有【提交事物】:sqlSession.commit();
- 养成习惯每次关闭sqlSession:sqlSession.close();
)
public class UserMapperTest { @Test public void lgetUserList(){ // 获取sqlsession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); try { // 执行sql UserMapper userDao = sqlSession.getMapper(UserMapper.class); List<User> userList = userDao.getUserList(); for (User user : userList){ System.out.println(user); } } catch (Exception e) { e.printStackTrace(); }finally { // 关闭sqlsession sqlSession.close(); } } @Test public void getUserById(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); } @Test public void addUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); mapper.addUser(new User(4,"鱼","123456")); // 数据库数据修改必须提交事务 sqlSession.commit(); sqlSession.close(); } @Test public void updateUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); mapper.updateUser(new User(4,"鱼儿","666")); // 数据库数据修改必须提交事务 sqlSession.commit(); sqlSession.close(); } @Test public void deleteUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); mapper.deleteUser(4); // 数据库数据修改必须提交事务 sqlSession.commit(); sqlSession.close(); } }
getUserList
getUserById

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理