Mybatis总结

Mybatis总结

这几周由于课程有点多,一直没来的及总结最近学习完的mybatis框架,今天抽个时间得总结了:

mybatis框架是对应的是持久层框架,能够简化数据库相关的java代码,它支持自定义SQL、存储过程以及高级映射。

mybatis框架配置支持两个方式:

​ 1.xml (值得注意的一点是,使用xml进行映射配置的时候,需要和IUserDao接口类具有相同的目录结构)

​ 2.注解(使用注解也得在著配置文件中指定带有注解的dao接口所在位置)

在mybatis的查询过程中,通过在SqlMapConfig.xml中配置连接条件,进行数据库的连接,可以将数据库相关的连接信息,写到jdbcconfig.properties中,然后在SqlMapConfig中引入该文件进行连接。

<!--mybatis的主配置文件-->
<configuration>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源(连接池)-->
            <dataSource type="POOLED">
                <!--配置连接数据库的4个基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

这是最基本的数据库连接配置,若是用xml方式进行配置还需要指定映射文件的位置。

都配置好之后,只需要在IUserDao接口类中定义数据库相关方法,就可以进行简单的数据库代码测试了。

		//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();

相较于传统dao层的开发减少了我们开发人员的工作量。在数据库查询过程中我们可以将查询条件包装成类传入参数(一般在综合查询中使用)。

以上就是最简单的mybatis框架配置。(忽然想起来一个坑:就是在配置SqlMapConfig文件的时候,标签的位置要求是根据引用的dtd文件中的标签顺序进行使用,之前我学习的时候就是将typeAliases标签放到了environments标签之后,就一直报错)

然后就是基本的CRUD操作,网上去搜博客能够搜到老多了,这就不展示代码了(主要还是我菜。。。)

当然也可以通过工厂模式,写具体的实现类达到同样的效果,那么问题来了,我们不是要简化操作吗。(所以你可以写具体实现类,来锻炼你的代码能力,然而使用框架的时候,这些代码可能是用不到的)

当我们在进行数据库操作时,不可能永远都是进行单表操作,更多的时候就是进行多表操作,此时就涉及到了:

​ 1.一对一关系操作;

​ 2.一对多关系操作,在一对多关系中:从表实体应该包含一个主表实体的对象引用

​ 主表实体应该包含从表实体的集合引用

​ 3.多对多关系操作

在对应的映射配置文件中配置相应的接收结果类型(resultMap中association(一对一)标签和collection(一对多)标签)

继续学习mybatis时,会接触到mybatis的延迟加载

什么是延迟加载呢?

这里只是简单的解释一下,就是查询多表的时候,如果只是查询其中的一个表就能够满足用户要求,那么就只查询该单表,用户有需要的时候才去查询相关联的表信息,这样便会极大的提高数据库性能,因为单表查询比多表查询快。

<!--配置参数-->
    <settings>
        <!-- 开启mybatis支持延迟加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="false"></setting>
    </settings>

这里给出了SqlMapConfig文件中的开启延迟加载信息的配置,由于我也是初学mybatis,对这部分内容无论是运用还是理解上可能都还有很多欠缺的地方,等以后用的多了,理解也更深了,倒回来再说一说这方面的内容。

紧接着就是mybatis的缓存机制:

(当时学习的时候这一块我学的相对不是很明白,所以找了一些博客来帮助我理解,这里我选了一篇对我理解帮助较大的博客放到这里,希望也能帮助你们理解mybatis一级和二级缓存机制)

https://blog.csdn.net/u012373815/article/details/47069223

里边有非常详细的解释,还聊到了其他分布式缓存框架,拓展了其他知识。

这里给出最简单的开启二级缓存的配置

//SqlMapConfig.xml中的配置
<settings>
        <setting name="cacheEnabled" value="trues"/>
</settings>

//对应映射文件的配置
<!--开启user支持二级缓存-->
<cache/>

这里有一个坑点,也是我前面提过的就是注意标签的配置顺序,我之前写的时候就是不清楚,然后将setting的配置放到了typeAliases标签的后面,xml里边并不会提示,但是程序就是会报错,后来找了很多博客都不知道原因,才想起去,重新写了一遍,发现又不报错了,才注意到是标签位置的原因,这时候才想起去看dtd文件的约束,所以刚学习的小伙伴可以注意一下。

学习mybatis的坑点并不多,如果只是想简单的使用,而不去了解原理其实学起来会很快的,但是还是建议学习的小伙伴呢能够去深层次的学习一下原理,比如SqlSession的一些具体实现,这样会有助于我们的理解,同时有助于我们写更深层次的代码。

以上基本就是我学习mybatis中了解到的知识,希望和大家共同进步,fighting!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值