• 2、搭建MyBatis



    【尚硅谷】SSM框架全套教程-讲师:杨博超

    失败,是正因你在距成功一步之遥的时候停住了脚步。

    2、搭建MyBatis

    2.1、开发环境

    IDE:idea 2022.2.1
    JDK:1.8
    构建工具:maven 3.8.4
    MySQL版本:MySQL 8.0
    MyBatis版本:MyBatis 3.5.10

    MySQL注意

    驱动类driver-class-name

    MySQL 5版本使用jdbc5驱动,驱动类使用:com.mysql.jdbc.Driver
    MySQL 8版本使用jdbc8驱动,驱动类使用:com.mysql.cj.jdbc.Driver

    连接地址url

    MySQL 5版本的url:

    jdbc:mysql://localhost:3306/mybatis
    
    • 1

    MySQL 8版本的url:

    jdbc:mysql://localhost:3306/mybatis?userUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8
    
    • 1

    否则运行测试用例报告如下错误:

    java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or
    represents more

    2.2、创建mysql数据

    1 创建mybatis数据库

    -- 创建数据库
    CREATE DATABASE IF NOT EXISTS `mybatis` CHARACTER SET 'utf8';
    -- 使用数据库
    USE mybatis;
    
    • 1
    • 2
    • 3
    • 4

    2 创建user

    CREATE TABLE IF NOT EXISTS `t_user`(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	username VARCHAR(20) DEFAULT '无',
    	`password` VARCHAR(20) DEFAULT '无',
    	age INT DEFAULT 0,
    	gender CHAR(1) DEFAULT '男',
    	email VARCHAR(50) DEFAULT '无'
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.3、创建maven_java工程

    1. 打包方式:jar
    2. 引入依赖
    <dependencies>
        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.5.10version>
        dependency>
        
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.12version>
            <scope>testscope>
        dependency>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.29version>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    2.4、创建实体类

    1 包结构

    在这里插入图片描述

    2 代码

    public class User {
        private Integer id;
        private String username;
        private String password;
        private Integer age;
        private String gender;
        private String email;
    	// 有参
    	// 无参
    	// set和get
    	// toString
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。

    将来整合Spring之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。

    核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息

    核心配置文件存放的位置是src/main/resources目录下

    1 包结构

    在这里插入图片描述

    2 mybatis-config.xml

    第一行:声明
    第二行:约束

    
    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?userUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                dataSource>
            environment>
        environments>
        
        <mappers>
            <mapper resource="mappers/UserMapper.xml"/>
        mappers>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    2.6、创建mapper接口

    MyBatis中的mapper接口相当于以前的dao。

    但是区别在于,mapper仅仅是接口,我们不需要提供实现类。

    1 包结构

    在这里插入图片描述

    2 UserMapper.java

    public interface UserMapper {
        
        // 添加用户信息
        int insertUser();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.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属性保持一致

    4 UserMapper.xml

    
    DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="pers.tianyu.mapper.UserMapper">
        
        <insert id="insertUser">
            insert into t_user
            values (null, 'admin', '123123', 23, '男', '123@qq.com')
        insert>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.8、通过junit测试功能

    1 包结构

    在这里插入图片描述

    2 测试代码

    @Test
    public void testMyBatis() throws IOException{
    	// 读取MyBatis的核心配置文件
    	InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
    	// 创建SqlSessionFactoryBuilder对象
    	SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    	// 通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
    	SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
    	
    	// 创建SqlSession对象,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
    	// SqlSession sqlSession = sqlSessionFactory.openSession();
    	
    	// 创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
    	SqlSession sqlSession = sqlSessionFactory.openSession(true);
    	
    	// 提供UserMapper.xml的namespace以及的唯一标识找到sql并执行,唯一标识是namespace.sqlId
    	// mybatis底层执行调用就是这个方法
    	// int result = sqlSession.insert("pers.tianyu.mapper.UserMapper.insertUser");
    	
    	// 通过代理模式创建UserMapper接口的实现类对象
    	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    	// 调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配
    	// 映射文件中的SQL标签,并执行标签中的SQL语句
    	int result = userMapper.insertUser();
    	// sqlSession.commit(); // 没有设置自动提交就需要手动提交
    	System.out.println("结果:"+result);
    	// 关闭sqlSession
    	sqlSession.close();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3 测试结果

    在这里插入图片描述

    4 补充

    • SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话)
    • SqlSessionFactory:是“生产”SqlSession的“工厂”。
    • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。
    • openSession(true)方法,带true参数就可以自动提交事务,不带openSession(),则需要手动提交事务。

    2.9、加入log4j日志功能

    log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下

    1. 加入依赖
    
    <dependency>
        <groupId>log4jgroupId>
        <artifactId>log4jartifactId>
        <version>1.2.17version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 加入log4j的配置文件
    
    DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <param name="Encoding" value="UTF-8" />
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
    %m (%F:%L) \n" />
    layout>
    appender>
    <logger name="java.sql">
    <level value="debug" />
    logger>
    <logger name="org.apache.ibatis">
    <level value="info" />
    logger>
    <root>
    <level value="debug" />
    <appender-ref ref="STDOUT" />
    root>
    log4j:configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    1. 在mybatis-config.xml(不添加也可以用)
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    settings>
    
    • 1
    • 2
    • 3

    日志的级别

    FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)

    从左到右打印的内容越来越详细

    测试
    在这里插入图片描述

    2.10、一些问题

    问题一:配置文件没有注册

    核心配置文件中注册mappers
    mybatis-config.xml

    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    mappers>
    
    • 1
    • 2
    • 3

    问题二:绑定接口错误

    mapper.xml中namespace指定路径错误

    <mapper namespace="pers.tianyu.mapper.UserMapper">
    mapper>
    
    • 1
    • 2

    问题三:方法名错误

    mapper.xml中id指定路径错误

    <insert id="insertUser">
        insert into t_user
        values (null, 'admin', '123123', 23, '男', '123@qq.com')
    insert>
    
    • 1
    • 2
    • 3
    • 4

    问题四:Maven导出资源问题

    XML资源都放在src/main/resources目录下,不会遇到这个问题,如果放在src/mian/目录中会出现这个问题。

        
        <build>
            <resources>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    <includes>
                        <include>**/*.propertiesinclude>
                        <include>**/*.xmlinclude>
                    includes>
                    <filtering>truefiltering>
                resource>
                <resource>
                    <directory>src/main/javadirectory>
                    <includes>
                        <include>**/*.propertiesinclude>
                        <include>**/*.xmlinclude>
                    includes>
                    <filtering>truefiltering>
                resource>
            resources>
        build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    手搓js轮播图_JavaScript进阶
    苍穹外卖day8(1)地址簿功能
    Mac 下如何查看 Homebrew 安装的软件位置
    python中使用缓存技术
    前端包管理器的工具,npm和Yarn以及pnpm是最常用的
    Python基础(第五期): python数据容器(序列) && 列表 && 集合 && 元素 && 字符串 && 字典 && 序列遍历操作
    Java代码规范
    HarmonyOS CPU与I/O密集型任务开发指导
    【毕业设计】基于单片机的人脸识别与追踪系统 -物联网 stm32
    【Elasticsearch教程12】Mapping字段类型之object
  • 原文地址:https://blog.csdn.net/zhao854116434/article/details/126690378