> 文章列表 > mybatis的基本使用和理解

mybatis的基本使用和理解

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 mapperPUBLIC "-//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 configurationPUBLIC "-//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 {@Testpublic void t01() throws IOException {//加载配置文件InputStream in = Resources.getResourceAsStream("config.xml");//用于读取配置文件内容,生成SqlSessionFactorySqlSessionFactoryBuilder 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);}//关闭SqlSessionsqlSession.close();}
}

运行结果:

在这里插入图片描述