MyBatis是支持普通SQL查询、存储过程和高级映射的优秀持久层框架。它是对JDBC的再封装,几乎避免所有的JDBC代码和参数的手工设置以及对结果集的检索。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects, 普通的Java对象)映射成数据库中的记录。
下面是Mybatis官网的介绍:
什么是 MyBatis ?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
1、准备工作,下载Mybatis所依赖的和JDBC驱动的Jar包(下载自己需要的版本):
今天微软收购了Github(吐个槽)
接下来下载jdbc驱动jar包:
一开始加载可能有点慢,然后点击下载后就可以跳过注册直接下载:
下载好了,我们得到两个zip包,分别解压它们:
然后准备工作就做好了,这种方式比较原始,如果使用Maven就不用这么麻烦!
2、在eclipse 中新建一个JavaProject, 项目名合法任意,点击Finish:
3、在项目名上右击新建一个目录(Folder),取名为lib,并将第一步中解压好的两个目录中的所需jar包拷贝到这个目录中(Mybatis目录下mybatis-3.4.6.jar以及mysql-connector目录下的
mysql-connector-java-8.0.11.jar);然后右键这些jar包,选择Build Pah——>Add to Build Pah,将这些jar包添加到目录的构建路径中,完成如图:
4、准备数据库,在mysql的(新建)testdb库中新建users表:
create database testdb;
use testdb;
create table users(
id int auto_increment not null,
username varchar(20) not null,
password varchar(20),
primary key(id)
);
插入两条数据:
5、具体编码:
①在src目录下新建mybatis和mapper目录,在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">
<!-- 注意填写自己的mysql用户名和密码, 还有连接的url要加上"?serverTimezone=GMT%2B8"不然会报错 -->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/testdb?serverTimezone=GMT%2B8" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/userMapper.xml"/>
</mappers>
</configuration>
②在mapper目录下新建SQL映射文件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="mapper.userMapper">
<select id="getUser" resultType="entity.User" parameterType="int">
select * from users where id=#{id}
</select>
</mapper>
③新建实体类,在src下新建一个包entity并在内新建一个类User:
package entity;
public class User {
int id;
String username;
String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User[id = " + id + ", username = " + username +", password = "+
password + "]";
}
}
④在src目录下新建测试类Main:
import java.io.IOException;
import java.io.InputStream;
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 entity.User;
public class Main {
public static void main(String[] args) throws IOException {
String resource = "mybatis/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
String statement = "mapper.userMapper.getUser";
User user = sqlSession.selectOne(statement, 1);
sqlSession.close();
System.out.println(user);
}
}
最后的项目结构如下:
6、运行结果,搜索到第一条结果因为调用了函数selectOne()的关系:
总结:
这次使用了纯Java项目体验MyBatis,旨在熟悉这个流程,后面会有具体探索。
而最大的改变就是使用了最新的环境(尤其是mysql-connector),导致有两处改动(mybatis-config.xml中):
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/testdb?serverTimezone=GMT%2B8" />
看来得活到老,学到老!