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
@ToString
public 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 加入
还未添加个人简介
评论