MyBatis配置文件解析及优化

配置文件解析
  • 核心配置文件
<configuration>
    <!-- enviromnents环境配置,mybatis可以配置多个环境
         default指向默认的环境
         每个SqlSessionFactory对应一个环境environment
    -->
    <environments default="development">
        <environment id="development">
            <!-- type为事务管理类型
                 JDBC 和 MANAGED
             -->
            <transactionManager type="JDBC" />
            <!-- 数据源类型type
                 UNPOOLED - 在每次需要资源时,简单的打开和关闭连接(较为浪费资源)
                 POOLED - 实现了缓存JDBC连接对象,用于避免每次创建新的数据库连接时都初始化和进行验证,加快程序响应速度
                          并发web通常都使用这种方法
                 JNDI - 与应用服务器配合使用
             -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test" />
                <property name="username" value="root" />
                <property name="password" value="chenyu123" />
            </dataSource>
        </environment>
    </environments>

    <!-- 定义映射sql语句的文件 -->
    <mappers>
        <!-- 路径使用'/' -->
        <mapper resource="com/eric/entity/user.mapper.xml" />
    </mappers>
</configuration>
  • <environments>: 环境配置,mybatis可以配置多个环境
    • default参数指向默认的环境
    • <environment>: 配置具体的环境
      • 每个SqlSessionFactory对应一个environment
      • <transactionManager>: 事务管理配置
        • type: 有JDBC和MANGED
      • <dataSource>: 数据源配置
        • type:定义数据源实现类型
          • UNPOOLED - 在每次需要资源时,简单的打开和关闭连接(较为浪费资源)
          • POOLED - 实现了缓存JDBC连接对象,用于避免每次创建新的数据库连接时都初始化和进行验证,加快程序响应速度,并发web通常都使用这种方法
          • JNDI - 与应用服务器配合使用
        • <property>: 数据库连接的验证参数
  • <mappers>: 配置sql语句的映射文件

  • Mapper配置文件

<!-- namespace - 命名空间,为了防止sql语句的id重名
     命名规则 - 对应实体类的包名 + 类名/包名 + mapper文件名
-->
<mapper namespace="com.eric.entity.UserMapper">
    <!-- 每个操作的id需要唯一
         patameterType - sql语句参数类型
         resultType - 返回结果类型
         useGeneratedKeys="true" - 使用自增主键
     -->

    <!-- 查询所有用户 -->
    <select id="selectAll" resultType="com.eric.entity.User">
        select * from user
    </select>

    <!-- 查询单个用户 -->
    <select id="selectUser" resultType="com.eric.entity.User">
        select * from user where id = #{id}
    </select>

    <!-- 添加用户 -->
    <insert id="addUser" parameterType="com.eric.entity.User" useGeneratedKeys="true">
        insert into user (name, pwd) values(#{name}, #{pwd})
        <!-- 参数名称和对象参数名称一致 -->
    </insert>

    <!-- 更新用户 -->
    <update id="updateUser" parameterType="com.eric.entity.User">
        update user set name=#{name}, pwd=#{pwd} where id=#{id}  
    </update>

    <!-- 删除用户 -->
    <delete id="deleteUser">
        delete from user where id=#{id}
    </delete>
</mapper>
  • <mapper>: 配置sql语句的映射
    • namespace:
      • 命名空间,为了防止sql语句的id重名
      • 命名规则: 对应实体类的包名 + 类名/包名 + mapper文件名
    • <操作名称>:
      • 定义不同操作的sql语句,每个操作的id需要唯一
      • patameterType: sql语句参数类型
      • resultType: 返回结果类型
      • useGeneratedKeys="true": 使用自增主键

执行流程
  • 读取核心配置文件,创建SqlSessionFactory

    String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    • 根据resource的核心配置文件,创建相应的SqlSessionFactory
  • 获取SqlSession类

    • 通过SqlSessionFactory可以获得SqlSession对象
    • 包含对数据库的一系列操作
  • 执行sql语句

    • SqlSession类通过mapper文件中的id找到对应的sql语句,并且执行

优化配置文件
  • 导入properties配置文件

    • 在src下创建db.properties文件

      driver=com.mysql.cj.jdbc.Driver
      url=jdbc:mysql://localhost:3306/test
      username=root
      password=chenyu123
    • 在核心配置文件中添加<properties>

      <properties resource="db.properties"/>
    • 数据源中的<property>可以调用db.properties文件中的数据

      <dataSource type="POOLED">
          <property name="driver" value="${driver}" />
          <property name="url" value="${url}" />
          <property name="username" value="${username}" />
          <property name="password" value="${password}" />
      </dataSource>
    • 别名优化

      <typeAliases>
          <!-- 为指定的类型设定别名
               使得在mapper映射文件中可以简化引用
           -->
          <typeAlias type="com.eric.entity.User" alias="User"/>
      
          <!-- 为包下所有类指定别名
               默认别名:对应的类名
           -->
          <package name="com.eric.entity"/>
      </typeAliases>
      • 在mapper文件中可以直接引用别名

猜你喜欢

转载自blog.csdn.net/weixin_40683252/article/details/81084165