您现在的位置是:首页 >技术教程 >mybatis的基本使用和理解网站首页技术教程

mybatis的基本使用和理解

@湖 2023-06-03 12:00:03
简介mybatis的基本使用和理解

mybatis的基本使用和理解

Lombok的使用(使用注解的方式将实体类中的get、set、构造函数代替)

Lombok是一个Java库,能自动插入编辑器并且构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或equals方法,同时可以自动化日志变量。

即使用lombok就不需要再get,set,使用注解的方式对get,set进行代替

第一步在pom中加载lombok的jar包

然后到file–>settings–>pluging 中搜lombok下载插件

注意:在idea2020以后的版本是本身自带的,不需要进行下载,导入依赖即可使用

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>

使用pojo示例如下:

package com.etime.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//注入无参构造函数
@NoArgsConstructor
//注入全参构造函数
@AllArgsConstructor
//注入所有get,set,equals,toString等方法
@Data
public class Student {
    private int sid;
    private String sname;
    private String sgender;
    private int sage;
    private String semail;
    private String sphoto;
}

lombok常用注解

@Setter 注解在类或字段,注解在类上时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
@Getter 使用方法和上面一样,区别在于getter方法。
@ToString 注解在实体类,添加toString方法。
@EqualsAndHashCode 注解在类上时,生成hashCode和equals方法
@NoArgsConstructor 注解正在类,生成无参的构造函数。
@RequireArgsConstructor 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段
@Data 注解在类,生成setter/getter 、equals、canEqual、hashCode、toString方法,如final属性,则不会为该属性生成setter方法

mybatis简介

MyBatis本是apachee 的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis.2013年11月迁移到Github。

iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects (DAOs)。

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或者注解来配置和映射原生信息,将接口和Java的POJOs(Plain Ordinary Java Object,普通的Java对象)映射成数据库中的记录。

让操作数据库变得更加的简单。

mybatis的基本使用

创建Maven工程,对pom.xml进行基本的配置,并导入依赖

如图:
在这里插入图片描述

<dependencies>
<!--        添加lombok依赖工具使用其中的注解方法可以让实体类中get,set,以及实体类中操作少一些-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
        
<!--        添加和引入mybatis的版本号等依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
        
<!--        这里添加mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
            <scope>runtime</scope>
        </dependency>
        
<!--        如果不需要也可不进行单元测试的依赖引入-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

编写实体类Student.java

package com.etime.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//添加无参构造函数
@NoArgsConstructor
//添加全参数构造函数
@AllArgsConstructor
//添加所有需要的get,set等方法
@Data
public class Student {
    private int sid;
    private String sname;
    private String sgender;
    private int sage;
    private String semail;
    private String sphoto;
}

编写dao层的StudentDao.java类接口

添加查询所有学生信息方法

//查询所有学生信息
    List<Student> getAllStudents();

编写dao层的映射文件创建关于查询所有学生信息进行sql映射

编写StudentMapper.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">

编写StudentMapper.xml:

<!--namespace是当前mapper对应的dao接口-->
<mapper namespace="com.etime.dao.StudentDao">
<!--    select指定当前进行数据库操作的是查询-->
<!--    id的值对应的是当前dao层接口中的方法名字-->
<!--    resultType指定当前查询得到的数据要封装成的类型-->
    <select id="getAllStudents" resultType="com.etime.pojo.Student">
        select  * from student
    </select>
</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>
<!--    配置 mybatis的环境-->
    <environments default="development">
<!--        配置环境-->
        <environment id="development">
<!--            配置事物类型-->
            <transactionManager type="JDBC"></transactionManager>
<!--            配置连接数据库的信息:用的是数据源[连接池]-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--                jdbc:mysql://localhost:3306/db_school?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC-->
<!--                和javaWeb servlet三层架构中的区别这里是只需要设置时区就可以了-->
                <property name="url" value="jdbc:mysql://localhost:3306/db_school?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="h123456"/>
            </dataSource>
        </environment>
    </environments>
<!--    注册StudentDao接口映射文件位置-->
    <mappers>
        <mapper resource="mapper/StudentMapper.xml"/>
    </mappers>
</configuration>

编写测试代码:

package com.etime.test;

import com.etime.dao.StudentDao;
import com.etime.pojo.Student;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MybatisTest {
    @Test
    public void t01() throws IOException {
        //加载配置文件
        InputStream in = Resources.getResourceAsStream("config.xml");
        //用于读取配置文件内容,生成SqlSessionFactory
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(in);
        //获取SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取StudentDao对象
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        //调用方法获取结果
        List<Student> list = studentDao.getAllStudents();
        for (Student student:list) {
            System.out.println(student);
        }
        //关闭SqlSession
        sqlSession.close();
    }
}

运行结果:

在这里插入图片描述

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。