MyBatis学习1--基础

本文详细介绍了MyBatis作为持久层的框架,如何通过XML配置文件或注解来简化JDBC代码,以及其配置文件的组成和作用,包括SqlMapConfig.xml和SqlMap.xml的用途,展示了MyBatis实例的构建过程,从SqlSessionFactoryBuilder到SqlSessionFactory再到SqlSession的使用,最终执行映射的SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis的作用
MyBatis是持久层的框架,封装了几乎所有的JDBC代码,使用简单的XML或注解配置和定义映射关系。


MyBatis的体系结构

  1. 加载配置
    一种是XML配置文件,一种是Java代码的注解。将SQL的配置信息加载成一个个的MappedStatement对象
  2. SQL解析
  3. SQL执行
  4. 结果映射 (可以转换成HasjMap,javaBean或基本数据类型)

MyBatis的配置文件

  1. SqlMapConfig.xml(1个)
    主配置文件,用于指定数据库链接参数和框架参数
  2. SqlMap.xml(n个)
    映射定义文件,用于定义SQL语句和映射信息

SqlMapConfig.xml:

<configuration>
    <environments default="environment">
        <environment id="environment">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" 
                    value="oracle.jdbc.OracleDriver" />
                <property name="url"
                    value="jdbc:oracle:thin:@192.168.0.23:1521:tarena10g"/>
                <property name="username" value="demo" />
                <property name="password" value="demo" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="目录路径/SqlMap.xml" />
    </mappers>
</configuration> 

SqlMap.xml:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="org.tarena.mapper.EmpMapper">
<cache/>
<!-- 按名字查询 -->
<select id="findLikeName" resultType="Emp" parameterType="Emp" >
    select * from EMP where 1=1
    <choose>
        <when test="ename != null">
            and ENAME like #{ename}
        </when>
        <otherwise>
            and ENAME like '%A%'
        </otherwise>
    </choose>
</select>
<!-- in条件 -->
<select id="findByDeptNos" resultType="Emp" parameterType="Emp" >
    select * from EMP
    <if test="deptnos != null">
        where DEPTNO in
        <foreach collection="deptnos"
            item="dno" open="(" close=")" separator=",">
            #{dno}
        </foreach>
    </if>
</select>
<!-- where -->
<select id="findByCondition" resultType="Emp" parameterType="Emp" >
    select * from EMP 
    <where>
    <if test="deptno != null">
        DEPTNO = #{deptno}
    </if>
    <choose>
        <when test="ename != null">
            and ENAME like #{ename}
        </when>
        <otherwise>
            and ENAME like '%A%'
        </otherwise>
    </choose>
</where>
</select>
<!-- 批量插入 -->
<insert id="add" parameterType="Emp">
    insert into EMP (EMPNO,ENAME,SAL,COMM,DEPTNO)
    values (#{empno},#{ename},#{sal},#{comm},#{deptno})
</insert>
<!-- 返回Map -->
<select id="findEmps"  resultType="java.util.HashMap">
    select EMPNO from EMP
</select>
</mapper>

MyBatis实例

  1. SqlSessionFactoryBuilder
    该对象根据MyBatis配置文件SqlMapConfig.xml构建SqlSessionFactory实例
  2. SqlSessionFactory
    创建SqlSession实例
  3. SqlSession
    该对象包含了所有执行Sql操作的方法,用于执行已经映射的SQL语句
### MyBatisMyBatis-Plus 学习教程最佳实践 #### 1. 理解基础概念 MyBatis 是一种优秀的持久层框架,它简化了Java应用程序与数据库之间的交互过程。而 MyBatis-Plus (MP) 则是在 MyBatis 基础上构建的一个增强工具集,旨在减少重复代码并提升开发效率。 #### 2. 配置环境设置 对于 Spring Boot 应用来说,推荐使用 `mybatis-plus-boot-starter` 而不是单独引入 `mybatis-plus`[^1]。这是因为前者已经包含了后者所需的所有依赖项,并针对Spring生态进行了优化配置。 ```yaml # application.yml 示例 spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath*:mapper/*Mapper.xml global-config: db-config: id-type: auto ``` #### 3. 使用 MyBatis-Plus 提供的功能特性 ##### 自动填充字段 利用 MP 的元对象处理器 (`MetaObjectHandler`) 可以轻松实现创建时间和更新时间等公共字段的自动维护: ```java @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } } ``` ##### 条件构造器 条件构造器使得 SQL 查询更加灵活方便: ```java QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("age", 20).likeRight("name", "张"); List<User> users = userMapper.selectList(queryWrapper); ``` #### 4. 解决潜在冲突问题 当项目中同时存在 MyBatisMyBatis-Plus 时可能会遇到兼容性问题。为了避免此类情况发生,建议移除旧版本的相关依赖,并确保只保留最新版的 MyBatis-Plus 相关组件[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值