MyBatis进阶自己总结

MyBatis进阶

MyBatis核心配置文件小结:

核心配置文件中包含了MyBatis的核心设置和属性信息如数据库如数据库的连接、事务、连接池信息等。

<configuration>

    <!--引入数据库连接的配置文件-->
    <properties resource="jdbc.properties"/>
    
    <!--起别名,可以指定实体类alias起别名,也可以直接指定包(默认类名为别名)-->
    <typeAliases>
        <typeAlias type="实体类全限定名" alias="student"/>
        <!--<package name="包路径"/>-->
    </typeAliases>

    <!--environments配置数据库环境,环境可以有多个。default属性指定使用的是哪个-->
    <environments default="mysql">
        <!--environment配置数据库环境  id属性唯一标识-->
        <environment id="mysql">
            <!-- transactionManager事务管理。  type属性,采用JDBC默认的事务-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- dataSource数据源信息   type属性 连接池-->
            <dataSource type="POOLED">
                <!-- property获取数据库连接的配置信息 -->
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>

    <!-- mappers引入映射配置文件 -->
    <mappers>
        <!-- mapper 引入指定的映射配置文件   resource属性指定映射配置文件的名称 -->
        <mapper resource="映射文件全限定名"/>
    </mappers>
</configuration>
  • :核心根标签。

  • :引入数据库连接信息配置文件标签。

  • :起别名标签。

  • :配置数据库环境标签。

  • :配置数据库信息标签。

  • :事务管理标签。

  • :数据源标签。

  • :数据库连接信息标签。

  • :引入映射配置文件标签。

MyBatis实现接口的动态代理
//接口
public interface UserMapper {
    public abstract List<User> selectAll();
}
//映射配置文件
<mapper namespace="com.it.Testo1.mapper.UserMapper">

    <sql id="select">select * from User</sql>
    <select id="selectAll" resultType="user">
        <include refid="select"/>
    </select>
    
</mapper>
//核心配置文件中相关信息
 <typeAliases>
 //实体类定义别名
        <package name="com.it.bean"/>
    </typeAliases>
    
    //导入实体类配置映射文件
    <mappers>
        <mapper resource="com/it/Testo1/xml/UserMapper.xml"/>
    </mappers>
//测试类
public void selectAll() throws IOException {
        InputStream inputStream=null;
        SqlSessionFactory sqlSessionFactory=null;

    //读取核心配置文件
        inputStream = Resources.getResourceAsStream("MyBatisConfig.xml");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
    //获取代理对象
        StudentMapper mapper = sqlSession.getMapper(UserMapper.class);
    //执行查询所有方法
        List<User> users = mapper.selectAll();
        for (User u : users) {
            System.out.println(u);
        }
    }

动态代理开发模式分析:

  1. 动态代理对象如何生成:我们只需要编写一个接口,不写实现类,我们通过 getMapper() 方法最终获取到代理对象,然后执行功能,而这个代理对象正是 MyBatis 使用了 JDK 的动态代理技术,帮助我们生成了代理实现类对象。从而可以进行相关操作。
  2. 生成的代理对象方法如何执行:动态代理实现类对象在执行方法的时候最终调mapperMethod.execute() 方法,这个方法中通过 switch 语句根据操作类型来判断是新增、修改、删除、查询操作,最后一步回到了 MyBatis 最原生的 SqlSession 方式来执行增删改查。底层原理还是实现了JDBC的增删改查操作。

接口代理方式小结

  • 接口代理方式可以让我们只编写接口即可,而实现类对象由 MyBatis 生成。

  • 实现规则

  1. 映射配置文件中的名称空间必须和 Dao 层接口的全类名相同。
  2. 映射配置文件中的增删改查标签的 id 属性必须和 Dao 层接口的方法名相同。
  3. 映射配置文件中的增删改查标签的 parameterType 属性必须和 Dao 层接口方法的参数相同。
  4. 映射配置文件中的增删改查标签的 resultType 属性必须和 Dao 层接口方法的返回值相同。
  • 获取动态代理对象 方法

SqlSession 功能类中的 getMapper() 方法。

MyBatis映射配置文件-动态SQL

多条件查询:

  • 动态SQL标签

    1. :条件判断标签
    2. :循环遍历标签
    3. :条件标签,如果有动态条件,则使用该标签替代where关键字。
  • ​ 查询条件

    满足test中条件判断则拼接if标签中查询条件

  • ​ 获取参数

    • 属性
    1. collection:参数容器类型,(list-集合,array-数组)。

    2. open:开始的 SQL 语句。

    3. close:结束的 SQL 语句。

    4. item:参数变量名。

    5. separator:分隔符。

    SQL 片段抽取

    • 我们可以将一些重复性的 SQL 语句进行抽取,以达到复用的效果。

    • :抽取 SQL 语句标签。

    • 抽取的 SQL 语句

      引用:

    • :引入 SQL 片段标签。

动态SQL小结

  • 动态 SQL 指的就是 SQL 语句可以根据条件或者参数的不同进行动态的变化。

  • :条件标签。

  • :条件判断的标签。

  • :循环遍历的标签。

  • :抽取 SQL 片段的标签。

  • :引入 SQL 片段的标签。

猜你喜欢

转载自blog.csdn.net/futurism_/article/details/106846700