mybatis 基础入门使用

  1、mybatis 简介
1.1、mybatis 特性
  1. MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架;

  2. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集;

  3. MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录;

  4. MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架

 1.2、和其他持久化层技术对比
1.2.1、JDBC
  • SQL 夹杂在Java代码中耦合度高,导致硬编码内伤 ;

  • 维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见 ;

  • 代码冗长,开发效率低。

1.2.2、 Hibernate 和 JPA
  • 操作简便,开发效率高 ;

  • 程序中的长难复杂 SQL 需要绕过框架 ;

  • 内部自动生产的 SQL,不容易做特殊优化;

  • 基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难;

  • 反射操作太多,导致数据库性能下降。

1.2.3、 MyBatis
  • 轻量级,性能出色 ;

  • SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据 ;

  • 开发效率稍逊于HIbernate,但是完全能够接受。

2、创建 mybatis 工程(原始方式)
2.1、maven工程引入依赖
<dependencies>
	<!-- Mybatis核心 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.7</version>
	</dependency>   
    <!-- 可以直接使用springboot中的第三方starter依赖
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.2</version>
    </dependency>
	-->  
	<!-- MySQL驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>8.0.31</version>
		</dependency>
</dependencies>
<!-- springboot提供的模块打包插件 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.7.5</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
2.2、创建 mybatis 核心配置文件

 核心配置文件存放的位置是src/main/resources目录下(mybatis-config.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">  
<configuration>  
	<!--设置连接数据库的环境-->  
    <!--指定下面某个environment的id,表示指定使用哪个数据库环境 -->
	<environments default="development"> 
		<environment id="development">  
			<transactionManager type="JDBC"/>  
			<dataSource type="POOLED">  
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/>  
				<property name="url" value="jdbc:mysql://localhost:3306/MyBatis"/>  
				<property name="username" value="root"/>  
				<property name="password" value="123456"/>  
			</dataSource>  
		</environment>  
	</environments>  
	<!--引入映射文件-->  
	<mappers>  
		<mapper resource="mappers/UserMapper.xml"/>  
	</mappers>  
</configuration>
2.3、创建 mapper 接口
package com.atguigu.mybatis.mapper;   
public interface UserMapper {  
	/**  
	* 添加用户信息  
	*/  
	int insertUser();  
}
 2.4、创建 MyBatis 的映射文件

创建规则:

  • 表所对应的实体类的类名+Mapper.xml;

  • MyBatis映射文件存放的位置是src/main/resources/mappers目录下(和核心配置文件中mapper标签配置的resource的值对应);

  • mapper接口的全类名和映射文件的命名空间(namespace)保持一致;

  • mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致。

<?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="com.atguigu.mybatis.mapper.UserMapper">  <!--指定Mapper接口全限定类名-->
	<!--int insertUser();-->  
	<insert id="insertUser">  <!-- id和mapper接口中的方法名称一致 -->  
		insert into t_user values(null,'张三','123',23,'女')  
	</insert>  
</mapper>
 2.5、创建数据库连接 session 测试
  • SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话);

  • SqlSessionFactory:是“生产”SqlSession的“工厂”;

  • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

public class UserMapperTest {
    @Test
    public void testInsertUser() throws IOException {
        //读取MyBatis的核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取sqlSession,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
        //SqlSession sqlSession = sqlSessionFactory.openSession();
	    //创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交  
		SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //通过代理模式创建UserMapper接口的代理实现类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配映射文件中的SQL标签,并执行标签中的SQL语句
        int result = userMapper.insertUser();
        //如果在获取sqlSession时候没有设置自动提交事务,需要手动提交事务
        //sqlSession.commit();
        System.out.println("result:" + result);
    }
}

 注意::如果要自动提交事务,则在获取 sqlSession 对象时,使用 SqlSession sqlSession= sqlSessionFactory.openSession(true) ;,传入一个Boolean类型的参数,值为true,这样就可以自动提交。

3、mybatis 核心配置文件详解

 核心配置文件中的标签必须按照固定的顺序(**有的标签可以不写,但顺序一定不能乱**):
properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers。

<?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>
    <!--引入properties文件,此时就可以${属性名}的方式访问属性值-->
    <properties resource="jdbc.properties"></properties>
    <settings>
        <!--将表中字段的下划线自动转换为驼峰-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--开启延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>
    <typeAliases>
        <!--
        typeAlias:设置某个具体的类型的别名
        属性:
        type:需要设置别名的类型的全类名
        alias:设置此类型的别名,且别名不区分大小写。若不设置此属性,该类型拥有默认的别名,即类名
        -->
        <!--<typeAlias type="com.atguigu.mybatis.bean.User"></typeAlias>-->
        <!--<typeAlias type="com.atguigu.mybatis.bean.User" alias="user">
        </typeAlias>
		设置之后再mapper.xml文件中,resultType/parameterType,都可以不使用全限定类名,使用别名
		-->
        <!--以包为单位,设置改包下所有的类型都拥有默认的别名,即类名且不区分大小写-->
        <package name="com.atguigu.mybatis.bean"/>
    </typeAliases>
    <!--
    environments:设置多个连接数据库的环境
    属性:default:设置默认使用的环境的id
    -->
    <environments default="mysql_test">
     <!--
      environment:设置具体的连接数据库的环境信息
      属性:
	    id:设置环境的唯一标识,可通过environments标签中的default设置某一个环境的id,表示默认使用的环境
     -->
        <environment id="mysql_test">
            <!--
            transactionManager:设置事务管理方式
            属性:
	            type:设置事务管理方式,type="JDBC|MANAGED"
	            type="JDBC":设置当前环境的事务管理都必须手动处理
	            type="MANAGED":设置事务被管理,例如spring中的AOP
            -->
            <transactionManager type="JDBC"/>
            <!--
            dataSource:设置数据源
            属性:
	            type:设置数据源的类型,type="POOLED|UNPOOLED|JNDI"
	            type="POOLED":使用数据库连接池,即会将创建的连接进行缓存,下次使用可以从缓存中直接获取,不需要重新创建
	            type="UNPOOLED":不使用数据库连接池,即每次使用连接都需要重新创建
	            type="JNDI":调用上下文中的数据源
            -->
            <dataSource type="POOLED">
                <!--设置驱动类的全类名-->
                <property name="driver" value="${jdbc.driver}"/>
                <!--设置连接数据库的连接地址-->
                <property name="url" value="${jdbc.url}"/>
                <!--设置连接数据库的用户名-->
                <property name="username" value="${jdbc.username}"/>
                <!--设置连接数据库的密码-->
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <!-- 指定xml文件,可以不用和mapper接口在相同的包下-->
        <!-- <mapper resource="UserMapper.xml"/> -->
        <!--
        以包为单位,将包下所有的映射文件引入核心配置文件
        注意:
		1. 此方式必须保证mapper接口和mapper映射文件必须在相同的包下(在resources目录下创建)
		2. mapper接口要和mapper映射文件的名字一致
        -->
        <package name="com.atguigu.mybatis.mapper"/>
    </mappers>
</configuration>
4、类型别名汇总

总结: 本文介绍 spring 集成 mybatis 的方式,这种情况在目前开发中不常见,了解原理即可。更多关于 mybatis 的高级用法将在后文介绍。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

  • 30
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其_所以然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值