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();
}
}
运行结果: