【狂神】MyBatis(第一个Mybatis程序)

今天学了一点大概,但大概只是整个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,今日份的笔记分享就先到这了,希望大家能有个愉快的学习过程,加油呀!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值