Mybatis 教程
Mybatis 教程
第一个 Mybatis 程序
思路:搭建环境 \(\to\) 导入 Mybatis \(\to\) 编写代码 \(\to\) 测试
![image-20230111170714910](https://img2023.cnblogs.com/blog/1641623/202402/1641623-20240208211306996-953286930.png)
搭建环境
- 搭建数据库
CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user` (
`id` INT(20) 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,'张三','abcdef'),(3,'李四','987654');
- 新建项目
- 新建一个普通的
maven
项目 - 删除
src
目录
- 新建一个普通的
导入 Mybatis
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
创建模块
- 编写 mybatis 核心配置文件:在
resources
文件夹内创建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.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="130914"/>
</dataSource>
</environment>
</environments>
<!--每一个 Mapper.xml 都需要在 Mybatis 核心配置文件中注册!-->
<mappers>
<!--注意名字千万不要写错啦-->
<mapper resource="com/locke/dao/UserMapper.xml"/>
</mappers>
</configuration>
- 编写
mybatis
的工具类:在com.locke.utils
中新建MybatisUtils
类(连接数据库)
每个基于 Mybatis 的应用都是以一个
SqlSessionFactory
的实例为核心的。SqlSessionFactory
的实例可以通过SqlSessionFactoryBuilder
获得。而SqlSessionFactoryBuilder
则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出SqlSessionFactory
的实例。拿到
SqlSessionFactory
后,我们就可以从中获得SqlSession
的实例了。SqlSession
完全包含了面向数据库执行SQL
命令所需的所有方法。
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取 SqlSession 连接
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
编写代码
- 实体类:在
com.locke.pojo
中新建User
类
public class User {
private int id; // id
private String name; // 姓名
private String pwd; // 密码
//构造,有参,无参
//set/get
//toString()
}
- Dao 接口:在
com.locke.Dao
中新建UserMapper
接口
public interface UserMapper {
List<User> selectUser();
}
- 接口实现类:在
com.locke.Dao
中新建UserMapper.xml
配置文件(原来是UserDaoImpl
)
<?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 绑定一个对应的 Dao/Mapper 接口-->
<mapper namespace="com.locke.dao.UserMapper">
<!--id 就是接口中方法的名字,本来是需要重写的(例如先连接数据库再执行查询),
现在只需要绑定,不需要再连接数据库,只用专注于 sql 代码-->
<!--resultType 代表返回类型-->
<select id="selectUser" resultType="com.locke.pojo.User">
select * from user
</select>
</mapper>
测试
public class UserDaoTest {
@Test
public void selectUser() {
// 第一步:获取 SqlSession 对象
SqlSession session = MybatisUtils.getSession();
// 第二步:执行 SQL
// 方法一:
// List<User> users = session.selectList("com.locke.mapper.UserMapper.selectUser");
// 方法二:
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.selectUser();
for (User user: users){
System.out.println(user);
}
// 第三步:关闭 sqlSession
session.close();
}
}
注意点:可能出现问题说明:Maven 静态资源过滤问题
在 pom.xml
中添加:以免找不到我们的 xml
文件
<!--在 build 中配置 resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
最终输出:
User{id=1, name='狂神', pwd='123456'}
User{id=2, name='张三', pwd='abcdef'}
User{id=3, name='李四', pwd='987654'}