MyBatis初识+一个小demo

大城市里の小女人 提交于 2021-01-13 11:22:12

1. MyBatis发展历史及下载

为什么要使用MyBatis

我们为什么要用mybatis,jdbc不香吗?答案是确实不香,写多了jdbc你会发现,感觉代码都差不多,在写一样的,没错,使用jdbc去数据库读取数据,不仅代码冗余大,开发效率也低下;我们无非就是增删改查,为什么不封装一个工具类,只关注逻辑(前提是你能封装出来),当前我们就有一个很好的框架mybatis,它可以提高工作效率和代码性能,何故不用,那么我们就来学一学它:

  • 使用jdbc遇到的问题:
    1. JDBC创建连接的时候,每一次用完就销毁了,导致连接性能不好
    2. Dao层中的好多JDBC流程一样(冗余),只是相差一些SQL、参数

1.1 框架的发展历史

MyBatis框架最早的名字叫iBatis
2001年 Clinton Begin发起一个开源项目 iBatis1.0
2005年 iBatis2.0 2010年 iBatis3.0
iBatis在这之前都是由Apache组织管理
2010年6月份 iBatis项目交由谷歌公司托管 MyBatis
2013年11月 整个项目迁移至GitHub
2019年10月 MyBatis3.5.3





1.2 框架的作用

MyBatis是一个持久层的框架(DAO—数据库交互)
半自动的ORM框架 Object Relational Mapping(数据库的表—
Java对象domain之间的映射关系)

1.3 框架基本应用

  1. 写好的代码 导包.jar
  2. 在项目中配置一个文件 dbconfig.properties driver url user password
  3. 获取jar包中的一个对象 SqlSession
  4. 执行数据库操作 insert update delete selectOne selectList
  5. 调用如上的方法 提供sql 提供sql上面的问号信息 如果是查询 提供查询以后返回的对象类型

1.4 下载

  1. 去GitHub上下载,地址:
    (https://github.com/mybatis/mybatis-3/tree/master/src/site)
    在这里插入图片描述

  2. 点击mybatis-3目录:
    在这里插入图片描述

  3. 往下翻,找到
    在这里插入图片描述
    4.下载解压:
    在这里插入图片描述


    1. 或者maven导依赖:
			    <dependency>
			      <groupId>org.mybatis</groupId>
			      <artifactId>mybatis</artifactId>
			      <version>3.5.3</version> 
			    </dependency>

知识总结:
1. MyBatis是一个持久层的框架
2. MyBatis底层封装的是JDBC
3. MyBatis是一个半自动的ORM (Object Relational Mapping(Java的domain对象----数据库表)
4. 简单发展历程



2001年 Clinton Begin 发起一个开源项目,放在Apache组织的开源项目中
最开始叫做ibatis
2010年 被谷歌公司托管 名字改为MyBatis
2013年 整体迁移至GitHub管理


2. MyBatis简单使用

2.1 导包

  1. 去工程配置中
    在这里插入图片描述
  2. 找到相应jar包
    在这里插入图片描述
  3. apply应用即可

2.2 写configuration.xml 配置文件

  • 目的 存储与数据库相关联的那些信息 driver url username password

configuration.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>
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"></transactionManager>
        <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="root"/>
            <property name="password" value="123456"/>
        </dataSource>
    </environment>
</environments>
    <mappers>
    </mappers>
</configuration>

创建工具类:

public class MyBatisUtils {
   
   
    private static SqlSessionFactory sqlSessionFactory = null;
    static {
   
   
        String resource = "configuration.xml";
        try {
   
   
            InputStream re = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(re);
        } catch (IOException e) {
   
   
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
   
   
        return sqlSessionFactory.openSession();
    }
}

创建方法:

public interface UserMapper {
   
   
    //定义插入方法
    void insert();
}

配置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">
<mapper>
    <insert id="insert">
        INSERT INTO USER VALUES(NULL,'qifeng','111')
    </insert>
</mapper>

测试一下:

public class Test {
   
   
    public static void main(String[] args) {
   
   
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        int re = sqlSession.insert("insert");
    }
}

发现报错了:
在这里插入图片描述
大家可还记得我们在核心配置文件还有一个mapper,找到一看,发现没有配置:
在这里插入图片描述


配置一下:

 <mappers>
        <mapper resource="com/dao/UserMapper.xml"/>
    </mappers>

继续运行:
在这里插入图片描述

在这里插入图片描述
没有报错,但是数据却没有插进去,咋搞滴????
经查资料,发现,MyBatis会自动开启一个事务,SqlSession对象默认是手动提交事务 如果想要自动 openSession(true)或者sqlSession.commit();

public class Test {
   
   
    public static void main(String[] args) {
   
   
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        int re = sqlSession.insert("insert");
        sqlSession.commit();
    }
}

继续运行,发现可以啦:
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!