MyBatis入门

本文介绍了MyBatis的基本用法和深入用法,包括Mapper接口的代理对象、ResultMap、关联映射(一对一、一对多、多对多关系)、动态SQL以及缓存机制(一级缓存和二级缓存的工作原理及配置)。详细讲解了如何配置和使用这些特性,以提高数据库操作的效率。
摘要由CSDN通过智能技术生成

1. 基本用法

开发流程:

(1)配置好MyBatis

主要就是需要配置好数据源以及告诉MyBatis持久化类的映射文件mapper.xml哪里找。MyBatis默认的配置文件名称是mybatis-config.xml,在最开始的示例中我们将MyBatis的配置放在了applicationContext.xml中,这也是可以的。

传统简单配置:

<?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">
  <!--  XML 配置文件包含对 MyBatis 系统的核心设置 -->
<configuration>
    <properties resource="db.properties"/>
    <!-- 指定 MyBatis 所用日志的具体实现 -->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!-- 设置别名 -->
    <typeAliases>
        <typeAlias  alias="user" type="org.fkit.domain.User"/>
    </typeAliases>

    <environments default="mysql">
    <!-- 环境配置,即连接的数据库。 -->
    <environment id="mysql">
    <!--  指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 -->
      <transactionManager type="JDBC"/>
      <!--  dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 -->
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 -->
  <mappers>
    <mapper resource="org/fkit/mapper/UserMapper.xml"/>
  </mappers>
</configuration>

注解模式下的高级配置:

     <!-- mybatis:scan会扫描org.fkit.dao包里的所有接口当作Spring的bean配置,之后可以进行依赖注入-->  
    <mybatis:scan base-package="org.fkit.hrm.dao"/>   

     <!-- 扫描org.fkit包下面的java文件,有Spring的相关注解的类,则把这些类注册为Spring的bean -->
    <context:component-scan base-package="org.fkit.hrm"/>

    <!-- 使用PropertyOverrideConfigurer后处理器加载数据源参数 -->
    <context:property-override location="classpath:db.properties"/>

    <!-- 配置c3p0数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"/>

    <!-- 配置SqlSessionFactory,org.mybatis.spring.SqlSessionFactoryBean是Mybatis社区开发用于整合Spring的bean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
        p:dataSource-ref="dataSource"/>

    <!-- JDBC事务管理器 -->
    <bean id="transactionManager" 
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
         p:dataSource-ref="dataSource"/>

    <!-- 启用支持annotation注解方式事务管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

(2)根据数据中的表,定义好领域模型

这里不赘述,只强调一点,属性都要用对象类型,不要用基础类型。

(3)定义Mapper XML文件

<mapper namespace="org.fkit.mapper.OrderMapper">

  <insert id="saveUser" parameterType="user" 
  useGeneratedKeys="true" keyProperty="id">
    INSERT INTO TB_USER(name,sex,age) 
    VALUES(#{name},#{sex},#{age})
  </insert>

</mapper>
  • namespace:全局要唯一
  • id:mapper的id。
  • parameterType:表示执行这条语句的时候需要一个User类型的对象作为参数。
  • useGeneratedKeys:使用数据库的自动增长主键,建议对MySQL开启。
  • keyProperty:将数据库生成的主键设置到user对象的id属性中去,从而在代码中,执行完这条SQL,user实例的id就被赋值了,可以读取。
  • #{name}:当parameterType是基础类型的时候,这里读取的就是入参;当parameterType是一个对象类型的时候,这里读取的就是对象的属性。

(4)使用SqlSession执行mapper

获取SqlSession分为三步:

  • 读取mybatis-config.xml文件;
  • 创建一个SqlSessionFactory;
  • 使用SqlSessionFactory获取一个SqlSession;

考虑到SqlSessionFactory需要频繁使用,我们可以把它写成一个单例模型:

public class FKSqlSessionFactory {
   
    private static SqlSessionFactory sqlSessionFactory = null;

    // 初始化创建SqlSessionFactory对象
    static{
        try {
            // 读取mybatis-config.xml文件
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 获取SqlSession对象的静态方法
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

    // 获取SqlSessionFactory的静态方法
    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }
}

执行可以这样写:

    public static void main(String[] args) throws Exception {
        // 获得Session实例
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        // 创建User对象
        User user = new User("jack", "男", 22);
        // 插入数据
        session.insert("org.fkit.mapper.UserMapper.saveUser", user);
        // 提交事务
        session.commit();
        // 关闭Session
        session.close();
    }

2. 深入用法

2.1 Mapper接口的代理对象

MyBatis官方手册建议通过mapper接口的代理对象执行SQL操作,该对象关联了SqlSession对象,开发者可以通过该对象直接调用方法操作数据库。

public interface OrderMapper {
   
    Order selectOrderByUserId(int id);
}

和下面这句mapper对应:

  <select id="selectOrderByUserId" parameterType="int" 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值