mybatis笔记

报错:org.apache.ibatis.binding.BindingException: Type interface com.lyg.dao.UserDao is not known to the MapperRegistry.

at org.apache.ibatis.binding.MapperRegistry.getMapper(MapperRegistry.java:47)
at org.apache.ibatis.session.Configuration.getMapper(Configuration.java:779)
at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:291)
at com.lyg.dao.UserDaoTest.test(UserDaoTest.java:17)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

需要在pom文件中添加过滤器****或者 mapper映射文件的namespace和接口类名不一致
在这里插入图片描述

src/main/java **/*.properties **/*.xml false src/main/resources **/*.properties **/*.xml false

mybatis常遇问题:
1、配置文件没有注册
2、绑定接口错误
3、方法名不对
4、返回类型不对
5、maven导出资源问题

namespace的包名要和接口中的包名要一致

注意:增删改需要注意事务
sqlsession.commit();

resouse绑定mapper需要时路径用 \ 不是.****

sqlsessionFactory错误:
java.lang.NullPointerException
at com.lyg.utils.MybatisUtils.getSqlSession(MybatisUtils.java:27)
at com.lyg.dao.UserDaoTest.test(UserDaoTest.java:14)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

在这里插入图片描述

正确:
在这里插入图片描述
配置文件会优先使用外部文件

类型别名(typeAliases)

1、
<typeAliases>
<typeAlias alias=“Author” type=“domain.blog.Author”/>
<typeAlias alias=“Blog” type=“domain.blog.Blog”/>
</typeAliases>

2、
<typeAliases>
<package name=“domain.blog”/>
</typeAliases>

属性名和字段名不一致问题
1、起别名

2、结果集映射
在这里插入图片描述
log4j配置文件
在这里插入图片描述
mybatis执行流程

1、resourse加载获取全局配置文件
String resource = “mybatis-config.xml”;
InputStream inputStream = Resources.getResourceAsStream(resource);

2、实例化sqlsessionfactorybuild构造器
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

3、解析配置文件流xmlconfigbuilder

4、configuration所有的配置信息

5、sqlsessionfactory实例化
SqlSession sqlSession = sqlSessionFactory.openSession();

6、transactional事务管理器

7、创建executor执行器

8、创建sqlsession

9、实现CRUD,失败会回滚到事务管理器

10、查看是否会执行成功,若失败会回滚到事务

11、提交

在这里插入图片描述
多对一处理:

子查询:

<?xml version="1.0" encoding="UTF-8" ?>

<mapper namespace=“com.lyg.dao.StudentDao”>

<select id="getStudent" resultMap="studentteacher">
select * from user.student  </select>

<resultMap id="studentteacher" type="student">
    <result property="sid" column="sid"/>
    <result property="sname" column="sname"/>
    <association property="teacher" column="tid" javaType="teacher" select="getTeacher"/>
</resultMap>

<select id="getTeacher" resultType="teacher">
select * from user.teacher where tid = #{tid} </select>

</mapper>

**javatype:**把sql语句查询出的结果集封装给某个类的对象
**select:**下条要执行的语句
**property:**注入给实体类的某个属性
**column:**在上次查的结果集中,用哪些列值作为条件去执行下一条sql语句

按照结果嵌套处理:

mybatis缓存:
可用的清除策略有:
LRU – 最近最少使用:移除最长时间不被使用的对象。
FIFO – 先进先出:按对象进入缓存的顺序来移除它们。

SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。

一级缓存:sqlsession
缓存失效:
1、sqlsession变了 缓存失效
2、sqlsession不变,查询条件不同,一级缓存失效
3、sqlsession不变,中间发生了增删改操作,一级缓存失败
4、sqlsession不变,手动清除缓存,一级缓存失败

二级缓存:
1、只要开启二级缓存,只在同一个namespace(mapper)有效
2、所有数据都会先放在一级缓存中
3、只有当会话(sqlsession)提交或者关闭,才会提交到二级缓存中

缓存原理:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值