Mybatis-入门演示

MyBatis:持久层框架

前言

之前有看过和学习一些mybatis的文章和内容,但是没有去写过文章记录下,现在借鉴b站的狂神视频和官方文档看来重新撸一遍入门。有错误请多指教。

内容

数据访问层-相当于之前web项目中dao层,数据库的交互,包括增删改查;

持久化就是将数据在持久状态和瞬时状态转化的过程。内存是断电即失。所以需要数据的持久化。

JDBC技术:Connection、PrepareStatement、ResultSet.

为什么要使用框架代替jdbc呢?

​ 因为之前的jdbc的操作总是是重复单一的,在开发的时候要执行sql语句直接操作数据库,要经过加载驱动等操作,为了高效的开发,避免繁琐的操作,框架就诞生了。框架对jdbc进行封装,mybatis只需关注sql语句直接操作数据库,封装了操作的很多细节,这样可以将更多时间精力放在sql语句的编写上。

特点:灵活容易上手,用的多,封装jdbc;MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

演示使用

现在演示mybatis的一个helloworld程序,看看是怎么样去使用。

pom.xml

整个项目的maven管理文件。



    4.0.0

    com.yhy.learn
    mybatisDemo
    pom
    1.0-SNAPSHOT
    
        mybatis-01
    

    
        
            org.mybatis
            mybatis
            3.5.4
        

        
        
            mysql
            mysql-connector-java
            8.0.15
        

        
            junit
            junit
            4.12
        

    

    
        
            
                src/main/resources
                
                    **/*.xml
                    **/*.properties
                
            

            
                src/main/java
                
                    **/*.xml
                    **/*.properties
                
            
        
    




工具类

package com.yhy.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.Configuration;
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;

/**
 * @Author: yhy
 * @Date: 2020/5/12
 * @Time: 11:45
 * 工具类
 * 获取sqlsession工厂
 */
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
//            利用mybatis在一开始就获得了sqlsessionfactory
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
//    有了工厂就可以获得实例来使用,sqlsession就可以面向数据库操作jdbc
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }



}

pojo的user类

映射数据库的user表

package com.yhy.pojo;

/**
 * @Author: yhy
 * @Date: 2020/5/12
 * @Time: 10:58
 * 用户表的pojo层
 */
public class User {
    private int id;
    private String name;
    private String 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;
    }

}

dao层的UserDao接口

package com.yhy.dao;

import com.yhy.pojo.User;

import java.util.List;

public interface UserDao {
    List getUserList();
}

dao的接口实现xml

用这个文件代替了之前dao层中的接口实现类,之前的话需要编写jdbc的全部,查询编写sql,获取结果集,遍历结果集,关闭连接。现在的话就是简化了步骤。






    
    


mybatis-config.xml

这个是关键的配置文件,决定了连接的对象以及设定了作用域




    
        
    
    
        
     //事务管理       
            
            
                
                
                
                
            
        
    
    //作用域,删掉就是全局
    //这里的配置可以是直接放在resource文件下,就直接写上xml名称就行,放在dao层的话就需要写全路径
    
        
    

测试

package com.yhy.dao;

import com.yhy.pojo.User;
import com.yhy.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * @Author: yhy
 * @Date: 2020/5/12
 * @Time: 12:15
 */
public class UserDaoTest {
//借调工具类来使用测试
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List userList = mapper.getUserList();

        for (User u: userList){
            System.out.println(u);

        }

        sqlSession.close();


    }


}

先将结果贴在下面

Mybatis-入门演示_第1张图片

演示两种mappers作用效果

  • 1.将UserMapper.xml放在dao层下,跟着userdao配置就和我上面写的一样。最后效果如下,但是前提是你得在你项目的pom.xml设置好有效的作用域,要不然就疯狂报错,说找不到这个UserMapper.xml文件。
    Mybatis-入门演示_第2张图片
    pom.xml需要配置如下,这里是配置能够得读取到src下的有效配置文件。

    
        
            src/main/resources
            
                **/*.xml
                **/*.properties
            
        

        
            src/main/java
            
                **/*.xml
                **/*.properties
            
        
    

  • 2.是直接将UserMapper.xml放在src下的resource文件下,和总的mybatis-config.xml配置文件放置在一起。这样在mybatis-config.xml里面就直接如下这样写文件名就行了。
 

Mybatis-入门演示_第3张图片

最后效果和第一种方法是一样的,都能够读取到数据。

  • 个人觉得这两种方法来说,第一种可以对项目的整体设计管理更加方便一点,就像接口和实现类都是靠近的,方便进一步的审查和优化,第二种在做小的demo的时候是很方便的,但是一旦多个配置文件时候就可以有点难找。

记录错误

  1. maven创建项目一开始经常会有的错误,就是设定的jdk版本问题,一开始我都是手动去修改project的setting,比较麻烦。默认的版本一般是jdk1.4或者是jdk1.5,但大家往往不是这个版本,所以会报错不支持发行版本5什么的。

解决:现在记录下,永久得起配置好。到自己maven下载文件夹下找到配置文件,并在里面修改settings.xml

Mybatis-入门演示_第4张图片

Mybatis-入门演示_第5张图片

修改:如下,我的是jdk11。所以可以根据自己的版本来修改。

Mybatis-入门演示_第6张图片

初步学习

测试代码中的几个关键类,三者的关系都是从上到下生成。

Mybatis-入门演示_第7张图片

SqlSessionFactoryBuilder这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。

SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例,这样也是开发的规范。

每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域,同时好的开发习惯,要在使用之后,将其关闭。

你可能感兴趣的:(Mybatis-入门演示)