MyBatis

一、MyBatis简介

1.什么是MyBatis

  • MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发。
  • MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
  • 官网:https://mybatis.org/mybatis-3/zh/index.html

2.持久层

  • 负责将数据到保存到数据库的那一层代码。
  • JavaEE三层架构:表现层、业务层、持久层。

3.什么是框架

  • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。
  • 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。

二、MyBatis快速入门

1.环境准备

  • 创建数据库和数据表,并添加测试数据
-- 创建mybatis数据库
CREATE DATABASE mybatis;
-- 使用mybatis数据库
USE mybatis;

– 创建用户表
CREATE TABLE tb_user(
id int PRIMARY KEY AUTO_INCREMENT,
username varchar(20),
password varchar(20),
gender char(1),
addr varchar(30)
);

– 添加数据
INSERT INTO tb_user VALUES (null, ‘zhangsan’, ‘123’, ‘男’, ‘北京’);
INSERT INTO tb_user VALUES (null, ‘李四’, ‘234’, ‘女’, ‘天津’);
INSERT INTO tb_user VALUES (null, ‘王五’, ‘11’, ‘男’, ‘西安’);

– 查询用户表
SELECT * FROM tb_user;

  • 创建新的maven项目,pom.xml需要添加的依赖

        
            org.mybatis
            mybatis
            3.5.5
        
            mysql
            mysql-connector-java
            5.1.46
        
            junit
            junit
            4.13
            test
        
            org.slf4j
            slf4j-api
            1.7.20
        
            ch.qos.logback
            logback-classic
            1.2.3
        
            ch.qos.logback
            logback-core
            1.2.3
  • 将资料中的logback.xml复制到main下的resources下
  • 在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>
    <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://127.0.0.1/mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载映射配置文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>
  • 在resources下编写 UserMapper.xml 映射配置文件

<?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:名称空间
    配合要执行的sql语句标签中的id使用
-->
<mapper namespace="test">
    <select id="selectAll" resultType="com.itheima.pojo.User">
        SELECT * FROM tb_user
    </select>
</mapper>
  • 编写 User 实体类

/ 用户实体类 / public class User { private Integer id; private String username; private String password; private Character gender; private String addr;

public User() {
}

public User(Integer id, String username, String password, Character gender, String addr) {
this.id = id;
this.username = username;
this.password = password;
this.gender = gender;
this.addr = addr;
}

public Integer getId() {
return id;
}

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

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public Character getGender() {
return gender;
}

public void setGender(Character gender) {
this.gender = gender;
}

public String getAddr() {
return addr;
}

public void setAddr(String addr) {
this.addr = addr;
}

@Override
public String toString() {
return “User{“ +
“id=” + id +
“, username=’” + username + ‘'‘ +
“, password=’” + password + ‘'‘ +
“, gender=” + gender +
“, addr=’” + addr + ‘'‘ +
‘}’;
}

}

2.代码实现

  • 测试类

        

public class MyBatisDemo01 { public static void main(String[] args) throws Exception { //1.加载核心配置文件,获取SqlSessionFactory工厂对象 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

    //2.获取SqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    //3.执行sql语句,并接收返回结果
    List<User> list = sqlSession.selectList("test.selectAll");//名称空间.id属性值

    //4.释放资源
    sqlSession.close();

    //5.遍历集合,处理结果
    for (User user : list) {
        System.out.println(user);
    }
}

}

三、解决SQL语句警告

  • 如果在 UserMapper.xml 映射配置文件中,sql语句报红色,则按照以下配置
  • 在Idea中配置MySQL数据库连接

    23.jpg

四、Mapper代理开发

c21fe15dc4921e350b09c8627811db2.jpg

1.使用Mapper代理开发的步骤

  • 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

    26.jpg

    27.jpg

  • 设置SQL映射文件的namespace属性为Mapper接口全限定名:
    namespace="com.itheima.mapper.UserMapper"

  • 细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。在核心配置文件中修改
<mappers>
<!--        <mapper resource="com/itheima/mapper/UserMapper.xml"/>-->

<!– 包扫描方式 扫描路径下的所有映射配置文件–>
<package name=“com.itheima.mapper”/>
</mappers>

  • 编码
    • 通过 SqlSession 的 getMapper() 方法获取 Mapper 接口的代理实现类对象
    • 调用实现类对象对应方法完成sql的执行
/*
代理开发
 */
public class MybatisTest2 {
    public static void main(String[] args) throws Exception{
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = factory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //插入  必须commit
        mapper.insertUser(null,"gabrielle","1234","男","和平北路");
        sqlSession.commit();
        //查找
        List<User> users = mapper.selectAll();
        for (User user : users) {
            System.out.println(user);
        }
    }
}

五、MyBatis核心配置文件

1.核心配置文件组成部分

  • 注意:书写顺序严格限制

    28.jpg

2.数据类型别名typeAliases

  • 可以给不同的数据类型起别名

    • 核心配置文件中加入别名的标签

      <!--    起别名-->
            <!--
                给某个包下所有的类起别名
                别名就是类首字母小写
            -->
      <!--    映射配置文件中 resultType="" 不用写全类名了-->
        <typeAliases>
            <package name="com.itheima.pojo"/>
        </typeAliases>
      
    • 映射配置文件中,需要用到某个类的,使用别名即可

      <mapper namespace="com.itheima.mapper.UserMapper">
        <!--<select id="selectAll" resultType="com.itheima.pojo.User">-->
        <select id="selectAll" resultType="user">
            SELECT * FROM tb_user
        </select>
      </mapper>
      
    • Java提供好的类型,已经默认有别名了

      29.jpg

      30.jpg

3.配置数据库连接environments

31.jpg

4.加载映射配置文件mappers

31.jpg