写点什么

mybatis 入门案例

作者:Geek_5829b6
  • 2022 年 8 月 18 日
    广东
  • 本文字数:2640 字

    阅读完需:约 9 分钟

环境说明

使用工具陈列


  • jdk17

  • mybatis3.5

  • mysql8

  • idea 2022

  • maven3.8

依赖准备

<dependencies>    <dependency>        <groupId>org.mybatis</groupId>        <artifactId>mybatis</artifactId>        <version>3.5.10</version>    </dependency>    <dependency>        <groupId>mysql</groupId>        <artifactId>mysql-connector-java</artifactId>        <version>8.0.30</version>    </dependency></dependencies>
复制代码

配置准备

我们需要在类路径下创建一个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">
复制代码


我们需要在里面指定一些配置,也就是数据库链接的基本资料,maven reimport 依赖,一般写代码就会有提示了


下面给出一个完整的配置


<?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="dev"> <environment id="dev"> <transactionManager type="jdbc"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:33060/hey_mybatis"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments></configuration>
复制代码


注意端口,我这里是 33060 (docker 安装 mysql),如果你的是 3306 记得修改。

数据库准备

CREATE TABLE `article` (  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',  `title` varchar(255) DEFAULT NULL COMMENT '标题',  `content` varchar(2000) DEFAULT NULL COMMENT '内容',  `created` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `updated` datetime DEFAULT NULL COMMENT '更新时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
复制代码

数据模型准备

如果希望简化 set get 的写法,可以考虑引入 lombok


<dependency>    <groupId>org.projectlombok</groupId>    <artifactId>lombok</artifactId>    <version>1.18.24</version>    <scope>provided</scope></dependency>
复制代码


数据库对应的模型(如果不以 oop 的 方式操作,此时它还不需要)


package com.aiyeni.entity;
import lombok.Data;import lombok.ToString;
import java.time.LocalDateTime;
@Data@ToStringpublic class Article { private Long id; private String title; private String content; private LocalDateTime created; private LocalDateTime updated;}
复制代码

mapper 定义

  • mybatis 通过 namespace + mapper 里面的元素 ID 组成一个唯一的逻辑单元进行区分要操作的 sql

  • 外出的 insert 标签等用去区分 crud,参数的获取通过 #{xxx}的形式(后面会详细讨论)


<?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.aiyeni.mapper.ArticleMapper"> <insert id="insert"> insert into article(title, content) value (#{title},#{content}) </insert></mapper>
复制代码


注册 mapper,在 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="dev"> <environment id="dev"> <transactionManager type="jdbc"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:33060/hey_mybatis"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- 追加内容 --> <mappers> <mapper resource="com/aiyeni/mapper/ArticleMapper.xml"></mapper> </mappers></configuration>
复制代码


文件的存储位置如下:


DB 操作

  1. 读取配置

  2. 构建对象

  3. 使用 mybatis 的提供的逻辑对象操作 db


完整代码


package com.aiyeni;
import com.aiyeni.entity.Article;import com.mysql.cj.Session;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;import java.io.Serializable;
public class Demo {
public static void main(String[] args) {
// 读取配置文件
var config = "mybatis-config.xml";
SqlSession session = null; try { // 将文件转换为输入流 var inputStream = Resources.getResourceAsStream(config);
// 构建一个会话工厂 var sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 工厂生产会话
session = sessionFactory.openSession(); // 会话屏蔽内部的细节
Article article = new Article(); article.setTitle("洗澡"); article.setContent("洗个痛快澡"); // 执行插入 session.insert("com.aiyeni.mapper.ArticleMapper.insert",article);
// 提交事务,如果不写是不会持久化的 session.commit();
} catch (IOException e) { throw new RuntimeException(e); } finally { if (session != null) { session.close(); } } }}
复制代码


发布于: 刚刚阅读数: 5
用户头像

Geek_5829b6

关注

还未添加个人签名 2019.09.01 加入

还未添加个人简介

评论

发布
暂无评论
mybatis入门案例_Java_Geek_5829b6_InfoQ写作社区