Mybatis入门
1、什么是Mybatis?Mybatis是干嘛的?(百度百科)
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
简单的来讲:mybatis就是一款简化我们JavaJDBC操作的框架
学习框架最好的办法就是参考文档,这里我把文档贴出来
https://mybatis.org/mybatis-3/zh/index.html
2、搭建一个简单的Mybatis项目
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
-
创建一个Mybatis的核心配置类 mybatis-confis.xml
记得一定要创建在Resources的资源文件下
<?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="mysql"> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/bjpowernode?serverTimezone=GMT&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource=""></mapper> </mappers> </configuration>
注意一定要注意:
这里的mappers 是后面要用到的映射文件 我这里没写是因为我还没有创建Mapper.xml
-
创建一个pojo实体类
private int empno; private String ename; private String job; private int mgr; private Date Hiredate; private double sal; private double comm; private int deptno;
记得添加Get Set 和构造方法 因为篇幅的原因 没有把全部代码贴出来
-
创建Mapper类(相当于以前的Dao类)
package com.zhang.mapper; import com.zhang.pojo.Emp; import java.util.List; public interface EmpMapper { List<Emp> findAll(); }
Mybatis的灵魂来了
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zhang.mapper.EmpMapper"> <select id="findAll" resultType="com.zhang.pojo.Emp"> select * from emp </select> </mapper>
-
创建Mybatis工具类 方便测试:
public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "mybatis-config.xml"; InputStream in = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); } catch (IOException e) { } } public static SqlSession getsqlSession(){ return sqlSessionFactory.openSession(); } }
-
编写测试类:
@Test public void findAll(){ SqlSession sqlSession = MybatisUtils.getsqlSession(); EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); List<Emp> empList = mapper.findAll(); for (Emp emp:empList){ System.out.println(emp); } }
3、会遇到的问题
1、Mapper的映射问题:
org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。
查看你的mapper映射
2、Mapper未找到问题:
org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com.zhang.mapper.EmpMapper
解决办法:
1、你的格式可能出错
<mappers>
<mapper resource="com.zhang.mapper.EmpMapper"></mapper>
</mappers>
这里需要用 **/**
2、xml项目没有识别到所以需要在pom中添加如下代码
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
3、如果还是错误 你可选择两个办法
-
修改Mapper的读取方式
<mappers> <mapper class="com.zhang.mapper.EmpMapper"/> </mappers>
-
可以直接将Mapper.xml放置在Resource资源文件夹下