初识Mybatis
一、Mybatis简介
MyBatis 其实是apache的一个开源项目iBatis 。(未来我们编写代码的时候,导入包的时候,包名叫iBatis)
MyBatis:需要在 Github 上下载!目前不需要下载,知道下载地址即可。
GitHub地址:https://github.com/mybatis/mybatis-3
当前,最新版本是MyBatis 3.5.4 ,其发布时间是2020年2月4日。
官网地址:https://mybatis.org/mybatis-3/
进入官网便知道Mybatis简介!
总结
MyBatis特性:
- MyBatis 是一款优秀的持久层框架
- 它支持定制化 SQL、存储过程以及高级映射。
- MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
- MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二、第一个MyBatis程序
1.准备一个数据库
CREATE DATABASE `mybatis`
USE `mybatis`
CREATE TABLE `user`(
`id` INT(20) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`password` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user`(`id`,`name`,`password`)
VALUES (1,'周周','123456'),(2,'莹莹','zxcvbn'),(3,'酱酱','123456');
SELECT * FROM `user`
2.Maven项目的pom.xml中导入需要的jar包(加入仓库)
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- 用于数据库https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<!--用于实体类的注解-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
3.编写 mybatis-config.xml 配置文件,并配置数据库连接
进入Mybatis官网的入门,如图
配置文件为什么叫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="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=true&useUnicode=true&characterEncoding=utf8&"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--这里的mappers先删掉,后面讲解-->
</configuration>
4.编写编写一个工具类操作数据库
依据如图的蓝色框住的代码编写一个工具类
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 {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//工厂模式
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取sqlSession的连接
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
5.配置了一个实体类,引入了Lombok仓库
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
private String password;
}
6.创建持久层的操作接口
import com.cm.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> getUserList();
}
7.编写UserMapper.xml配置文件
原来我们需要编写接口实现类,使用了Mybatis之后,我们可以专注编写SQL,使用配置文件
- 好处,程序运行起来之后,我依旧可以动态修改代码,体现了解耦性。
具体操作:
依据图中的信息
在resources目录下编写与UserMapper
接口同一个包名的UserMapper.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">
<mapper namespace="com.cm.mapper.UserMapper">
<select id="getUserList" resultType="com.cm.pojo.User">
select * from user
</select>
</mapper>
注意点:
1、namespace
绑定对应的接口;
2、<select id="getUserList" resultType="">
,这里id为接口中的方法,resultType为实体类。
8.UserMapper.xml
配置文件一定要注册到Mybatis的mybatis-config.xml
配置文件中
<mappers>
<mapper resource="com/cm/mapper/UserMapper.xml"></mapper>
</mappers>
9.测试运行
import com.cm.mapper.UserMapper;
import com.cm.pojo.User;
import com.cm.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class Test {
public static void main(String[] args) {
// 1、 获取SqlSession,用于执行sql
SqlSession session = MybatisUtils.getSession();
// 2、通过 session.getMapper(Class) 获得接口
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for(User user : userList) {
System.out.println(user);
}
}
}
以上步骤全部仔细走一遍后,希望你们看看你们的文件创建路径是否与我的一致(名称可以不一样,除了mybatis-config.xml
配置文件),如图:
运行结果
可能遇到的问题:
问题是:数据库时区不对。
解决方法:将mybatis-config.xml配置文件中的这里添加serverTimezone=Asia/Shanghai
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"/>
是因为
<mappers>
<mapper resource="com/cm/mapper/UserMapper.xml"></mapper>
</mappers>
mappers中的resource中的"com/cm/mapper/UserMapper.xml"
路径与你在resources下建立的UserMapper.xml配置文件路径不匹配。
正确路径:
以上便是初步了解Mybatis,后续会继续更新它的更多知识点。