转载声明:文章来源https://blog.csdn.net/heyl163_/article/details/134032103
准备工作
数据库版本说明
在开始本篇文章之前,需要提前创建好相关的数据库和表。文章使用的mysql版本为MariaDB 10.6,对应mysql版本为8.0,所以mybatis-config.xml中驱动不一样。
mysql 8.0之前的数据库驱动类为
com.mysql.jdbc.Driver
mysql 8.0之后的数据库驱动类为
com.mysql.cj.jdbc.Driver
创建数据库表
创建一个数据库mybatis,并在数据库下创建user表,执行以下SQL脚本即可。
/*
Navicat Premium Data Transfer
Source Server : MariaDB
Source Server Type : MariaDB
Source Server Version : 100605 (10.6.5-MariaDB)
Source Host : 127.0.0.1:3306
Source Schema : mybatis
Target Server Type : MariaDB
Target Server Version : 100605 (10.6.5-MariaDB)
File Encoding : 65001
Date: 24/10/2023 23:57:18
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '12345' COMMENT '密码',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'mumu', '12345');
INSERT INTO `user` VALUES (2, 'system', '12345');
SET FOREIGN_KEY_CHECKS = 1;
快速开始
首先,需要找到mybatis的官网
如图,根据官网的步骤开始使用mybatis
1、创建项目
在IntelliJ IDEA中创建一个maven项目java-mybatis
2、添加依赖
修改pom.xml,添加要使用到的依赖。
<?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>cn.edu.sgu.www</groupId>
<artifactId>java-mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
</dependencies>
</project>
本篇文章使用的mybatis是最新的版本,更多版本可以通过maven仓库搜索
3、准备工作
创建数据库实体类
在项目src/main/java包下创建多级包cn.edu.sgu.www.entity包,在entity包下创建User.java
package cn.edu.sgu.www.entity;
import lombok.Data;
import java.io.Serializable;
/**
* @author heyunlin
* @version 1.0
*/
@Data
public class User implements Serializable {
private static final long serialVersionUID = 42L;
private String id;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
}
创建持久层接口
在项目src/main/java包下创建多级包cn.edu.sgu.www.mapper包,在entity包下创建接口UserMapper.java
package cn.edu.sgu.www.mapper;
import cn.edu.sgu.www.entity.User;
import java.util.List;
/**
* @author heyunlin
* @version 1.0
*/
public interface UserMapper {
/**
* 查询全部用户
* @return List<User>
*/
List<User> selectAll();
}
创建mapper.xml
紧接着,在src/main/resources目录下也创建多级目录cn.edu.sgu.www.mapper,目录结构和UserMapper.java接口的路径保持一致。
<?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="cn.edu.sgu.www.mapper.UserMapper">
<select id="selectAll" resultType="cn.edu.sgu.www.entity.User">
select * from user
</select>
</mapper>
创建mybatis-config.xml
根据官网在resources目录下创建一个mybatis的配置文件,文件名可以任意命名,在这里就命名为mybatis-config.xml
mybatis-config.xml的内容,用户名、密码以及数据库名根据自己实际情况修改
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="username" value="root" />
<property name="password" value="root" />
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="cn.edu.sgu.www.mapper.UserMapper" />
</mappers>
</configuration>
4、构建SqlSessionFactory
在cn.edu.sgu.www包下面创建一个MybatisExample类。
从XML中构建
package cn.edu.sgu.www;
import cn.edu.sgu.www.entity.User;
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;
import java.util.List;
/**
* @author heyunlin
* @version 1.0
*/
public class MybatisExample {
public static void main(String[] args) throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list = sqlSession.selectList("cn.edu.sgu.www.mapper.UserMapper.selectAll");
System.out.println(list);
}
}
不使用XML构建
如下图所示,官网提供的代码中,第一行代码获取数据源的工厂类很显然是自己写的,我们要用其他方式获取数据源对象。
查看Datasource有那些子类,博主看这个PooledDataSource比较顺眼,就用了它。
于是修改MybatisExample的代码
package cn.edu.sgu.www;
import cn.edu.sgu.www.entity.User;
import cn.edu.sgu.www.mapper.UserMapper;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import javax.sql.DataSource;
import java.util.List;
/**
* @author heyunlin
* @version 1.0
*/
public class MybatisExample {
public static void main(String[] args) {
DataSource dataSource = new PooledDataSource(
"com.mysql.cj.jdbc.Driver",
"jdbc:mysql://localhost:3306/mybatis",
"root",
"root"
);
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(UserMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list = sqlSession.selectList("cn.edu.sgu.www.mapper.UserMapper.selectAll");
System.out.println(list);
}
}
5、调用mapper接口方法
方法一
上面已经提供了一种方法:通过SqlSession的selectXxx()方法
List<User> list = sqlSession.selectList("cn.edu.sgu.www.mapper.UserMapper.selectAll");
System.out.println(list);
方法二
通过SqlSession的getMapper()方法获取UserMapper对象,直接通过对象调用方法。
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> list = userMapper.selectAll();
System.out.println(list);
6、绑定SQL语句
通过mapper.xml绑定
上面用的方式就是通过mapper.xml绑定。
通过注解绑定
UserMapper.java
package cn.edu.sgu.www.mapper;
import cn.edu.sgu.www.entity.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author heyunlin
* @version 1.0
*/
public interface UserMapper {
/**
* 查询全部用户
* @return List<User>
*/
@Select("select * from user")
List<User> selectAll();
}
UserMapper.xml
使用了注解绑定,就不能再用mapper.xml绑定,要注释掉selectAll方法的statement
<?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="cn.edu.sgu.www.mapper.UserMapper">
<!-- <select id="selectAll" resultType="cn.edu.sgu.www.entity.User">-->
<!-- select * from user-->
<!-- </select>-->
</mapper>
注意,两种方式不能一起使用,否则会报错。
所以用了注解就要注释掉UserMapper.xml里对应的的statement
包名错误
最后,要注意UserMapper.xml文件是在多级包下的,不能像java包一样直接输入cn.edu.sgu.www.mapper创建。
直接包名输入cn.edu.sgu.www.mapper创建会创建一级包,包名就是cn.edu.sgu.www.mapper
并且,在idea里是看不出来的!
帖子还没人回复快来抢沙发