Mybatis入门

一、Mybatis简介
1、MyBatis历史
MyBatis是一个封装了jdbc的持久层框架,最初是Apache的一个开源项目iBatis, 2010年随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。
2、MyBatis特性
1) MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
2) MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
3) MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java
Objects,普通的Java对象)映射成数据库中的记录
4) MyBatis 是一个半自动的ORM(对象关系映射)框架
3、和其它持久化层技术对比
1)JDBC
  • SQL 夹杂在Java代码中耦合度高,导致硬编码内伤
  • 维护不易且实际开发需求中 SQL 有变化,频繁修改的情况多见
  • 代码冗长,开发效率低
2)Hibernate 和 JPA
  • 操作简便,开发效率高
  • 程序中的长难复杂 SQL 需要绕过框架
  • 内部自动生产的 SQL,不容易做特殊优化
  • 基于全映射的全自动框架,大量字段的 POJO 进行部分映射时比较困难。
  • 反射操作太多,导致数据库性能下降
3)MyBatis
  • 轻量级,性能出色
  • SQL 和 Java 编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
  • 开发效率稍逊于HIbernate,但是完全能够接受
二、搭建Mybatis
1、开发环境
IDEA:idea 2021.1
构建工具:maven-3.6.3
MySQL版本:MySQL 8
MyBatis版本:MyBatis 3.5.7
2、MySQL不同版本的注意事项
1)驱动类driver-class-name
  • MySQL 5版本驱动类使用:com.mysql.jdbc.Driver
  • MySQL 8版本驱动类使用:com.mysql.cj.jdbc.Driver
2)连接地址url
  • MySQL 5版本的url:jdbc:mysql://localhost:3306/数据库名称
  • MySQL 8版本的url:jdbc:mysql://localhost:3306/数据库名称?serverTimezone=UTC

3、数据库创建

 

4、创建maven工程
1)打包方式:jar
<packaging>jar</packaging>
2)引入依赖
复制代码
<dependencies>

<!--        Mybatis核心-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
<!--        junit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
<!--        MySql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
    </dependencies>
复制代码

5、创建MyBatis的核心配置文件

1)核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息,习惯上命名为mybatis-config.xml,但这仅仅只是建议。将来整合Spring之后,这个配置文件可以省略。

2)核心配置文件存放在src/main/resources目录下。

复制代码
<?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>
    <!--设置连接数据库的环境-->
    <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?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
 <!--引入映射文件-->
    <mappers>
        <package name="mappers/UserMapper.xml"/>
    </mappers>
</configuration>
复制代码

3)核心配置文件详解

核心配置文件中的标签必须按照固定的顺序:properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?

  1. 引入properties文件

<properties resource="jdbc.properties" />

#properties文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimeZone=UTC
jdbc.username=root
jdbc.password=123456

  2. 设置类型别名

复制代码
 <!--    typeAliases:设置类型别名,即为某个具体的类型设置一个别名
在Mybatis的范围中,就可以使用别名表示一个具体的类型-->
<typeAliases>
<!-- 不设置别名(alias)默认类名作为别名,且不区分大小写-->
<!-- <typeAlias type="com.ssm.mybatis.pojo.User" alias="abc"></typeAlias>-->
<!-- 这种设置方式太繁琐-->
<!-- <typeAlias type="com.ssm.mybatis.pojo.User" ></typeAlias>-->
<!-- 通过包来设置类型别名,指定包下所有的类型将全部拥有默认的别名-->
<package name="com.ssm.mybatis.pojo"/>
</typeAliases>
复制代码

  3. 配置连接数据库的环境

复制代码
<!--
        environments:配置多个连接数据库的环境
        属性:
            default:设置默认使用的环境的id
-->    <environments default="development"><!--       environment:配置某个具体的环境       属性:           id:表示连接数据库的环境的唯一标识,不能重复 -->    <environment id="development">
<!--    transactionManager:设置事务管理方式                属性:                    type="JDBC|MANAGED"                    JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动处理                    MANAGED:被管理,例如Spring
 
-->            <transactionManager type="JDBC"/> <!-- dataSource:配置数据源 属性:   type:设置数据源的类型     type="POOLED|UNPOOLED|JNDI"     POOLED:表示使用数据库连接池缓存数据库连接     UNPOOLED:表示不使用数据库连接池     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>
复制代码

  4. 引入mybatis的映射文件

<mappers>
<!--        <mapper resource="mappers/UserMapper.xml"/>-->
<!--        以包的方式引入映射文件,但是必须满足两个条件
            1、mapper接口和映射文件所在的包必须一致
            2、mapper接口的名字和映射文件的名字必须一致-->
        <package name="com.ssm.mybatis.mapper"/>
    </mappers>

6、创建mapper接口

MyBatis中的mapper接口相当于以前的dao。区别在于,mapper仅仅是接口,不需要提供实现类。 
public interface UserMapper {
    /**
     * 添加用户信息
     */
    int insertUser();
}

7、创建MyBatis的映射文件

1)相关概念:ORM(Object Relationship Mapping)对象关系映射。
  • 对象:Java的实体类对象
  • 关系:关系型数据库
  • 映射:二者之间的对应关系 
Java 数据库
属性 字段/列
对象 记录/行
 
 
 
 
 
 
2)映射文件的命名规则:
  • 表所对应的实体类的类名+Mapper.xml。例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml
  • 因此一个映射文件对应一个实体类,对应一张表的操作
  • MyBatis映射文件用于编写SQL,访问以及操作表中的数据
  • MyBatis映射文件存放的位置是src/main/resources/mappers目录下
3)MyBatis中可以面向接口操作数据,要保证两个一致:
  • 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.ssm.mybatis.mapper.UserMapper">
    <!--int insertUser();-->
    <insert id="insertUser">
       insert into t_user values(null,'admin','123456',23,'男','123@qq.com')
    </insert>
</mapper>
复制代码

8、通过junit测试

复制代码
public class MyBatisTest   { 
@Test

public
void testInsert() throws IOException { // 获取核心配置文件的输入流 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); // 获取SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 获取SqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); // 获取sql的会话对象SqlSession(不会自动提交事务),是Mybatis提供的操作数据库的对象 // SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取sql的会话对象SqlSession(会自动提交事务),是Mybatis提供的操作数据库的对象 SqlSession sqlSession = sqlSessionFactory.openSession(true); // 获取UserMapper的代理实现类对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); // 调用Mapper接口中的方法 int result = mapper.insertUser();
// 通过SQL语句的唯一标识找到sql语句并执行(最原始的方法) // int result=sqlSession.insert("com.org.mybatis.mapper.UserMapper.insertUser"); System.out.println("结果:" + result); // 手动提交事务 // sqlSession.commit();
// 关闭session会话 sqlSession.close(); }
}
复制代码
posted @   铢积寸累  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示