Mybatis快速入门并实现CRUD操作

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mybatis快速入门并实现CRUD操作

MyBatis快速入门

思路流程:搭建环境—>导入Mybatis–>编写代码—>测试

1、代码演示

1.1、搭建数据库

CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `address` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert  into `user`(`id`,`username`,`address`) 
values (1,'詹姆斯','克里夫'),
(2,'科比','洛杉矶'),
(3,'保罗','洛杉矶'),
(4,'苏炳添','中国');

1.2、导入MyBatis相关依赖

<!--导入mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!--导入mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

1.3、编写Mybatis核心配置文件

<?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">
        <!--配置mysql的环境-->
        <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?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--指定映射配置文件的位置-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

1.4、编写实体类

package com.lili.entity;
/**
 * 对应数据库下的t_user表
 *
 * @author: QiJingJing
 * @create: 2021/8/6
 */
public class User {
    /**
     * 用户编号
     */
    private int id;
    /**
     * 姓名
     */
    private String username;
    /**
     * 住址
     */
    private String address;
    public void setId(int id) {
        this.id = id;
    }
    public User() {
    }
    public User(String username, String address) {
        this.username = username;
        this.address = address;
    }
    public int getId() {
        return this.id;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getUsername() {
        return this.username;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getAddress() {
        return this.address;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

1.5、编写Mybatis工具类(获取SqlSession对象)

package com.lili.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;
/**
 * 获取sqlSession对象
 *
 * @author: QiJingJing
 * @create: 2021/8/6
 */
public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            // 获取sqlSessionFactory
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取sqlSession对象
     */
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}

1.6、编写Mapper接口类

public interface UserMapper {
    /**
     * 查询所有操作
     */
    List<User> findAll();
}

1.7、编写Mapper.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mapper.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lili.dao.UserMapper">
    <!--查询所有信息-->
    <select id="findAll" resultType="com.lili.entity.User">
        select *
        from user
    </select>
</mapper>

1.8、编写测试类

public class MybatisTest {
    @Test
    public void userDaoTest() {
        // 放到 try 里面sqlSession会自动关闭
        try (SqlSession sqlSession = MybatisUtil.getSqlSession()) {
            // 执行sql
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = mapper.findAll();
            userList.forEach(System.out::println);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

1.9、运行测试,结果如下

User{id=1, username='詹姆斯', address='克里夫'}
User{id=2, username='科比', address='洛杉矶'}
User{id=3, username='保罗', address='洛杉矶'}
User{id=4, username='苏炳添', address='中国'}

2、CRUD

2.1、select

  • select语句的属性
  • id
  • 命名空间中唯一标识符
  • 接口中的方法必须与映射文件中的SQL语句ID一一对应
  • parameterType
  • 传入SQL的参数类型。【如果参数过多可以使用Map】
  • resultType:
  • SQL语句返回值类型。【完整的类名或别名】

需求1:根据id查询用户

1.在UserMapper中添加对应方法

public interface UserMapper {
    /**
     * 查询所有操作
     */
    List<User> findAll();
    /**
     * 根据id查询用户
     */
    User findById(@Param("id") int id);
}

2.在UserMapper.xml中添加对应select语句

<!--查询根据Id查询用户-->
<select id="findById" parameterType="integer" resultType="com.lili.entity.User">
    select *
    from user
    where id = #{id}
</select>

3.测试类中进行测试

@Test
    public void test2() {
        // 获取SqlSession
        try (SqlSession sqlSession = MybatisUtil.getSqlSession()) {
            // 得到UserMapper对象
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            // 执行查询
            User user = mapper.findById(1);
            // 打印
            System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

4.输出如下

User{id=1, username='詹姆斯', address='克里夫'}

需求2:根据用户名和住址查询用户

方法一:直接在方法中传递参数

  1. 在接口方法的参数前加 @Param属性
  2. Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型
User findByUA(@Param("username") String username,@Param("address") String address);
 <select id="findByUA" resultType="com.lili.entity.User">
        select *
        from user
        where username = #{username}
          and address = #{address}
    </select>

方法二:使用Map传参

1.在接口方法上,直接使用map参数

User findByMap(Map<String,Object> map);

2.UserMapper.xml

<select id="findByMap" parameterType="map" resultType="com.lili.entity.User">
    select *
    from user
    where username = #{username}
      and address = #{address}
</select>

3.在使用方法的时候,Map的key为sql中取得值即可,没有顺序要求

Map<String,Object> map = new HashMap<>();
map.put("username","苏炳添");
map.put("address","中国");
// 执行查询
User user = mapper.findByMap(map);

2.2、insert

需求:给数据库增加一个用户

1.在UserMapper中添加对应方法

int addUser(User user);

2.UserMapper.xml

<insert id="addUser" parameterType="com.lili.entity.User">
        insert into user (`id`, `username`, `address`)
        values (#{id}, #{username}, #{address})
    </insert>

3.测试代码

User user = new User();
user.setId(5);
user.setUsername("齐菁菁");
user.setAddress("河南");
// 执行添加
int i = mapper.addUser(user);
System.out.println(i);
// 注意:增删改操作必须提交
sqlSession.commit();

2.3、update

需求 :把id为5的地址改为中国

1.在UserMapper中添加对应方法

int update(@Param("address") String address,@Param("id") int id);

2.UserMapper.xml

<update id="update" >
        update user
        set address = #{address}
        where id = #{id}
    </update>

3.测试代码

UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            int i = mapper.update("中国", 5);
            System.out.println(i);
            // 注意:增删改操作必须提交
            sqlSession.commit();

2.4、delete

需求 :根据id删除一个用户

1.在UserMapper中添加对应方法

int deleteById(@Param("id") int id);

2.UserMapper.xml

<delete id="deleteById" >
        delete from user where id = #{id}
    </delete>

3.测试代码

int i = mapper.deleteById(1);
            System.out.println(i);
            // 注意:增删改操作必须提交
            sqlSession.commit();

小结:

  • 所有的增删改操作都需要提交事务!
  • 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
  • 有时候根据业务的需求,可以考虑使用map传递参数!
  • 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
SQL Java 数据库连接
MyBatis-Plus:简化 CRUD 操作的艺术
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的使用,提高开发效率。
42 1
MyBatis-Plus:简化 CRUD 操作的艺术
|
11天前
|
SQL Java 数据库连接
MyBatis-Plus快速入门:从安装到第一个Demo
本文将带你从零开始,快速入门 MyBatis-Plus。我们将首先介绍如何安装和配置 MyBatis-Plus,然后通过一个简单的示例演示如何使用它进行数据操作。无论你是 MyBatis 的新手还是希望提升开发效率的老手,本文都将为你提供清晰的指导和实用的技巧。
73 0
MyBatis-Plus快速入门:从安装到第一个Demo
|
30天前
|
SQL Java 数据库连接
Mybatis方式完成CRUD操作
Mybatis方式完成CRUD操作
37 0
|
5月前
|
缓存 Java 数据库连接
我们后端程序员不是操作MyBatis的CRUD Boy
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。
120 3
我们后端程序员不是操作MyBatis的CRUD Boy
|
4月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
|
5月前
|
Java 数据库连接 API
后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解
后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解
62 3
|
4月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
5月前
|
SQL Java 数据库连接
【MyBatis】深入解析MyBatis:高效操作数据库技术详解
【MyBatis】深入解析MyBatis:高效操作数据库技术详解
43 0
|
28天前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
87 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。