Mybatis学习笔记

本文详细介绍了MyBatis框架的使用,从简介、第一个MyBatis程序的创建到CRUD操作,再到ResultMap、日志配置、分页、注解开发、动态SQL和缓存的使用。内容涵盖MyBatis的持久化、配置解析、日志工厂、Log4j的配置和使用,以及多对一、一对多关系的处理。
摘要由CSDN通过智能技术生成

MyBatis

1. 简介

1.1 什么是MyBatis

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pjP6R6dh-1614419632332)(/Users/faro_z/Library/Application Support/typora-user-images/image-20201225013812528.png)]

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

中文文档地址:https://mybatis.org/mybatis-3/zh/index.html

如何获取:

  • Maven仓库:
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
</dependency>

1.2 持久化

数据持久化

  • 持久化就是将程序的数据状态和瞬时状态转化的过程
  • 内存:断电即失
  • 数据库(jdbc),IO文件持久化(…)

为什么需要持久化?

  • 有一些对象,不能让它丢掉
  • 内存太贵了

1.3 持久层

完成持久化工作的代码块

1.4 为什么需要MyBatis

  • 帮助程序员将数据存入到数据库中
  • 方便
  • 传统的JDBC太过复杂。简化。框架。自动化
  • 不用MyBatis也可以,只是使用了MyBatis更容易上手

2. 第一个MyBatis程序

思路:搭建环境->导入Mybatis->编写代码->测试

2.1 搭建环境

搭建数据库

insert into user
VALUES(1,'faroz','123456'),
(2,'jojo','12345d'),
(3,'dio','12345wq')

新建项目

  1. 新建普通的Maven项目

  2. 删除src (这样可以将当前的maven变成一个父工程)

后面就可以看到这么做的好处,可以创建多个项目,且初始的Maven是一个父项目,子项目也不用再重新配置pom文件

  1. 导入Maven依赖

Maven配置去哪里找? 去Maven仓库里找

网站:https://mvnrepository.com/

 <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <!--mybatis-->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
</dependencies>

		<!--在build中配置resources,来防止我们资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resource</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7iY4mlr9-1614419632335)(/Users/faro_z/Library/Application Support/typora-user-images/image-20201225035143749.png)]

2.2 创建模块

  • 编写Mybatis核心配置文件

在resources文件下,创建mybatis-cinfig.xml文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OghKf8kG-1614419632338)(/Users/faro_z/Pictures/typora/image-20210112170855300.png)]

下面的 &amp,本来应该就是 & 符号,只是在xml文件里面不能用&符号,而&amp 就是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核心配置文件-->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="admin"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>

</configuration>
  • 编写MyBatis工具类
public class MybatisUtils {
   
    private static SqlSessionFactory sqlSessionFactory;
    static {
   
        //使用MyBatis第一步:获取SqlSessionFactory对象
        //从MyBatis官网直接拿过来的
        try {
   
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
   
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession() {
   
      //设置为true,自动提交事务
        return sqlSessionFactory.openSession(true);
    }
}

2.3 编写代码

  • 实体类
public class User {
   
    private int id;
    private String name;
    private String pwd;

    public User(int id, String name, String pwd) {
   
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public User() {
   
    }

    public int getId() {
   
        return id;
    }

    public void setId(int id) {
   
        this.id = id;
    }

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    public String getPwd() {
   
        return pwd;
    }

    public void setPwd(String pwd) {
   
        this.pwd = pwd;
    }
}

  • DAO接口
public interface UserDao {
   
    List<User> getUserList();
}
  • 接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件
<?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">
<!--namespace绑定一个指定的Dao/Mapper接口-->
<mapper namespace="top.faroz.dao.UserDao">
    <select id="getUserList" resultType="top.faroz.pojo.User">
        select * from user
    </select>
</mapper>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p5Yd6s1L-1614419632340)(/Users/faro_z/Library/Application Support/typora-user-images/image-20201225030512125.png)]

2.4 测试

注意点:

org.apache.ibatis.binding.BindingException: Type interface top.faroz.dao.UserDao is not known to the MapperRegistry.

MapperRegister是什么?

核心配置文件中注册mappers

  • junit测试
public class UserDaoTest {
   
    @Test
    public void test() {
   
        //获得sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //执行sql
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();

        for (User user : userList) {
   
            System.out.println(user);
        }

        //关闭sqlSession
        sqlSession.close();
    }
}

测试中可能遇到的问题:

  1. 配置文件没有注册(重点)
image-20201225035723301
  1. 绑定接口错误
image-20201225035837859
  1. 方法名不对
image-20201225035945869
  1. 返回类型不对
image-20201225040039110
  1. Maven导出资源问题 (重点)

因为Mybatis中,接口的实现 .xml文件不是写在 resource路径下的,所以Maven无法导出资源,要在Maven中添加如下代码

image-20201225040142131

2.5 小结

这个入门的Mybatis程序,创建需要哪些步骤?

  1. 配置Maven仓库(在Maven repostroy中找)
image-20210112175001999

下面这个Build是必须写死的

不然,写在后面的dao层里的, .xml的dao层接口实现无法使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q2BCAoeD-1614419632341)(/Users/faro_z/Pictures/typora/image-20210112175244930.png)]

  1. 写Mybatis工具类

这样可以更方便的获取SqlSession对象

image-20210112175029746
  1. 在resources中写Mabits配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c6N48oGe-1614419632342)(/Users/faro_z/Pictures/typora/image-20210112175131252.png)]

  1. 写实体类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a0JzSVdY-1614419632342)(/Users/faro_z/Pictures/typora/image-20210112175152941.png)]

  1. 写Dao层接口

一定注意是接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nR3eSBeA-1614419632343)(/Users/faro_z/Pictur

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FARO_Z

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

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

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

打赏作者

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

抵扣说明:

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

余额充值