个人实践MyBatis问题的解决方法归纳
原创提示:小白首次学习mybatis,出现问题总结,相信新上手的你,也会遇到这些问题~
文章目录
-
- *
前言
提示:下面案例错误均为自己学习过程中出现的错误,解决办法仅供参考:
一、基础项目构建
1.1 创建父工程
父工程的pom.xml配置文件
4.0.0
com.kuang
Mybatis-Study
pom
1.0-SNAPSHOT
mybatis-01
mysql
mysql-connector-java
8.0.26
org.mybatis
mybatis
3.5.9
junit
junit
4.12
8
8
1.2 创建子模块
子模块的pom.xml—— 父子工程的这种模式 ,就不需要每次创建一个项目都要重新加载包,而是每次创建一个子模块,都用父模块的包
Mybatis-Study
com.kuang
1.0-SNAPSHOT
4.0.0
mybatis-01
8
8
1.3 创建实体类
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;
}
//三个属性的set/get方法
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 + +
};
}
}
1.4 创建接口
UserDao
public interface UserDao {
List getUserList();//泛型
}
1.5 创建实现接口的配置文件
UserMapper.xml
创建实现接口的配置文件——相当于接口的实现类
1.6 创建工具类
MybatisUtils
//工具类 sqlSessionFactory用来生产sqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//使用mybatis的第一步:获取sqlSessionFactory的对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
}
//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
//你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
1.7 resources配置文件
mybatis-config.xml
1.8 创建测试类
UserDaoTest
public class UserDaoTest {
@Test
public void test(){
//第一步:获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//方式一:获取dao对象,执行sql语句
UserDao mapper = sqlSession.getMapper(UserDao.class);//通过接口的class对象,来getMapper
List userList =mapper.getUserList();
//遍历一个数组
for (User user : userList) {
System.out.println(user);
}
//关闭SqlSession
sqlSession.close();
}
}
二、常见错误
2.1 sqlSessionFactory null
错误描述:
错误原因:
从上图中可以明显的看出,标记的两个位置,同时定义了SqlSessionFactory的变量,分别是全局变量和局部变量,所以 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
创建对象的过程中是无法创建的,那么就会产生sqlSessionFactory null 的状况
解决办法
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
改为
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);#全部使用全局变量
2.2 The error may exist in com/kuang/dao/UserMapper.xml.
错误描述:
错误原因
这个错误的意思:在该包中,可能不存在UserMapper.xml
但是,从截图中,你也可以很明显的发现,在dao层是存在这个UserMapper.xml配置文件的,那就说明 XML配置文件存在但是识别不到 ,
出现这个问题的原因 :maven的约束大于配置,我们写的配置文件无法导出或者生效
解决办法
在<父工程>和<子工程>的pom.xml配置文件中 都 加入如下内容(父子工程中都加入,防止识别不到而再次产生该类问题)
src/main/resources
**/*.properties
**/*.xml
true
src/main/java
**/*.properties
**/*.xml
true
2.3 Invalid bound statement(not found)
错误描述:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.kuang.dao.UserDao.getUserList
错误原因
无效的绑定语句 :UserMapper.xml文件中的namespace 与接口的捆绑 出现问题
出现这种情况的原因有如下几种:
(1)namespace 路径/名称写错或者不对应
(2)UserMapper.xml文件中 select标签内的 id 与接口中的方法名不对应
(3)配置文件mybatis-config.xml文件中的mapper映射路径不对
解决办法
(1)针对上面出现的原因一 一检查,具体可参考: https://note.youdao.com/web/#/file/WEBf6932456eaca4d3c6124532ed5458725/note/WEB7d88e8ff15f2834139849e8454afcb6b/
(2)mapper文件的四种引入方式检查,具体可参考:
https://www.cnblogs.com/canger/p/9911958.html
2.4 Cause: org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 26; 1 字节的 UTF-8 序列的字节 1 无效。
中文未得到识别问题
解决办法可参考:
https://blog.csdn.net/qq_31484583/article/details/118266516
三、清理maven缓存空间
在我敲代码的过程中,出现了很多错误,甚至有的错误困扰了好几个小时,在修修补补的过程中,发现 maven存在缓存的问题
问题表现为你多次修改配置文件,但是仍然没有作用,还是同样的错误。这时候你别担心,或许是 maven的运行状态还存在于上一个状态 ,打个比方,你已经上到第二个台阶了,而maven项目中的运行内容还在第一个台阶,所以配置文件没起到作用, 清理maven的缓存空间 以后,再次运行试一下,查看下一步问题!
具体操作如下
方法一:
方法二:
总结
这些问题都是在使用maven过程中一定会出现的问题!
避坑避坑~
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除