二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)

@[toc]

二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)

2.1 开发环境

IDE:idea 2021.1 构建工具:maven 3.8.4 MySQL版本:MySQL 5.7.40 MyBatis版本:MyBatis 3.5.7

数据库表:

2.2 创建maven工程

项目初始目录

引入依赖

xml 复制代码
<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.13</version>
    	<scope>test</scope>
    </dependency>
    <!-- MySQL驱动 -->
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>8.0.31</version>
    </dependency>
    <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
</dependencies>

2.3 创建User实体

com/mybatis/entity/User.java

kotlin 复制代码
package com.mybatis.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * @Author 211145187
 * @Date 2023/4/17 22:33
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
    //id
    private Integer id;
    //用户名称
    private String username;
    //用户密码
    private String password;
    //用户手机号码
    private String mobile;
    
    public User(String username, String password, String mobile, Integer gender) 	{
        this.username = username;
        this.password = password;
        this.mobile = mobile;
        this.gender = gender;
    }

    public User(String username, Integer gender) {
        this.username = username;
        this.gender = gender;
    }
}

2.4 创建MyBatis的核心配置文件

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

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

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

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

mybatis-config.xml

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://192.168.31.20:3306/litemall"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--引入映射文件-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

2.5 创建mapper接口

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

提供实现类。

csharp 复制代码
package com.mybatis.mapper;

public interface UserMapper {
    /**
     * MyBatis面向接口编程的两个一致:
     * 1、映射文件的namespace要和mapper接口的全类名保持一致
     * 2、映射文件中SQL语句的id要和mapper接口中的方法名一致
     *
     * 表--实体类--mapper接口--映射文件
     */

    /**
     * 添加用户信息
     */
    int insertUser();

    /**
     * 修改用户信息
     */
    void updateUser();

    /**
     * 删除用户信息
     */
    void deleteUser();
    
    /**
     * 根据id查询用户信息
     */
    User getUserById();

    /**
     * 查询所有的用户信息
     */
    List<User> getAllUser();
}

2.6 创建MyBatis的映射文件

相关概念ORMO bject R elationship Mapping)对象关系映射。

对象:Java的实体类对象

关系:关系型数据库

映射:二者之间的对应关系

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

    <insert id="insertUser">
        insert into litemall.litemall_user(id, username, password, mobile) values(null,'张三','123456','15197289663')
    </insert>

    <update id="updateUser">
        update litemall.litemall_user set username = '张三' where id = 4
    </update>

    <delete id="deleteUser">
        delete from litemall.litemall_user where id = 2
    </delete>
    
    <!--
        查询功能的标签必须设置resultType或resultMap
        resultType:设置默认的映射关系
        resultMap:设置自定义的映射关系
    -->
    <select id="getUserById" resultType="com.mybatis.entity.User">
        select * from litemall.litemall_user where id = 3
    </select>

    <select id="getAllUser" resultType="com.mybatis.entity.User">
        select * from litemall.litemall_user
    </select>
</mapper>

2.7配置日志打印

添加log4j依赖

xml 复制代码
<!-- log4j日志 -->
<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
</dependency>

创建log4j.xml配置文件

xml 复制代码
<?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>

2.8 通过junit测试功能

java 复制代码
package com.mybatis;

import com.mybatis.mapper.UserMapper;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

/**
 * @Author 211145187
 * @Date 2023/4/17 22:56
 **/
public class MyBatisTest {
    /**
     * SqlSession默认不自动提交事务,若需要自动提交事务
     * 可以使用SqlSessionFactory.openSession(true);
     */

    //测试插入
    @Test
    public void testMyBatisInsert() throws IOException {
        //加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交,默认openSession中形参为false
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //通过代理模式创建UserMapper接口的代理实现类对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //测试功能
        int result = mapper.insertUser();
        //提交事务
        //sqlSession.commit();
        System.out.println("result:"+result);
    }

    //测试【修改、删除、单条查询、集合查询】
    @Test
    public void testMyBatisCRUD() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //更新
//        mapper.updateUser();
        //删除
//        mapper.deleteUser();
        //单条查询
//        User user = mapper.getUserById();
//        System.out.println(user);
        //集合查询
//        List<User> userList = mapper.getAllUser();
//        userList.forEach(user -> System.out.println(user));
    }
}

SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的 会话)

SqlSessionFactory:是"生产"SqlSession的"工厂"。

工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的 相关代码封装到一个"工厂类"中,以后都使用这个工厂类来"生产"我们需要的对象。

本人其他相关文章链接

1.一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程 2.二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作) 3.三、MyBatis核心配置文件详解 4.四、MyBatis获取参数值的两种方式(重点) 5.五、MyBatis的增删改查模板(参数形式包括:String、对象、集合、数组、Map) 6.六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性 7.七、MyBatis自定义映射resultMap 8.八、(了解即可)MyBatis懒加载(或者叫延迟加载) 9.九、MyBatis动态SQL 10.十、MyBatis的缓存 11.十一、MyBatis的逆向工程 12.十二、MyBatis分页插件

重要信息

相关推荐
kaliarch1 天前
迈向云基础设施自动化 - Terraformer 助力腾讯云资源管理转型
后端·云原生·自动化运维
kaliarch1 天前
Terraform 存量资源手动导入IaC管控方案
后端·自动化运维
kaliarch1 天前
使用 Terraform 基于 Excel 表格数据创建资源的解决方案
云计算·自动化运维
kaliarch1 天前
Terraform 导入存量云资源方案
后端·自动化运维
kaliarch1 天前
IaC 管控资源发生属性偏移修正方案
后端·架构·自动化运维
kaliarch1 天前
Terraform 合并多个项目(独立目录)解决方案
后端·自动化运维
数据智能老司机1 天前
DevOps 安全与自动化——理解 DevOps 文化与原则
架构·自动化运维·devops
数据智能老司机1 天前
DevOps 安全与自动化——开发环境搭建
架构·自动化运维·devops
自由鬼1 天前
如何处理Y2K38问题
java·运维·服务器·程序人生·安全·操作系统
鱼儿不吐泡2 天前
阿里云服务器通过 docker CE 安装 Redis+Mysql+Nginx
运维·自动化运维