mybatis学习笔记

mybatis
 一个基于mybatis框架的maven项目大致过程
1 写工具类  xxxUtils  utils包    需要一个resource配置文件   去maven项目目录下resources 写一个mabatis-config.xml配置文件
2 写实体类   pojo包
3 写接口 Interface  dao包   和 xxxmapper.xml 配置文件(有数据库执行语句)
4 写测试类 
5 前提 配置maven  pom.xml 相关依赖
mybatis依赖
 
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>
sql依赖 (mysql)
 
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>
junit依赖
 
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.2</version>
    <scope>test</scope>
</dependency>
pom配置出现问题可能用得上
 
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
    </resource>
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
    </resource>
</resources>
 
增删改查基本操作
 
1编写接口
2编写对应mapper中的sql语句
id 为对应namespace中的方法名  resultType 为sql语句执行的返回值 parameterType为参数类型
3测试 
注意增删改需要提交事务    sqlsession.commit();
 
万能map
 
假设我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map。
map传递参数 直接在sql中取出key即可
对象传递参数,直接在sql中取对象的属性即可
多个参数用map,或者注解
 
模糊查询
java代码执行的时候,传递通配符 % %
在sql拼接中使用通配符
 
配置解析
1 核心配置文件
mybatis-config.xml
掌握 properties settings typeAliases
environments mappers
 
2 配置环境
Mybatis 可以适配成多个环境
但每个SqlSessionFactory实例只能选择一种环境
Mybatis 默认的事务管理器就是jdbc 连接池pooled
3 属性 properties
编写一个配置文件(db.properties)
 
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mall?useSSL=true&useUnicode=true&characterEncodeing=UTF-8
username=root
password=199908
 
 
在核心配置文件中映入(在所有xml中,所有的标签都可以规定其顺序)
 
<properties resource="db.properties">
    <property name="username" value="root"/>
    <property name="password" value="199908"/>
</properties>
 
可以直接引入外部文件
可以加一些属性配置
如果两个文件有同一个字段,优先使用外部配置文件的
 
4 类型别名 typeAliases
类型别名是为java类设置一个短的名字
存在的意义仅在于用来减少类完全限定名的冗余
 
<typeAliases>
    <typeAlias type="com.qlu.pojo.User" alias="User"/>
</typeAliases>
 
 
也可以指定一个包名,Mybatis会在包名下面搜索需要的java bean,比如扫描实体类的包。他的默认别名就为这个类的类名,首字母小写。
在实体类比较少的时候用第一种
第一种可以diy别名,第二种不行 ,如果非要改,需要在实习类上增加注解。
 
5 设置 settings
6 映射器 mappers
方式一 推荐
 
<!-- 使用相对于类路径的资源引用 --><mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/></mappers>
 
 
 
方式二 使用class文件绑定注册
 
<!-- 使用映射器接口实现类的完全限定类名 --><mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/></mappers>
 
 
注意点  接口和他的Mapper配置文件必须同名
        接口和它的Mapper配置文件必须在同一个包下,规范化
方式三 使用扫描包进行注入绑定
<mappers>
  <package name="com.qlu.dao"/></mappers>
 
7 生命周期和作用域
SqlSessionFactory
一旦创建了SqlSessionFactory 就不再需要他了
局部变量
SqlSessionFactory
    可以理解为 数据库连接池
     SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 因此 SqlSessionFactory 的最佳作用域是应用作用域。
最简单的就是使用单例模式 或者静态单例模式
 SqlSession
连接到连接池的一个请求
SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
 
分页
SELECT * from user limit 0,4;
从第0个开始,每页显示两个
 
使用mybatis实现分页,核心SQL(limit)
Rowbounds 分页   利用java代码实现分页
    1.接口
    2.mapper.xml
    3.测试
分页插件 PageHelper
 
使用注解开发
  
    面向接口编程
注解开发不适用于过于复杂的sql语句
使用注解时需要在核心配置文件中绑定接口
测试:本质是反射机制  底层:动态管理
 
 
 
mybatis 详细执行流程
 
 
CRUD  
 
我们可以在工具类utils创建的时候实现自动提交事务
public static sqlSession getsqlSession(){
    return sqlSessionFactory.openSession(true);
}
 
 
 
编写接口,增加注解
测试
我们必须要把接口注册绑定到核心配置文件
关于@param注解(以后回顾)
 
 
Lombok使用
1.在idea中安装Lombok插件
2.在项目中导入lombok的包
3.加注解实现某些方法
例如@Data  自动生成 无参构造 get set方法 toString,hashcode,equals
 
复杂查询环境搭建
 
一对多,多对一关系(集合与关联)
外键
测试环境搭建 
1.导入lombok
2.新建实体类
3.建立mapper接口
4.建立mapper.xml文件
5.在核心配置文件中绑定注册我们的Mapper接口或者文件
6.测试查询能否成功 
 
mysql 多对一查询方式结果集映射resultMap<> association(关联)  子查询  联表查询
一对多处理 结果集映射resultMap<> collection(集合)
javaType 用来指定实体类中属性的类型
ofType 用来指定映射到List或者集合中的pojo类型,泛型中的约束类型
 
按照结果嵌套处理
按照查询嵌套处理
 
注意:保证SQL的可读性,尽量保证通俗易懂
注意一对多,多对一中,属性和字段的问题
排查错误 建议用log4j
 
面试高频 mysql引擎  
InnoDB底层原理
索引  索引优化
 
动态SQL
 
动态sql就是根据不同的条件生成不同的sql语句
sql拼接 重要
 
缓存
一级缓存  sqlsession
二级缓存
缓存原理
 
自定义缓存 ehcache
 
posted @ 2021-02-07 11:46  LEeFuc  阅读(38)  评论(0编辑  收藏  举报