• 2、搭建MyBatis


    2、搭建MyBatis

    2.1、开发环境

    IDE:idea 2021.2
    构建工具:maven 3.6.3
    MySQL版本:MySQL 8
    MyBatis版本:MyBatis 3.5.10

    MySQL不同版本的注意事项
    1、驱动类driver-class-name
    MySQL 5版本使用jdbc5驱动,驱动类使用:com.mysql.jdbc.Driver
    MySQL 8版本使用jdbc8驱动,驱动类使用:com.mysql.cj.jdbc.Driver
    2、连接地址url
    MySQL 5版本的url:
    jdbc:mysql://localhost:3306/ssm
    MySQL 8版本的url:
    jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    否则运行测试用例报告如下错误:
    java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or
    represents more

    2.2、创建Maven工程


    准备工作(Maven的下载与安装)

    Maven 下载官网
    在这里插入图片描述
    解压文件并配置环境变量
    变量名:

    MAVEN_HOME
    
    • 1

    变量值:

    D:\maven\apache-maven-3.8.6
    
    • 1

    path配置路径:

    %MAVEN_HOME%\bin
    
    • 1

    cmd测试:
    在这里插入图片描述
    配置Maven仓库
    apache-maven-3.8.6------>conf------>settings.xml
    在这里插入图片描述
    修改:
    在这里插入图片描述
    配置Maven远程仓库(setting.xml)
    默认国外仓库,更改位国内阿里云仓库
    在这里插入图片描述
    修改:
    在这里插入图片描述
    代码:

    <mirror>
    	<id>alimaven</id>
    	<name>aliyun maven</name>
    	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    	<mirrorOf>central</mirrorOf>
    </mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    IDEA配置:
    在这里插入图片描述
    创建maven项目报错:

    java.lang.RuntimeException: org.codehaus.plexus.component.repository.exception.ComponentLookupException: com.google.inject.ProvisionException: Unable to provision, see the following errors:
    
    1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method 'void <init>()' not found
      at org.jetbrains.idea.maven.server.embedder.CustomModelValidator.<init>(Unknown Source)
      while locating org.jetbrains.idea.maven.server.embedder.CustomModelValidator
      at ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
      while locating org.apache.maven.model.validation.ModelValidator annotated with @com.google.inject.name.Named(value="ide")
    
    1 error
          role: org.apache.maven.model.validation.ModelValidator
      roleHint: ide
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    解决办法:更换低版本Maven


    1. 打包方式:jar
    2. 导入依赖
    <dependencies>
    <!-- Mybatis核心 -->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
    </dependency>
    <!-- junit测试 -->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>
    <!-- MySQL驱动 -->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
    </dependency>
    </dependencies>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    新建数据库SSM。新建表t_user

    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for t_user
    -- ----------------------------
    DROP TABLE IF EXISTS `t_user`;
    CREATE TABLE `t_user`  (
      `id` int(0) NOT NULL AUTO_INCREMENT,
      `username` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
      `password` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
      `age` int(0) NULL DEFAULT NULL,
      `gender` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
      `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of t_user
    -- ----------------------------
    INSERT INTO `t_user` VALUES (1, NULL, NULL, NULL, '', NULL);
    
    SET FOREIGN_KEY_CHECKS = 1;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    User类:

    public class User {
        private Integer id;
        private String username;
        private String password;
        private Integer age;
        private String gender;
        private String email;
    
        public User() {
        }
    
        public User(Integer id, String username, String password, Integer age, String gender, String email) {
            this.id = id;
            this.username = username;
            this.password = password;
            this.age = age;
            this.gender = gender;
            this.email = email;
        }
    
        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 Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getGender() {
            return gender;
        }
    
        public void setGender(String gender) {
            this.gender = gender;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    ", age=" + age +
                    ", gender='" + gender + '\'' +
                    ", email='" + email + '\'' +
                    '}';
        }
    }
    
    
    • 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
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

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

    习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。
    核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息
    核心配置文件存放的位置是src/main/resources目录下

    mybatis-3.5.10.pdf------->getting started

    <?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="${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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    src/main/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.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
    
    <!--    引入MyBatis的映射文件-->
        <mappers>
            <mapper resource=""/>
        </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

    2.4、创建mapper接口

    MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。

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

    2.5、创建MyBatis的映射文件

    相关概念:ORMObject Relationship Mapping)对象关系映射。

    • 对象:Java的实体类对象
    • 关系:关系型数据库
    • 映射:二者之间的对应关系
    java概念数据库概念
    属性字段/列
    对象记录/行

    1、映射文件的命名规则:
    表所对应的实体类的类名+Mapper.xml
    例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml
    因此一个映射文件对应一个实体类,对应一张表的操作
    MyBatis映射文件用于编写SQL,访问以及操作表中的数据
    MyBatis映射文件存放的位置是src/main/resources/mappers目录下
    2、 MyBatis中可以面向接口操作数据,要保证两个一致:
    a>mapper接口的全类名和映射文件的命名空间(namespace)保持一致
    b>mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

    mybatis-3.5.10.pdf ----->2.1.5
    在这里插入图片描述

    <?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 namespace="org.mybatis.example.BlogMapper">
     <select id="selectBlog" resultType="Blog">
     select * from Blog where id = #{id}
     </select>
    </mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在resources新建mappers文件夹,新建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">
    
    <mapper namespace="com.gao.mybatis.mapper.UserMapper">
    
    
    <!--
        mapper接口和映射文件要保证两个一致:
        1.mapper接口的全类名和映射文件的namespace要保持一致
        2.mapper接口中的方法的方法名和映射文件中的sql的id保持一致
    
    -->
    <!--int insertUser();-->
        <insert id="insertUser">
            insert into t_user values(null,"admin",123456,23,'男','123456@qq.com');
        </insert>
    </mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述
    配置mybatis-config.xml

    <!--    引入MyBatis的映射文件-->
        <mappers>
            <mapper resource="mappers/UserMapper.xml"/>
        </mappers>
    
    • 1
    • 2
    • 3
    • 4

    2.6、通过junit测试功能:

    public class MyBatisTest {
    
        @Test
        public void testInsert() throws IOException {
            //获取核心配置文件的输入流
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //获取SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            //获取SqlSessionFactory对象
            SqlSessionFactory build = sqlSessionFactoryBuilder.build(is);
            //获取SQL的SqlSession,是MyBatis提供的操作数据库的对象
            SqlSession sqlSession = build.openSession();
            //获取UserMapper的代理实现类对象
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //调用mapper接口中的方法,实现添加用户信息的功能
            int result = mapper.insertUser();
            System.out.println("结果" + result);
            //提交事务
            sqlSession.commit();
            //关闭sqlSeesion
            sqlSession.clearCache();
    
    
        }
    }
    
    
    • 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
    • SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话)
    • SqlSessionFactory:是“生产”SqlSession的“工厂”。
    • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

    原始映射:

        @Test
        public void testInsert() throws IOException {
            //获取核心配置文件的输入流
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //获取SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            //获取SqlSessionFactory对象
            SqlSessionFactory build = sqlSessionFactoryBuilder.build(is);
            //获取SQL的SqlSession,是MyBatis提供的操作数据库的对象
            SqlSession sqlSession = build.openSession();
    //        //获取UserMapper的代理实现类对象
    //        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    //        //调用mapper接口中的方法,实现添加用户信息的功能
    //        int result = mapper.insertUser();
    
            //提供SQL以及唯一标识找到sql并执行,唯一标识:namespace.sqlId
            int result = sqlSession.insert("com.gao.mybatis.mapper.UserMapper.insertUser");
            System.out.println("结果" + result);
            //提交事务
            sqlSession.commit();
            //关闭sqlSeesion
            sqlSession.clearCache();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    自动提交代码:

        @Test
        public void testInsert() throws IOException {
            //获取核心配置文件的输入流
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //获取SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            //获取SqlSessionFactory对象
            SqlSessionFactory build = sqlSessionFactoryBuilder.build(is);
            //获取SQL的SqlSession(不会自动提交),是MyBatis提供的操作数据库的对象
    //        SqlSession sqlSession = build.openSession();
            //获取SQL的SqlSession(不会自动提交),是MyBatis提供的操作数据库的对象
            SqlSession sqlSession = build.openSession(true);
            //获取UserMapper的代理实现类对象
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //调用mapper接口中的方法,实现添加用户信息的功能
            int result = mapper.insertUser();
    
    //        //提供SQL以及唯一标识找到sql并执行,唯一标识:namespace.sqlId
    //        int result = sqlSession.insert("com.gao.mybatis.mapper.UserMapper.insertUser");
            System.out.println("结果" + result);
            //提交事务
    //        sqlSession.commit();
            //关闭sqlSeesion
            sqlSession.clearCache();
    
    
        }
    
    • 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

    2.7、加入log4j日志功能

    1. 添加依赖

    <!-- log4j日志 -->
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2. 加入log4j的配置文件

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

    <?xml version="1.0" encoding="UTF-8" ?>
    <!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

    日志的级别
    FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
    从左到右打印的内容越来越详细

    运行,输出日志信息:

    DEBUG 07-28 10:30:18,594 ==>  Preparing: insert into t_user values(null,"admin",123456,23,'男','123456@qq.com'); (BaseJdbcLogger.java:137) 
    DEBUG 07-28 10:30:18,610 ==> Parameters:  (BaseJdbcLogger.java:137) 
    DEBUG 07-28 10:30:18,613 <==    Updates: 1 (BaseJdbcLogger.java:137) 
    结果1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    【Leetcode HOT100】打家劫舍 III c++
    【小样本学习】2022 KDD Task-Adaptive Few-shot Node Classification
    OceanBase自动安装部署演示环境demo
    归约证明在密码学中的应用
    python在NumPy数组中查找等于零的元素索引
    赛博斗地主——使用大语言模型扮演Agent智能体玩牌类游戏。
    swift-类结构源码探寻(一)
    2.4_4 死锁的检测和解除
    如何使用ArcGIS中的Arcmap进行矢量和栅格数据裁剪?
    PHP知识点
  • 原文地址:https://blog.csdn.net/qq_44774198/article/details/126026672