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 操作
读取配置
构建对象
使用 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
版权声明: 本文为 InfoQ 作者【Geek_5829b6】的原创文章。
原文链接:【http://xie.infoq.cn/article/309dd6cfa5124fc3e698271d2】。文章转载请联系作者。
Geek_5829b6
关注
还未添加个人签名 2019.09.01 加入
还未添加个人简介









评论