mybatis(idea版)18讲

mybatis(idea版)

文件目录:

  • 1.mybatis简介
  • 2.基本增删改查(CRUD)
  • 3.map
  • 4.模糊查询
  • 5.config.xml配置解析
  • 6.生命周期和作用域
  • 7.解决字段名与属性名不一致的问题
  • 8.日志
  • 9.log4j
  • 10.分页
  • 11.RowBounds分页
  • 12.注解开发
  • 13.注解版CRUD(增删改查)
  • 14.Lombok
  • 15.复杂处理(多对1和一对多)
  • 16.动态SQL
  • 17.sql片段
  • 18.缓存

1.mybatis简介

在这里插入图片描述
①数据库准备

CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user`(
  `id` INT(20) NOT NULL PRIMARY KEY,
  `name` VARCHAR(30) DEFAULT NULL,
  `pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user`(`id`,`name`,`pwd`) VALUES 
(1,'健宝','123456'),
(2,'张三','123456'),
(3,'李四','123890')

②.导入依赖

<dependencies>
    <!-- mysql驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <!-- mybatis -->
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <!-- junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <!-- lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.10</version>
    </dependency>
</dependencies>

③.config.xml

<?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="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

④工具类

public class MyBatisUtils {
    // 创建SqlSessionFactory实例
    private static SqlSessionFactory sqlSessionFactory;
    // 获取SqlSessionFactory实例
    static{
        try {
            // 获取配置文件mybatis-config.xml并定义为一个字符串
            String resource = "mybatis-config.xml";
            // 将这个字符串resource写入流中
            InputStream inputStream = Resources.getResourceAsStream(resource);
            // 通过SqlSessionFactoryBuilder的build方法创建sqlSessionFactory实例
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 获得SqlSession的实例
    // SqlSession完全包含了面向数据库执行SQL命令所需的所有方法。
    public static SqlSession getSqlSession(){
        // 通过sqlSessionFactory的openSession方法创建sqlSession实例
        return sqlSessionFactory.openSession();
    }
}

⑤.实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private int id;
    private String name;
    private String pwd;
}

⑥Mapper接口

public interface UserMapper {
    List<User> getUserList();
}

⑦Mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hxxy.mapper.UserMapper">
    <select id="getUserList" resultType="com.hxxy.entity.User">
       select * from mybatis.user
   </select>
</mapper>

⑧测试类

public class UserMapperTest {
    @Test
    public void test(){
        // 获得sqlSession对象
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        // 执行sql
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        // 关闭sqlSession
        sqlSession.close();
    }
}

在这里插入图片描述
在这里插入图片描述

2.基本增删改查

  • select
  • insert
  • update
  • delete

1.select
在这里插入图片描述
2.insert
在这里插入图片描述

3.update
在这里插入图片描述

4.delete

在这里插入图片描述

3.map

在这里插入图片描述

4.模糊查询

在这里插入图片描述

5.配置解析

config.xml

  • 属性
  • 起别名
  • settings
  • mappers

在这里插入图片描述
①属性
在这里插入图片描述

②.起别名

第一种方式:
在这里插入图片描述

第二种方式:
在这里插入图片描述
③settings

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
④.mappers
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.生命周期和作用域

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.解决属性名和字段名不一致的问题

  • 起别名
  • resultMap

在这里插入图片描述

在这里插入图片描述

8.日志

在这里插入图片描述
在这里插入图片描述

9.Log4j

在这里插入图片描述
1.导入依赖

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2.log4j.properties

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file
#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/jian.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

3、配置日志工厂

<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>

在这里插入图片描述
在这里插入图片描述

注意:如果日志文件打不开,可以点击file–>setting–>Editor–>File Types–>选择文本Text–>添加后缀.log

在这里插入图片描述
在这里插入图片描述

10.分页

在这里插入图片描述

11.RowBounds分页

在这里插入图片描述
在这里插入图片描述

12.注解开发

在这里插入图片描述
在这里插入图片描述
重点掌握mybatis的执行流程
在这里插入图片描述

13.注解版CRUD(增删改查)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

14.Lombok(用注解简化实体类)

1.安装插件
在这里插入图片描述
2.在项目里导入Lombok jar包

 //在pom.xml里配置
 <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>

3.在实体类里配置lombok注解

在这里插入图片描述

15.复杂处理(多对1和1对多)

数据库准备

CREATE TABLE `teacher` (
  `id` INT(10) NOT NULL,
  `name` VARCHAR(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师'); 
CREATE TABLE `student` (
  `id` INT(10) NOT NULL,
  `name` VARCHAR(30) DEFAULT NULL,
  `tid` INT(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fktid` (`tid`),
  CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1'); 
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1'); 
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1'); 
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1'); 
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15-1(多对1)

  • 按照查询嵌套处理
  • 按照结果嵌套处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在mysql多对1的查询中主要通过子查询和联表查询。

15-2 (一对多(复杂处理))

  • 按照查询嵌套处理
  • 按照结果查询处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

16.动态SQL

在这里插入图片描述
什么是动态SQL:动态SQL就是指根据不同的条件生成不同的SQL语句
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法
在这里插入图片描述
在这里插入图片描述

  • IF
  • where
  • choose(when,otherwise)
  • set
  • trim(where,set)
  • forEach
    在这里插入图片描述
    where
    在这里插入图片描述
    choose(when,otherwise)

在这里插入图片描述
set
在这里插入图片描述

forEach
在这里插入图片描述
测试:

public class MyTest {
    @Test
    public void queryBlog(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        Map map = new HashMap();
        ArrayList<Integer> ids = new ArrayList<Integer>();
        ids.add(1);
        ids.add(2);
        ids.add(3);
        map.put("ids",ids);
        List<Blog> blogs = mapper.queryBlogForeach(map);
        for (Blog blog : blogs) {
            System.out.println(blog);
        }
        sqlSession.close();
    }
}

17.sql片段

在这里插入图片描述

18.缓存

  • 一级缓存
  • 二级缓存
  • 缓存原理
  • 自定义缓存

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.一级缓存
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
2.二级缓存
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.缓存原理
在这里插入图片描述
4.自定义缓存
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         updateCheck="false">
    <!--
       diskStore:为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。参数解释如下:
       user.home – 用户主目录
       user.dir  – 用户当前工作目录
       java.io.tmpdir – 默认临时文件路径
     -->
    <diskStore path="./tmpdir/Tmp_EhCache"/>
    <defaultCache
            eternal="false"
            maxElementsInMemory="10000"
            overflowToDisk="false"
            diskPersistent="false"
            timeToIdleSeconds="1800"
            timeToLiveSeconds="259200"
            memoryStoreEvictionPolicy="LRU"/>
    <cache
            name="cloud_user"
            eternal="false"
            maxElementsInMemory="5000"
            overflowToDisk="false"
            diskPersistent="false"
            timeToIdleSeconds="1800"
            timeToLiveSeconds="1800"
            memoryStoreEvictionPolicy="LRU"/>
    <!--
       defaultCache:默认缓存策略,当ehcache找不到定义的缓存时,则使用这个缓存策略。只能定义一个。
     -->
    <!--
      name:缓存名称。
      maxElementsInMemory:缓存最大数目
      maxElementsOnDisk:硬盘最大缓存个数。
      eternal:对象是否永久有效,一但设置了,timeout将不起作用。
      overflowToDisk:是否保存到磁盘,当系统当机时
      timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
      timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
      diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
      diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
      diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
      memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
      clearOnFlush:内存数量最大时是否清除。
      memoryStoreEvictionPolicy:可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。
      FIFO,first in first out,这个是大家最熟的,先进先出。
      LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。
      LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
   -->
</ehcache>

在这里插入图片描述
看到这里,mybatis的基础相信你已经掌握了,之后会更新spring的思维导图还有笔记整理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值