Mybatis学习周报总结

学习Mybatis的周报

在过去的一周里,我们在飞思学习和掌握Mybatis这一优秀的持久层框架。通过谭老师的两周课程,我也有很大的收获。以下是本周的学习总结和收获:

一:Mybatis概述:

MyBatis,全称为My Batis SQL Mapper,是一个优秀的持久层框架,它的设计思想是将SQL语句与Java方法进行映射,从而实现数据库操作的简化和灵活性。相比于传统的JDBC编程,使用MyBatis可以大幅度减少重复的样板代码,提高开发效率和代码可读性。该框架的核心思想是将数据库操作抽象为一个个Mapper接口,开发者只需定义接口,并在XML配置文件中编写对应的SQL语句,MyBatis会自动将二者进行关联。这种分离的设计使得SQL语句与Java代码分离,方便维护和修改。另外,MyBatis还提供了丰富的功能和特性,如动态SQL、参数映射、结果集映射、缓存机制等,可以满足各种复杂的数据库操作需求。同时,MyBatis与Spring等常用框架无缝集成,使得在企业级应用中的使用更加便捷。总的来说,MyBatis以其简洁的设计、灵活的配置和强大的功能成为Java持久层框架中的佼佼者,为开发者提供了一种优雅而高效的数据库操作解决方法。


二:怎么使用Mabatis?

1. 添加依赖: 在pom.xml中加入MyBatis的依赖:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

2.编写MyBatis全局配置文件(位于项目资源目录下):

<?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>
    <!-- 与Spring整合后,environments配置将被废除 -->
    <environments default="development">
        <!-- 可配置多个环境 -->
        <environment id="development">
            <!-- 使用JDBC事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/userdb" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
</configuration>

3.编写Mapper映射文件(以User类为例):

<?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="test">
    <select id="findUserById" parameterType="int" resultType="org.csmf.mybatis.entity.User">
        select * from t_user where id = #{id}
    </select>
</mapper>

4.将Mapper加入到全局配置文件中:

<mappers>
    <mapper resource="UserMapper.xml"/>
</mappers>

5.在代码中使用:

首先通过SqlSessionFactoryBuilder创建SqlSessionFactory工厂类,然后通过SqlSessionFactoryopenSession方法获取SqlSession对象,最后通过SqlSession的方法执行Mapper中配置的SQL语句。

InputStream inputStream = null;
try {
    // 加载MyBatis的主配置文件
    inputStream = Resources.getResourceAsStream("mybatis-config.xml");
} catch (IOException e) {
    e.printStackTrace();
}

// 通过MyBatis的主配置文件得到SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// 通过SqlSessionFactory得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();

// 通过SqlSession操作数据库
// selectOne():
// 第一个参数是Statement的Id,即SQL映射文件中的<select>标签的Id
// 第二个参数是输入参数
User user = sqlSession.selectOne("findUserById", 2);

MyBatis是一个非常方便的持久层框架,它的确简化了与数据库的交互过程,让开发者能够更专注于SQL本身,而无需处理繁琐的JDBC代码。

在你提供的使用方法中,重点说明了MyBatis的配置和使用步骤,对于初学者来说十分有用。另外,我可以补充一些关于MyBatis的重点:

重点补充说明

  1. #{}${}的区别

    • #{}用于占位符,在SQL语句中可以安全地传递参数,MyBatis会将参数进行预编译,防止SQL注入攻击,因此推荐使用。
    • ${}用于字符串替换,在SQL语句中会直接替换为参数值,存在SQL注入的风险,因此仅在需要动态拼接SQL的场景下使用,并且需要注意防范SQL注入。
  2. selectOne()selectList()的区别

    • selectOne()用于查询单个结果,当查询结果超过一个时会抛出异常,适用于期望结果唯一的场景。
    • selectList()用于查询多个结果,没有结果限制,适用于返回多行数据的情况。
  3. 事务管理

    • MyBatis可以与Spring等框架整合,以便更好地管理事务。在配置中,你可以选择不同的事务管理器类型,如JDBC、MANAGED等,以满足项目的需求。
  4. 动态SQL

    • MyBatis提供了丰富的动态SQL功能,可以根据条件动态生成SQL语句,例如<if>, <choose>, <when>, <otherwise>, <foreach>等标签,帮助你构建灵活的SQL语句。
  5. 缓存机制

    • MyBatis支持一级缓存和二级缓存,默认情况下一级缓存是开启的,可以通过配置来启用或禁用。二级缓存是跨SqlSession的缓存,需要手动配置开启,并且需要注意缓存的更新策略以及缓存的失效时机,以避免数据不一致的问题。
相关推荐
油丶酸萝卜别吃1 小时前
MyBatis中XML文件的模板
xml·数据库·mybatis
菠萝咕噜肉i2 小时前
MyBatis是什么?为什么有全自动ORM框架还是MyBatis比较受欢迎?
java·mybatis·框架·半自动
向阳12182 小时前
mybatis 缓存
java·缓存·mybatis
一只淡水鱼663 小时前
【mybatis】详解 # 和 $ 的区别,两者分别适用于哪种场景,使用 $ 不当会造成什么影响
sql·spring·mybatis·sql注入
秋恬意3 小时前
IBatis和MyBatis在细节上的不同有哪些
java·mybatis
赖龙4 小时前
springboot restful mybatis连接mysql返回日期格式不对
spring boot·mybatis·restful
皓木.6 小时前
苍穹外卖——准备工作
java·数据库·mybatis
憶巷8 小时前
MyBatis中动态SQL执行原理
java·sql·mybatis
一只淡水鱼668 小时前
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
java·数据库·spring·mybatis
秋恬意1 天前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis