Mybatis入门基础篇:针对数据库的增删改查

mybatis优势:

MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

8091b14f23ca4fb886e624fd46ac7ac2.png


 本章仅供参考使用,idea使用中文汉化插件,并仅运用idea对数据库进行增删改查;

 

前言

本文依据官方文档查阅理解mybatis,详情请查看官方文档:

mybatis – MyBatis 3 | 简介https://mybatis.org/mybatis-3/zh/index.html


MyBatis是什么?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

1、创建项目

1.1、创建一个maven项目

maven的作用是:

1、在文件中添加相应的配置,maven就会自动的下载相应的jar包;

2、下载依赖,只要配置的jar包所依赖的其他jar包都会被它自动下载下来;

3、可以直接通过它打包war或者jar项目。

关于maven项目内部的绑定问题请直接上网搜,否则无法丝滑使用,请引起重视!其实也是因为我懒(小声叭叭)文件配置参考百度即可:maven配置setting文件-百度经验 (baidu.com)

10ac4aaac23d4f199c0447472e6029f1.png

 1.2、创建子Maven项目

创建子maven项目是为了以后的代码更加简洁,并且可以不用频繁写依赖文件;

38b8792901454f3aa886667b22fbe77d.png

最终效果如图:

7d0eba1224bd48dd8637d6c33f038039.png


 

2、MySQL数据库的创建

2.1、创建数据库

有建数据库软件的请自个使用建数据库的软件,没有就用DOS语句,请确保下载了MySQL!

826f3449935e42a9892ae7bfc2d9ab09.png

 有关于数据库软件的用查询插入:

CREATE DATABASE mybatis;

USE mybatis;

 

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user`  (
  `id` int(0) NOT NULL,
  `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `pwd` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;


INSERT INTO `user` VALUES (1, '小明', '521');
INSERT INTO `user` VALUES (2, '小红', '1314');
INSERT INTO `user` VALUES (3, '小军', '99');

SET FOREIGN_KEY_CHECKS = 1;

 

 2.2、使用idea链接数据库

为了方便查询,在idea中查看内部数据;

2321cc21fc7748ac9e1b2e5e3dca4c98.png

最终的样子: 

5c15e04f609749ff87e5fbb6004a6331.png

 3、MyBatis的环境布局

注意:各位谨记在编写下列xml文件代码时,不可以写中文注释,我写注释是为了方便大家查看,或者是编码方式为utf8!

3.1、MyBatis项目的总体布局

6103317aa8e04f2aa66019b0c72a2dc2.png 

 虽然不是很规范,但我还是以简洁为主;

 3.2、MyBatis的依赖创建

很多人在想,为什么需要两个pom.xml呢?这也是为了后续代码的方便,他有一个好处就是不必重复编写pom.xml文件,内部的maven项目文件是继承最外层的maven父类文件的(也就是继承你父亲留给你的财富,都学到这了还不懂继承关系吗哈哈哈哈!)

49f59bc1a846410dac46b558cae50859.png

 内部的依赖分别为mybatis,Junit,sql,目前使用的就这么多,具体版本号所附带的功能或许会有所差异,不过大致都相同,pom.xml内部依赖代码块如下:

<?xml version="1.0" encoding="UTF8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mybatis</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>the-first-mybatis</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF8</project.build.sourceEncoding>
    </properties>

    <!--创建三种依赖mybatis,Junit,mysql-->
    <dependencies>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

    </dependencies>

    <!--在build中配置resuorces,来防止我们的资源导出失败-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>

            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>


</project>

3.3、MyBatis与数据库的接口

不连接数据库你拿什么去实现代码,你都不知道,电脑知道吗?

所以我们要在resources中创建mybatis与mysql的接口,并且尽量使用官方文档使用的名称mybatis-config.xml:

1274afebeceb4ae38af34c77d0200838.png

<?xml version="1.0" encoding="UTF8" ?>
<!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://localhost:3306/mybatis?useSSL=false&amp;characterEncoding=UTF8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper.xml"/>
    </mappers>
</configuration>

 注意:mappers映射器必须写上,资源映射器是参与资源处理过程的Grails的Artefact,如:修改、移动、更名压缩以及设置缓存等,在这里的作用是注册绑定我们的Mapper文件,不使用就会报错!

3.4、编写utils中的MybatisUtils文件

package utils;

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;

//从 SqlSessionFactory 中获取 SqlSession
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        String resource = "mybatis-config.xml";
        try {
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    //SqlSession完全包含了面向对数据库执行sql命令所需的所有方法
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
        }
    }

4、MyBatis的增删改查

4.1、创建实体类

创建实体类可以使用插件也可以自行生成,写好类之后可以使用快捷键Alt+Insert键生成构造函数,getter ,setting等代码:

package entity;

import java.io.Serializable;

/**
 * (User)实体类
 *
 * @author makejava
 * @since 2022-05-09 09:13:33
 */
public class User implements Serializable {
    private static final long serialVersionUID = 654674671703060350L;
    
    private Integer id;
    
    private String name;
    
    private String pwd;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }

    public User(Integer id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

}

4.2、创建UserDao,以存放变量

package dao;

import entity.User;

import java.util.List;
import java.util.Map;

public interface UserDao {
    List<User> getAllUsers();
    int updateUser(User user);
    int addUser(User user);
    int deleteUser(int id);
    User getOneUser(Map<String, Object> map);
    List<User> getUsersByNameLike(String name);
}

4.3、编写mapper.xml文件 

mapper.xml文件我觉得放在其他文件之中不如和mybatis-config.xml文件之中简单粗暴

这里存放的是SQL语句,针对数据的各种查询,可以按需求查找,就不一一列举了。

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace指定你要实现的mapper接口全名 -->
<mapper namespace="dao.UserDao">
    <!--标签名是操作方式,id与接口中方法名一致 resultType指定返回值类型的全名-->
    <select id="getAllUsers" resultType="entity.User">
        <!--标签内写sql语句-->
        select * from user
    </select>
    <update id="updateUser" parameterType="entity.User">
        <!--用#{}传入参数,实体类的属性可以直接用属性名调用,方法参数可以直接用参数名-->
        update user set name=#{name},pwd=#{pwd} where id=#{id}
    </update>
    <insert id="addUser" parameterType="entity.User">
        insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>
    <delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
    </delete>

    <select id="getOneUser" parameterType="map" resultType="entity.User">
        select * from user where id=#{id}
    </select>
    <select id="getUsersByNameLike" parameterType="String" resultType="entity.User">
        select * from user where name like #{name}
    </select>
</mapper>

 5、测试

在最后的test文件中创建UserDaoTest文件用于测试,测试文件一般与其他代码块分开用于分区处理,不至于一团糟。

如果你复制代码时发现报错了,那就需要你加载@Test这个注解了,为什么用注解?我:?,注解不香么?(滑稽)你:真香!

import dao.UserDao;
import entity.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import utils.MybatisUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class UserDaoTest {
    @Test
    public void testGetAllUser() {
        final SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> users = userDao.getAllUsers();
        for (User user : users) {
            System.out.println(user);
        }

        sqlSession.close();
    }

    @Test
    public void testAddUser() {
        final SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        userDao.addUser(new User(4, "张三", "9527"));

        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void testUpdateUser() {
        final SqlSession sqlSession = MybatisUtils.getSqlSession();
        final UserDao userDao = sqlSession.getMapper(UserDao.class);
        userDao.updateUser(new User(4, "李四", "007"));

        //增删改需要提交事务
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void testDelUser(){
        final SqlSession sqlSession = MybatisUtils.getSqlSession();
        final UserDao userDao = sqlSession.getMapper(UserDao.class);
        userDao.deleteUser(4);

        //增删改需要提交事务
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void testGetOneUser(){
        final SqlSession sqlSession = MybatisUtils.getSqlSession();
        final UserDao userDao = sqlSession.getMapper(UserDao.class);
        Map<String, Object> map = new HashMap<>();
        map.put("id", 2);

        System.out.println(userDao.getOneUser(map));
        sqlSession.close();
    }

    @Test
    public void testGetUsersByNameLike(){
        final SqlSession sqlSession = MybatisUtils.getSqlSession();
        final UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> users = userDao.getUsersByNameLike("%明%");
        for (User user : users)
            System.out.println(user);
        sqlSession.close();
    }
}

运行结果: 

f28b71c271ec43e5bedb19b7df2caf68.png

 

总结

总结什么??都看到这里了,不给个关注再走么?嘿嘿!

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值