思路:搭建环境-->导入MyBatis-->编写代码-->测试
1、搭建环境
创建数据库
CREATE DATABASE mybatis;
use mybatis;表示使用这个数据库
USE mybatis;
创建user表,并添加字段,为什么加``后面会给解释
CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据库中mybatis和`mybatis`的区别
在关系型数据库中,数据表的名称、列名以及其他对象的名称都可以使用不同种类的引号进行封装,包括单引号、双引号和反引号。
MyBatis在SQL语句解析时,对于数据库对象的名称,默认情况下会使用反引号进行封装。这是因为反引号在MySQL中被用作标识符的保留字符,当我们需要使用一些特殊的名称时(例如包含空格或其他特殊字符),就需要使用反引号进行处理,从而避免出现错误。
因此,在使用MyBatis访问MySQL数据库时,mybatis和`mybatis`这两个名称是有区别的,前者表示一个普通字符串,而后者则表示一个经过反引号封装的数据库对象名。在实际应用开发中,如果MyBatis命名规范与数据库设计规范保持一致,也可以不使用反引号来封装数据库对象名称,以提高代码可读性。但如果存在不合法的数据库对象名,则必须使用反引号进行封装,确保SQL能够正确执行。
在表中插入值
INSERT INTO `user`(id,`name`,pwd) VALUES
(1,'张三','123456'),
(2,'李四','121212'),
(3,'王五','1314520')
2、新建Maven项目,导入maven依赖
在mybatis官网可以看到下面这段话
这里我创建的是一个普通Maven项目,从Maven官网仓库导入了复制pom依赖,并粘贴在idea中的
dependencies中,这里可以放多个依赖包
maven官网 ,网址:https://mvnrepository.com/
那么在哪去找依赖呢,那我下来就来带大家找
点击一个最新并且使用的人多的版本
点击后,进入到如下页面
往下翻,可以看到pom依赖
放入到idea中
我这里是建了一个maven项目,删除src,然后再创建一个maven子项目,这样的好处是,下次建子项目,不用再去导包
这是我的包目录
3、编写代码
mybatis依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
数据库依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
Junit依赖,导入包后,可以使用注解测试,无需mian,方法,这就是@Test的简便
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
maven的创建和配置,我有详细介绍,可以看我的上一篇
Maven可能存在资源过滤的问题,可以在pom.xml文件中完善以下配置来防止资源无法导出的问题,资源过滤问题的出现,是因为maven中约定大于配置,所以还要导入配置,避免出现下面的问题
资源问题,需要导入的配置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
编写UserDao接口
package com.qcnel.dao;
import com.qcnel.pojo.User;
import java.util.List;
public interface UserDao {
List<User> getUserlist();
}
编写mapper.xml,并绑定接口
<?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">
<!--namespace绑定一个Dao或Mapper接口-->
<mapper namespace="com.qcnel.dao.UserDao">
<!-- getUserlist接口中的方法-->
<select id="getUserlist" resultType="com.qcnel.pojo.User">
SELECT * FROM USER
</select>
</mapper>
编写实体类
package com.qcnel.pojo;
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
编写公共类
package com.qcnel.utils;
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;
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 使用mybatis第一步,获取SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
// 有了SqlSessionFactory对象,就可以获得SqlSession的实例了
// SqlSession完全包含了面向数据库执行SQL命令所需的所有方法
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
编写mybatis-config.xml文件,这里url的值后面的参数要注意的是,如果导入数据库的依赖包版本是5.0的,需要把useSSL设置为true;8.0的默认为true,当然还有driver的值需要加cj,还要设置时区
<?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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 每一个Mapper.xml都需要在mybatis核心配置中注册-->
<mappers>
<mapper resource="com/qcnel/dao/mapper.xml"/>
</mappers>
</configuration>
编写测试类
import com.qcnel.dao.UserDao;
import com.qcnel.pojo.User;
import com.qcnel.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserDaoTest {
@Test
public void Test(){
// 获取 SqlSession对象
SqlSession sqlSession =MyBatisUtils.getSqlSession();
// 执行SQL
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userlist = userDao.getUserlist();
for (User user : userlist) {
System.out.println(user);
}
// 关闭sqlSession
sqlSession.close();
}
}
运行结果:
总结:mapper.xml绑定UserDao接口,就相当于UserDaoImpl的实现类,pojo类是和数据库的字段做映射,至于utils工具类可以参考官网,目的就是获取资源,相当于获取输入流,然后创建SqlSessionFactory对象,然后就可以创建SqlSession对象;mybatis-config.xml就是配置一些数据库的属性,然后绑定mapper.xml,因为需要连数据库嘛;最后一步就是测试,用sqlSession对象去操作数据库,然后遍历输出在控制台