Mybatis-01-简单上手
1、简介
什么是 MyBatis?
-
MyBatis 持久层框架,它支持自定义 SQL、存储过程以及高级映射。
-
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
-
MyBatis 可以通过简单的 XML 或 注解 来配置和映射原始类型、接口 和 Java POJO(实体类 对象)为数据库中的记录。
2、使用Mybatis
2.1、如何获取Mybatis
-
Maven仓库
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency>
2.2、在项目中使用Mybatis
项目结构
搭建数据库
CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user`(
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
(1,'青柠','123456'),
(2,'小明','123456'),
(3,'李四','123456'),
(4,'张三','123456');
-
Maven 来构建项目,将 mybatis 依赖代码添加到 pom.xml 文件中:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <!--Mysql 连接--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency>
-
添加资源文件
-
bd.properties 数据库连接配置
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8 username=root password=123456
-
mybatis-config.xml 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> <!--引入 数据库 配置信息--> <properties resource="db.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> </configuration>
-
-
创建实体类,接口
-
User
public class User { private int id; private String name; private String pwd; public User(){} public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
-
Mapper 接口
UserMapper
public interface UserMapper { List<User> getUsers(); }
-
在Mapper接口同目录下 新建于 同名的.xml 文件
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"> <!--namespace : 需要绑定的 接口--> <mapper namespace="com.qn.dao.UserMapper"> <!-- select:需要执行的操作 id : 绑定接口中的方法 resultType: 返回值类型 填完全限定名 可一在 mybatis-config.xml 中配置别名--> <select id="getUsers" resultType="com.qn.pojo.User"> # 需要执行的 sql select * from mybatis.user </select> </mapper>
-
在核心配置文件 mybatis-config.xml 中配置 mapper
<mappers> <!--这是 通过 类 来注册 mapper 用 . 来分割 要注意 UserMapper 和 UserMapper.xml 同名 --> <mapper class="com.qn.dao.UserMapper"/> </mappers>
<mappers> <!-- 使用mapper xml 文件来注册 mapper 需要用 / 来分割路径 --> <mapper resource="com/qn/dao/UserMapper.xml"/> </mappers>
-
-
准备测试
-
新建测试类
-
从 XML 中构建 SqlSessionFactory对象
String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
-
从 SqlSessionFactory 中获取 SqlSession对象
try (SqlSession session = sqlSessionFactory.openSession()) { Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101); }
-
编写测试代码
public class MyTest { public static void main(String[] args) { // mybatis-config.xml mybatis的配置 路径 String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); // 通过 sqlSession 获得mapper 来执行业务 UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> users = mapper.getUsers(); for (User user : users) { System.out.println(user); } // 关闭连接资源 sqlSession.close(); } }
-
测试结果
-
3、程序运行错误
3.1、资源无法导出
注意点 maven 可能无法导出 java 路径下的 xml资源文件,程序报错
### Error building SqlSession.
### The error may exist in com/qn/dao/UserMapper.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/qn/dao/UserMapper.xml
解决方法
在 pom.xml 中添加 配置 资源过滤
<!--maven 配置文件 资源过滤-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
3.2、导出的资源中存在中文乱码
解决方法
把mapper 配置文件中的中文删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人