MyBatis

0.maven依赖 和build配置 解析java目录下的xml

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
        </dependency>
  
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

1.entity dao接口 和对应的mapper(对应接口信息,对应方法名,返回的entity,sql语句)

2.配置文件包含

  • 引入外部文件(可选)
  • 设置(日志实现)
  • 类型别名
  • 数据库连接信息
  • 注册每个entity对应mapper
    4.getSession
    static SqlSession getSession() {
        try {
            return new SqlSessionFactoryBuilder()
                    .build(Resources.getResourceAsStream("mybatis-config.xml"))
                    .openSession();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

4.使用

        SqlSession session = MybatisUtils.getSession();

       
        UserDao userDao = session.getMapper(UserDao.class);
        List<User> allUsers = userDao.getAllUsers();


        for (User user : allUsers) {
            System.out.println(user);
        }
        session.close();

注意:
1.万一数据库字段名 跟entity字段名不一致 使用resultmap ,将返回的不匹配的数据库字段映射成对应的entity字段名,从而返回一个entity
2.接口对应的mapper.xml 可以由在接口上加注解代替,注意注册接口mapper
反射 实现的动态代理

    @Select("select * from user ")
    List<User> getAllUsers();

多对一 表 查询 1.子查询 2.连表查询

image.png
image.png

sql片段 应用

image.png

缓存

一级缓存: session 级别 DML会刷新缓存,回话关闭,一级缓存才会保存到二级缓存中
二级缓存 mapper级别 对应entity需要序列化 缓存保存在map里

<cache eviction="LRU" flushInterval="6000" size="512" readOnly="true"

缓存策略 :
LRU 默认,最近最少使用 移除长时间不被使用的
FIFO, 先进先出, 移除先进来的


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容