Mybatis入门
Mybatis入门
Pom.xml文件配置
导入mybatis依赖
<!--导入mybatis依赖,适配jdk17-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version>
</dependency>
导入lombok依赖(可选)
<!--导入lombok依赖-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version>
</dependency>
导入数据库依赖(驱动)
<!--导入mysql依赖-->
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.1.0</version>
</dependency>
导入Maven 官方编译插件
<!--后续的forEach用到-->
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin></plugins>
</build>
mybatis-config.xml核心配置文件
文件路径

配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--导入环境--><environments default="development"><environment id="development"><!--使用 JDBC 自带的事务管理机制--><transactionManager type="JDBC"></transactionManager><!--使用 MyBatis 自带的连接池,管理数据库连接的创建和复用--><dataSource type="POOLED"><!--数据源属性配置--><!-- 数据库驱动类 --><property name="driver" value="com.mysql.cj.jdbc.Driver"/><!-- 数据库连接 URL --><property name="url" value="jdbc:mysql://localhost:3306/emp_desgin?useSSL=false&serverTimezone=UTC"/><!-- 数据库用户名 --><property name="username" value="root"/><!-- 数据库密码 --><property name="password" value="123456"/></dataSource></environment></environments><mappers><!--注册mapper映射--><!-- 方式1:注册 Mapper 接口(推荐,需与 XML 映射文件同路径同名) --><mapper class="com.cjp.mapper.DeptMapper"/><!-- 方式2:注册 XML 映射文件(需指定完整路径) --><!-- <mapper resource="com/cjp/mapper/DeptMapper.xml"/> --><!-- 方式3:批量注册某个包下的所有 Mapper 接口(推荐,简化配置) --><!-- <package name="com.cjp.mapper"/> --></mappers>
</configuration>
Pojo实体类
-
pojo包下存放的是与数据库表一一对应的实体类,一张表一个实体类
-
实体类中定义的属性就是数据库表中的各个字段,数据类型采用包装类,属性名可以不采用大写
-
为减少代码量,我们可以引入lombok依赖(@Data、@NoArgsConstructor、 @AllArgsConstructor)
-
若是多表联查,可以新建一个实体类,将多表的字段都声明成属性
文件路径

工具类构建SqlSessionFactory
文件路径

实现代码
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的
//创建MybatsUtil工具类
public class MybatisUtil {/*工具类,获取SqlSessionFactory实例*/static SqlSessionFactory ssf = null;/*放置静态代码块中,只加载一次,SqlSessionFactory的特性*/static {try {String resource = "mybatis-config.xml";//通过mybatis的Resources工具类加载制定配置文件 获取了一个字节输入流对象(数据载入)InputStream is = Resources.getResourceAsStream(resource);//获得工厂对象ssf = new SqlSessionFactoryBuilder().build(is);} catch (IOException e) {e.printStackTrace();}}//用于获取SqlSession对象public static SqlSession getSqlSession(){return ssf.openSession();}
}
用 static 代码块初始化 SqlSessionFactory,确保类加载时只执行一次,避免重复创建(SqlSessionFactory 是重量级对象,全局只需要一个实例)
MyBatis 的 Resources.getResourceAsStream() 是从 classpath 加载资源,而非本地文件系统路径。你项目中 mybtis-config.xml 位于 src/main/resources 根目录下,因此正确的资源路径应为 mybtis-config.xml(直接写文件名,无需带 src/main/resources)
mybatis-config.xml 必须放在项目的 classpath 目录下,MyBatis 的 Resources.getResourceAsStream() 方法会从 classpath (如下)中查找资源
String resource = "mybatis-config.xml";
src/
└── main/├── java/ // Java 代码└── resources/ // 资源文件(classpath 根目录)└── mybatis-config.xml // 正确位置
Mapper接口
文件路径

新建接口
采用表名+Mapper的命名方式,对外暴露对表操作的相关方法
public interface DeptMapper {/*定义与表名相关的接口,对外暴露功能方法(例如查询、修改等)*/public List<Dept> queryAllDept();
}
建立与xxMapper关联的xxMapper.xml文件
文件路径

方法一:在 mybatis-config.xml 中注册 Mapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--添加 namespace,值为 DeptMapper 接口的全限定类名 -->
<mapper namespace="com.cjp.mapper.DeptMapper"><!--在此处实现接口中的方法,id是对应接口中的方法名,resultType是指方法的返回值--><select id="queryAllDept" resultType="com.cjp.pojo.Dept"><!--此处编写sql语句-->select * from dept</select>
</mapper><!--注册mapper如下(mybatis-config.xml文件中)-->
<!-- <mappers><!–注册mapper映射–><!– 方式1:注册 Mapper 接口(推荐,需与 XML 映射文件同路径同名) –><mapper class="com.cjp.mapper.DeptMapper"/><!– 方式2:注册 XML 映射文件(需指定完整路径) –><!– <mapper resource="com/cjp/mapper/DeptMapper.xml"/> –><!– 方式3:批量注册某个包下的所有 Mapper 接口(推荐,简化配置) –><!– <package name="com.cjp.mapper"/> –></mappers>-->
若使用 resource 注册 XML 文件,路径需以 classpath 为根,用 / 分隔(如 com/cjp/mapper/DeptMapper.xml)
若使用 package 批量注册,需保证包下所有接口的 XML 映射文件满足 “同路径同名” 规则
方法二:使用注解(无需 XML 映射文件)
// DeptMapper 接口示例(注解方式)
package com.cjp.mapper;import org.apache.ibatis.annotations.Select;
import com.cjp.pojo.Dept;public interface DeptMapper {@Select("select * from dept where id = #{id}")Dept selectById(int id);
}
测试
public class Test {public static void main(String[] args) {//获取SqlSession对象SqlSession sqlSession = MybatisUtil.getSqlSession();//根据指定类型 来获取映射器DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);mapper.queryAllDept().forEach(System.out::println);sqlSession.close();}
}
