mybatis简单实例
博客参考MyBatis入门:第一个MyBatis示例(详细步骤和完整源码)详细的介绍了如何创建一个简单的MyBatis项目,学会 - 掘金,做了些许改动
配置文件
首先在pom.xml中引入mybatis,配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>site.exciter</groupId>
<artifactId>MyBatis_HelloWorld</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--添加MyBatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
创建数据库
创建一个用于测试的数据库,创建语句如下(相比于原博客做了些许改动):
CREATE DATABASE mybatis_test;
USE `users`;
#创建员工表
CREATE TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(255),
gender CHAR(1),
age INT(3),
xingge VARCHAR(255)
);
#不设置中文会报错,也可能是作者自己的问题
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4;
#插入数据
INSERT INTO users(id,NAME,gender,age,xingge)
VALUES(1,"井川里予",'女',25,'123@qq.com'),
(2,'一条小团团','女',25,'456@qq.com'),
(3,'安妮','女',25,'789@qq.com');
实体类以及配置文件配置
创建与数据库所对应的实体类,创建接口XXXMapper,在接口中定义抽象方法,用于数据库的增删改查,在resource目录下创建config和Mapper文件夹,config用于存放数据库的配置文件,Mapper用于存放数据库的查询语句。
XXXMapper接口如下所示:
import com.cn.dao.User;
import org.apache.ibatis.annotations.MapKey;
import java.util.Map;
public interface UserMapper {
//这里所进行的是多行数据的查询
//单行数据查询可以自己改动
//也可参考https://juejin.cn/post/7024756240710369311#heading-0此篇博客
//博主也是参考此篇博客进行学习的
@MapKey("id")
Map<Integer, User> getElementById();
//博主自己的改动,用于删除的方法
//更多方法还在研究
int deleteUserById(int id);
}
config配置文件如下:
<?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="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--数据库地址 mybatis_test是我的数据库,其他可以更换为自己的-->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/>
<!--数据库账号 -->
<property name="username" value="root"/>
<!--数据库密码 注意更改自己的用户名和密码-->
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--映射文件路径 映射路径可以这样写,但是文件名需要注意,注意自己写的是什么-->
<mapper resource="Mapper/User-Mapper.xml"/>
</mappers>
</configuration>
Mapper格式如下所示
<?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.cn.Mapper.UserMapper">
<!--
namespace:名称空间,指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
Employee getEmpById(int id);
-->
<select id="getElementById" resultType="com.cn.dao.User">
select * from Users
</select>
<!--
删除代码,改插代码可以找AI,后续作者也会进行补充
-->
<delete id="deleteUserById" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
最后一步进行查询
创建test类进行,使用junit的@Test
来写测试方法。:
package com.cn.Query;
import com.cn.Mapper.UserMapper;
import com.cn.dao.User;
//import com.sun.tools.jdeprscan.scan.Scan;
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 org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
//import java.util.Scanner;
public class test {
public static SqlSessionFactory getSqlSessionFactory() throws IOException{
String resource = "config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);//加载资源配置
return new SqlSessionFactoryBuilder().build(inputStream);//返回
}
@Test
public void test() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
UserMapper mapper = openSession.getMapper(UserMapper.class);
//这是查询多条语句,
Map<Integer, User> user = mapper.getElementById();
mapper.deleteUserById(3);
openSession.commit();//提交事务,提交之后才会生效
// System.out.println(user.toString());
for (Integer key : user.keySet()) {
User value = user.get(key);
System.out.println(key + " : " + value);
}
//验证删除语句是否落实
user = mapper.getElementById();
for (Integer key : user.keySet()) {
User value = user.get(key);
System.out.println(key + " : " + value);
}
}finally {
openSession.close();
}
}
}
最后结果如下:
因为核实了删除语句是否执行成功,这里进行了两次查询