目录
环境说明
在讲解MyBatis之前,首先说一下JDBC,我相信你一定不陌生吧,JDBC就是用来对数据库进行增删改查操作的,依然记得那些繁琐的SQL语句带来的困扰,而今天的MyBatis就是为简化SQL语句而生的,这里讲解MyBatis的入门,就是让它能在你的编译器上跑起来,这里需要做一些准备,首先就是MySQL8.0,然后是JDK8,编译器这里以IDEA为例,构建项目用的是Maven3.6.1
好了,环境统一好了之后,就开始步入正题吧,如果环境不一致,应该问题不大,但不确定一定能跑起来
创建Maven项目
首先用IDEA构建Maven项目,这里不用勾选Maven提供的模板,GroupId和ArtifactId如下
直接一路next即可,构建好之后,如下图
创建数据库表
当构建好一个空的Maven项目之后,就可以开始搭建MyBatis的操作了,因为我们是要进行数据库的操作,所以这里我们先在MySQL中建一个数据库,并创建一个user表
创建数据库
create database mybatis;
使用该数据库
use mybatis;
创建user表
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入三条用户信息
insert into user values(1,'张三','123');
insert into user values(2,'李四','456');
insert into user values(3,'王二','789');
创建实体类
到此,数据库中的表就建好了,然后我们需要去项目中创建相应的类,也就是我们的user实体类,放在java下的com.zhiying.pojo包下,如下图
实体类如下
package com.zhiying.pojo;
public class User {
private int id;
private String username;
private String password;
public User() {
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = 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 + '\'' +
'}';
}
}
配置jar包坐标
接下来就是去Maven中的pop.xml文件,导入相应的jar包,这里导入一个mybatis的jar包,然后是mysql-connector-java的jar包,这里给出pop.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>com.zhiying</groupId>
<artifactId>speakmybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
</dependencies>
</project>
连接数据库
当jar包导好之后,我们开始对数据库进行建立连接,建立连接的时候,需要在resource目录下新建一个file文件,最好命名为
mybatis-config.xml,如下图
其中的内容如下,这里需要我们注意的是四个参量,分别是driver,url,username,password,具体如下
<?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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?
userSSL=false&useUnicode=true&characterEncoding=UTF-8&
serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
创建dao层接口
数据库也连好了,然后我们就开始进行dao层的处理了,也就是写dao层的接口,这里在com.zhiying.dao下建一个UserMapper类截图和代码如下:
package com.zhiying.dao;
import com.zhiying.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> getUserList();
}
创建dao层接口的配置文件
写好这个接口之后,按我们的JDBC就是写这个接口的实现类,但是这里不用写实现类了,写一个对应的配置文件即可,这里在resources资源目录下建一个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.zhiying.dao.UserMapper">
<select id="getUserList" resultType="com.zhiying.pojo.User">
select * from user
</select>
</mapper>
建立dao层与数据库的联系
配置好这个之后,你刚刚配置的resources目录下的mybatis-config.xml文件就要修改一下了,原因就是你配置的mapper它需要知道呀,毕竟人家这配置的都是与数据库打交道的东西嘛,好了,改完后的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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?
userSSL=false&useUnicode=true&characterEncoding=UTF-8&
serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
创建SqlSession工厂
好了,接下来就需要配置我们的SqlSessionFactory了,这个工厂故名思意就是用来创建SqlSession的,而这个SqlSession实例就是包含了执行sql命令所需的所有方法,好了,先说工厂怎么建吧,建工厂嘛,首先我们在java下建一个com.zhiying.utils包,并在这里建一个MybatisUtils类,该类就是用来创建SqlSession实例的,目录和源码如下
package com.zhiying.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 {
//获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e) {
e.printStackTrace();
}
}
//获取SqlSession实例,其包含了面向数据库执行SQL命令所需的所有方法
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
创建SqlSession实例测试
到这里,工厂也建好了是不是要生产实例了,生产实例,这里我们在test目录下进行生产测试,包和源码如下
package com.zhiying.dao;
import com.sun.org.apache.xpath.internal.SourceTree;
import com.zhiying.pojo.User;
import com.zhiying.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class UserMapperTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
结果如下
这里是查询操作,不需要提交事务,在进行增删改操作的时候,记得提交事务,sqlSession.commit
都到这了,简单演示一下吧,在dao层的UserMapper类下,创建一个接口,如下
package com.zhiying.dao;
import com.zhiying.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> getUserList();
int addUser(User user);
}
当然了需要配置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.zhiying.dao.UserMapper">
<select id="getUserList" resultType="com.zhiying.pojo.User">
select * from user
</select>
<insert id="addUser" parameterType="com.zhiying.pojo.User">
insert into user values (#{id},#{username},#{password});
</insert>
</mapper>
好了开始测试吧,测试代码如下
package com.zhiying.dao;
import com.sun.org.apache.xpath.internal.SourceTree;
import com.zhiying.pojo.User;
import com.zhiying.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class UserMapperTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// List<User> userList = userDao.getUserList();
// for (User user : userList) {
// System.out.println(user);
// }
int num = userMapper.addUser(new User(4,"hzy","123"));
sqlSession.commit(); //这句话在增删改中不能少,
System.out.println(num);
sqlSession.close();
}
}
结果如下,有点看不出来什么,再执行一下查询如右图