今天学了一点大概,但大概只是整个mybatis学习的1/10,我之所以想要重学一遍的原因是,我忘了。哈哈哈,但是以现在的角度去学习,我会更能够理解它的底层知识。希望这篇文章能够帮助你更好的入门。
趁着年轻多多投资自己的大脑总归是不会错滴(这是狂神老师说的,我觉得很有道理),我们一起加油呀~
__________________________ / \ |I hope you happy,always! \__ __ __ __ __ __ __ __ __/ | / __w |/ (\{\ ,%%%% .-. __ { { \.%%%_/ ,_* _ / \ / \ { { \%%/(___// / \| |/ | { {\,%%%|[))-' : \ / _/_ {/{/\,%%)\( _\_ \_|_.' '. '%]\\ : '-( )_____.' (('] '.__/'--\ \ \yI\ / | \ ) (/ (\ / / |'-: 7 k\ '--'\__/ \ \ J' `L_ \ \ \ \
MyBatis-9.28
SSM框架:配置文件的。查看官网
1、简介
1.1、什么是Mybatis
如何获得:
1.去github里面搜索
2.Maven 仓库
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
3.中文文档mybatis – MyBatis 3 | 入门
1.2、持久化
1.3、持久层
1.4、为什么需要Mybatis?
2、第一个Mybatis程序
大部分框架的学习都是按照下面的思路来走的。
搭建环境->导入依赖->创建工程->测试
2.1、搭建数据库:
CREATE DATABASE `mybatis`
use `mybatis`
CREATE TABLE `user`(
`id` int(20) not null PRIMARY KEY,
`name` VARCHAR(30) DEFAULT null,
`pwd` VARCHAR(30) DEFAULT null
)ENGINE=INNODB DEFAULT charset=utf8;
insert into `user`(`id`,`name`,`pwd`) VALUES(1,'张三','123456'),(2,'张四','1234567'),(3,'张五','12345678')
2.2、创建项目:(Maven类型的就行-普通版)
2.3、删掉src包
这样做得好处是,在父工程中导入得依赖可以直接在子工程中使用,比较方便
2.4导入依赖
这里导入的主要是mysql,mybatis,junit。
<!--导入依赖-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<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>5.1.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
2.5、创建一个模块
给他命名为Mybatis01。然后建立三个包,分别是mapper,pojo,utils包,并分别建立几个类和核心依赖配置文件。如下图所示:
2.6、连接数据库
这里连接数据库的时候,需要注意的是下面图片箭头所指的方向不要填,后面再选数据库名就可以了。
2.7、编写mybatis工具类
为了方便使用,代码如下:
这个代码的主要目的是为了得到SqlSession,方便测试类。
package com.zhang.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;
//sqlSession-->sqlSession
public class MybatisUtils {
//放在static静态代码块里面,起到一个首先加载的作用
public 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();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
2.8、建立mapper文件,里面是接口及相关得xml配置
主要是Usermapper,和UserMapper.xml。前者里面是接口方法,后者的话就相当于是它的一个实现类,但是是通过配置文件来完成的。二者之间的联系通过namespace=" 全限命名",下面是狂神老师的截图,但是我的代码会和它有些出入。
代码如下:
UserMapper
package com.zhang.mapper;
import com.zhang.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> getUser();
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--resultType返回的是一个集合类型,这里就是User-->
<mapper namespace="com.zhang.mapper.UserMapper">
<select id="getUser" resultType="com.zhang.pojo.User">
select * from mybatis.user
</select>
</mapper>
2.9、实体类pojo
这个比较简单,就直接上代码了。但是需要注意的是,里面的变量名必须和数据库中表的名称保持一致。不一致也行,还是得改。
package com.zhang.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 + '\'' +
'}';
}
}
2.10、测试类:
当所有的步骤都完成以后,我们就可以新建一个测试类了,在这里测试类是放在maven项目的test包下的。为了方便测试,我们需要新建和mapper文件下差不多的包,保证其一个规范性。如图所示:
然后就是编写测试类,首先我们先拿到SqlSession这个对象,先调用Mybatis里面的getSqkSession()方法,然后调用它的getMapper(接口类),注意这里是接口,所以我们也需要返回其相对应的类型。代码图片如下:
代码:
package com.zhang.mapper;
import com.zhang.pojo.User;
import com.zhang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class test {
@Test
public void test1() {
SqlSession session= MybatisUtils.getSqlSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> userList=mapper.getUser();
for (User user : userList) {
System.out.println(user);
}
session.close();
}
}
然后就开始点击测试了。不出意外的话,会出现下面的结果。
但是如果运气不太好的话,就会出现下面的两个错误,或者其他。
2.11、两个错误:
1、配置文件mapper没有在Mybatis-config.xml中注册
这个的问题就是在Mybatis-config.xml中,没有下面这一行代码,又或者是写错了
<mappers>
<mapper resource="com/zhang/mapper/UserMapper.xml"/>
</mappers>
需要注意的是,resource中 的 / 不能用点 . 来代替,用了之后就会出现我这里写的第二个问题,也就是资源过滤问题。
2、资源过滤问题
Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com.zhang.mapper.UserMapper.xml
这里的话,如果不是 / 写错了,那就是真的资源配置有问题了,我们可以查看target包,看其下对应的mapper包对应的两个文件是否都在,不在的话那就需要下面的代码进行配置了。如果你的IDEA上面没有target包的话,请先将该项目打包一下,如果还是没有,那就说明你的target包被隐藏了,请按下面的步骤图片进行操作。
最好是子与父的pom.xml都配置一下。
代码:
<!--解决资源过滤问题-->
<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>
下面是狂神老师总结的我们会碰到的问题,那么你中标了吗?
这个是SqlSessionFactoryBuilder和SqlSessionFactory以及SqlSession的作用及内涵(嗯,应该是可以这么说的)
用try-catch 只是个建议(下面)
Ok,今日份的笔记分享就先到这了,希望大家能有个愉快的学习过程,加油呀!