【MyBatis】day01 MyBatis学习

一、MyBatis概念

MyBatis是一款优秀的持久层框架,用于简化JDBC开发。

1、持久层

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

2、框架

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

3、MyBatis简化

MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。
在这里插入图片描述

二、MyBatis入门

步骤:查询user表中所有数据

  1. 创建user表,添加数据
  2. 创建模块,导入坐标
  3. 编写MyBatis核心配置文件–>替换连接信息解决硬编码问题
  4. 编写SQL映射文件–>统一管理sql语句,解决硬编码问题
  5. 编码
    1. 定义POJO类
    2. 加载核心配置文件,获取SqlSessionFactory对象
    3. 获取 SqISession对象,执行SQL语句
    4. 释放资源

1. 创建user表,添加数据

CREATE DATABASE mybatis;
USE mybatis;

DROP TABLE IF EXISTS tb_user;

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 (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');

2. 创建模块,导入坐标
在这里插入图片描述

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>

在这里插入图片描述

粘贴mysql、slf4j、logback、单元测试依赖
粘贴logback配置文件
在这里插入图片描述
这里的mysql要查看自己的版本
查看版本号 mysql -uroot -p

     <!--mysql 驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <!--junit 单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- 添加slf4j日志api   塞尔福for J   简单日志框架-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <!-- 添加logback-classic依赖     logback 具体的日志框架 logbak直接实现slf4j接口,性能更高-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- 添加logback-core依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>

3. 编写MyBatis核心配置文件–>替换连接信息解决硬编码问题
XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器.

mybatis-config.xml 样例

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

在这里插入图片描述
自己的配置文件,这里注意要看清楚mysql版本,特别是url & 要替换成&amp;
这里的mapper sql映射文件要跟自己的UserMapper.xml名字一致。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://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:///mybatis?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false&amp;allowPublicKeyRetrieval=true"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载sql映射文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

4. 编写SQL映射文件–>统一管理sql语句,解决硬编码问题
样例

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

在这里插入图片描述

自己的配置文件UserMapper.xml

  • id是sql的唯一标识,不能重复
  • 不同的sql语句要用不同的标签
  • 这里处理的是User类如果是别的实体,可以换名称XxxMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace:名称空间-->
<mapper namespace="test">
    <!--id是sql的唯一标识,不能重复-->
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select * from tb_user;
    </select>
    <!--不同的sql语句要用不同的标签-->
  <!--  <update id=""></update>
    <delete id=""></delete>
    <insert id=""></insert>-->
</mapper>

5. 编码
1. 定义POJO类

package com.itheima.pojo;
// alt + shift 鼠标左键 整列便捷
// ctrl alt L 格式化代码
public class User {
    private Integer id;
    private String username;
    private String PASSWORD;
    private String gender;
    private String 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 String getGender() {
        return gender;
    }

    public void setGender(String 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 + '\'' +
                '}';
    }
}

编写Demo进行测试
2. 加载核心配置文件,获取SqlSessionFactory对象
3. 获取 SqISession对象,执行SQL语句
4. 释放资源
在这里插入图片描述

MyBatisDemo.java

package com.itheima;

import com.itheima.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisDemo {
    public static void main(String[] args) throws IOException {
        //1. 加载mybatis的核心配置文件,获取SqlSessionFactory
        /*每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。
        而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例*/
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2. 获取SqlSession对象,用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3. 执行sql
        List<User> users = sqlSession.selectList("test.selectAll");

        System.out.println(users);

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

测试结果
在这里插入图片描述

问题

解决SQL映射文件的警告信息
产生原因:idea和数据库没有建立连接,不能识别表信息
解决方式:在idea中配置MySQL数据库连接

tb_user爆红就是此问题
在这里插入图片描述

在这里插入图片描述
这里如果点mysql没有出现详情编辑页面,更新一下idea即可。
在这里插入图片描述
当点击TestConnection出现succeeded时表示连接成功。
在这里插入图片描述
其中QL/New Query Console 还可以测试sql语句。
在这里插入图片描述

三、MyBatis代理开发

四、MyBatis核心配置文件

五、配置文件完成增删改查

六、注解完成增删改查

七、动态SQL

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值