今天学了一点大概,但大概只是整个mybatis学习的1/10,我之所以想要重学一遍的原因是,我忘了。哈哈哈,但是以现在的角度去学习,我会更能够理解它的底层知识。希望这篇文章能够帮助你更好的入门。
趁着年轻多多投资自己的大脑总归是不会错滴(这是狂神老师说的,我觉得很有道理),我们一起加油呀~
__________________________ / \ |I hope you happy,always! \__ __ __ __ __ __ __ __ __/ | / __w |/ (\{\ ,%%%% .-. __ { { \.%%%_/ ,_* _ / \ / \ { { \%%/(___// / \| |/ | { {\,%%%|[))-' : \ / _/_ {/{/\,%%)\( _\_ \_|_.' '. '%]\\ : '-( )_____.' (('] '.__/'--\ \ \yI\ / | \ ) (/ (\ / / |'-: 7 k\ '--'\__/ \ \ J' `L_ \ \ \ \
SSM框架:配置文件的。查看官网
如何获得:
1.去github里面搜索
2.Maven 仓库
org.mybatis
mybatis
3.5.13
3.中文文档mybatis – MyBatis 3 | 入门
大部分框架的学习都是按照下面的思路来走的。
搭建环境->导入依赖->创建工程->测试
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')
这样做得好处是,在父工程中导入得依赖可以直接在子工程中使用,比较方便
这里导入的主要是mysql,mybatis,junit。
org.mybatis
mybatis
3.5.2
mysql
mysql-connector-java
5.1.47
junit
junit
4.12
给他命名为Mybatis01。然后建立三个包,分别是mapper,pojo,utils包,并分别建立几个类和核心依赖配置文件。如下图所示:
这里连接数据库的时候,需要注意的是下面图片箭头所指的方向不要填,后面再选数据库名就可以了。
为了方便使用,代码如下:
这个代码的主要目的是为了得到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();
}
}
主要是Usermapper,和UserMapper.xml。前者里面是接口方法,后者的话就相当于是它的一个实现类,但是是通过配置文件来完成的。二者之间的联系通过namespace=" 全限命名",下面是狂神老师的截图,但是我的代码会和它有些出入。
代码如下:
UserMapper
package com.zhang.mapper;
import com.zhang.pojo.User;
import java.util.List;
public interface UserMapper {
List getUser();
}
UserMapper.xml
这个比较简单,就直接上代码了。但是需要注意的是,里面的变量名必须和数据库中表的名称保持一致。不一致也行,还是得改。
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 + '\'' +
'}';
}
}
当所有的步骤都完成以后,我们就可以新建一个测试类了,在这里测试类是放在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 userList=mapper.getUser();
for (User user : userList) {
System.out.println(user);
}
session.close();
}
}
然后就开始点击测试了。不出意外的话,会出现下面的结果。
但是如果运气不太好的话,就会出现下面的两个错误,或者其他。
这个的问题就是在Mybatis-config.xml中,没有下面这一行代码,又或者是写错了
需要注意的是,resource中 的 / 不能用点 . 来代替,用了之后就会出现我这里写的第二个问题,也就是资源过滤问题。
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都配置一下。
代码:
src/main/resources
**/*.properties
**/*.xml
true
src/main/java
**/*.properties
**/*.xml
true
下面是狂神老师总结的我们会碰到的问题,那么你中标了吗?
这个是SqlSessionFactoryBuilder和SqlSessionFactory以及SqlSession的作用及内涵(嗯,应该是可以这么说的)
用try-catch 只是个建议(下面)
Ok,今日份的笔记分享就先到这了,希望大家能有个愉快的学习过程,加油呀!