Mybatis的两种配置方法和知识

一 环境准备

  1. IDEA 2020.2.3
  2. JKD14
  3. Maven工程
  4. Mysql数据库
mysql> CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime default NULL COMMENT '生日',
  `sex` char(1) default NULL COMMENT '性别',
  `address` varchar(256) default NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (23,'波波','2020-02-27 17:47:08','男','北京'),(42,'小波','2018-03-02 15:09:37','女','北京海淀'),(43,'大波','2018-03-04 11:34:34','女','北京中关村');

二 MyBatis 框架概述

mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,
而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis通过 xml 或注解的方式将要执行的各种statement配置起来,并通过java对象和statement 中
sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并
返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc进行了封装,屏蔽了 jdbc api 底层访问细节,使我
们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

三 环境搭建(基于映射)

  1. 第一步:创建maven工程并导入坐标
  2. 第二步:创建实体类和dao的接口
  3. 第三步:创建Mybatis的主配置文件 SqlMapConifg.xml(主要用来配置数据库 和映射配置文件找到我们的dao接口)
  4. 第四步:创建映射配置文件 IUserDao.xml (主要用来实现关于User这个实现类的SQL语句)
    在这里插入图片描述

注意事项

  1. mybatis的映射配置文件位置必须和dao接口的包结构相同
  2. 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
  3. 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
  4. 创建的实体类User中的成员变量名应与数据库中的表头一致。

测试

public static void main(String[] args) throws Exception {
        /**
         * 入门案例
         * @param args
         */
            //1.读取配置文件
            InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
            //2.创建SqlSessionFactory工厂
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(in);
            //3.使用工厂生产SqlSession对象
            SqlSession session = factory.openSession();
            //4.使用SqlSession创建Dao接口的代理对象
            IUserDao userDao = session.getMapper(IUserDao.class);
            //5.使用代理对象执行方法
            List<User> users = userDao.findAll();
            for(User user : users){
                System.out.println(user);
            }
            //6.释放资源
            session.close();
            in.close();
    }

在这里插入图片描述

结果
在这里插入图片描述

四 环境搭建(基于注解)

删除IUsreDao.xml 并且在dao层接口的方法上面加注解

/*
 * @author  bobo
 * @date  2020/11/7 8:59
 * @Email:1498244906@qq.com
 */
public interface IUserDao {

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

}

为什么可以这么写:

<mapper namespace="bobo.mybatis.dao.IUserDao">
    <!--查询user表中的所有信息 -->
    <select id="findAll" resultType="bobo.mybatis.pojo.User">
        select  * from user
    </select>

</mapper>

namespce 、id 这两个属性是为了找到是哪个dao层中哪个接口的哪个方法。我们的注解就写在方法上面,所以就不用在写了。
resultType:确定返回值类型 List findAll() 中已经声明 了返回值是一个Uers类的集合所以不用再声明了;
所以只需要注解写入SQL语句就可以了。

五 补充

连接池:
我们在实际开发中都会使用连接池。
因为它可以减少我们获取连接所消耗的时间。
mybatis连接池3种方式的配置:

  • 配置的位置:

     	    主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。
    
  • type属性的取值:

     	POOLED	 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
     	UNPOOLED 采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。
     	JNDI	 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。
     		              注意:如果不是web或者maven的war工程,是不能使用的。
    

Mybatis中的延迟加载

  • 什么是延迟加载

     在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)
    
  • 什么是立即加载

     不管用不用,只要一调用方法,马上发起查询。
    

    在对应的四种表关系中:一对多,多对一,一对一,多对多
    一对多,多对多:通常情况下我们都是采用延迟加载。
    多对一,一对一:通常情况下我们都是采用立即加载。

Mybatis中的缓存

  • 什么是缓存

     存在于内存中的临时数据。
    
  • 为什么使用缓存

     减少和数据库的交互次数,提高执行效率。
    
  • 什么样的数据能使用缓存,什么样的数据不能使用

     适用于缓存:
     	经常查询并且不经常改变的。
     	数据的正确与否对最终结果影响不大的。
     不适用于缓存:
     	经常改变的数据
     	数据的正确与否对最终结果影响很大的。
     	例如:商品的库存,银行的汇率,股市的牌价。
    
  • 一级缓存:

     	它指的是Mybatis中SqlSession对象的缓存。
     	当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。
     	该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中
     	查询是否有,有的话直接拿出来用。
     	当SqlSession对象消失时,mybatis的一级缓存也就消失了。
    
  • 二级缓存:

     	它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
     	二级缓存的使用步骤:
     		第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
     		第二步:让当前的映射文件支持二级缓存(在IUserDao.xml中配置)
     		第三步:让当前的操作支持二级缓存(在select标签中配置)
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰溪0502

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值