Mybatis入门
V哥官网:http://www.vgxit.com
本文对应视频教程:http://www.vgxit.com/course/22
1,什么是Mybatis
MyBatis 本来是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。(引用自百度百科)
读了上面的这段话,同学们有没有感觉?Mybatis用大白话来说,其实就是一个数据库访问的框架,能够帮我们简化数据库的操作。
2,什么是持久层
持久层可以将业务数据存储到磁盘,具备长期存储能力,只要磁盘不损坏(大部分的重要数据都会有相关的备份机制),在断电或者其他情况下,重新开启系统仍然可以读取这些数据。 般执行持久任务的都是数据库系统,持久层可以使用巨大的磁盘空间,也比较廉价,它的缺点就是比较慢。
3,lombok插件介绍
Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。(百度百科)
用大白话来讲,Lombok可以通过几个注释在编译的时候为我们的JavaBean动态的生成get,set,tostring,无参构造方法,全参数构造方法,基于builder的创建方式。
lombok具体使用步骤:
1,引入lombok对应的maven坐标:
(1),首先在父工程中引入坐标:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
(2),在子工程中具体引入:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2,idea安装对应的lombok插件:
3,我们编写一个javaBean:
4,lombok自动生成get方法和set的注解:
package com.vgxit.lombok.ktdm.po;
import lombok.Getter;
import lombok.Setter;
/**
* 用户PO
*/
@Getter
@Setter
public class User {
/**
* 自增Id
*/
private Integer id;
/**
* 用户姓名
*/
private String name;
/**
* 用户性别,1表示男,2表示女
*/
private Short gender;
/**
* 用户年龄
*/
private Integer age;
/**
* 昵称
*/
private String nickName;
}
4,lombok自动生成toString方法注解@ToString
5,lombok生成全参数构造方法的注解:@AllArgsConstructor
6,lombok生成无参构造方法的注解:@NoArgsConstructor
7,一键生成get,set,tostring,hashCode,canEqual,equals,无参构造方法的注解:@Data
8,基于变种的建造者模式的注解:@Builder
User user = User.builder()
.id(1)
.name("李一桐")
.age(30)
.gender((short) 2)
.nickName("tongtong")
.build();
System.out.println(user.getName());
System.out.println(user);
9,如果我们在类里面自己编写了相同的代码,那么会覆盖lombok自动生成的代码
4,Mybatis入门
我们写一个小案例,使用Mybatis的方式从数据库查询一条信息,然后展示。
1,安装Mybatis Plugin插件
2,创建一个Maven工程
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
3,编写Mybatis的配置文件,名字叫做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>
<!--配置一个运行环境-->
<environments default="develop">
<environment id="develop">
<!--配置Mybatis要使用的事务管理器-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis.ktdm?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="Abc@123456"/>
</dataSource>
</environment>
</environments>
</configuration>
4,数据库准备:
对应sql文件下载:https://vgxitdata-1256295173.cos.ap-chengdu.myqcloud.com/user.sql
5,创建对应的PO:
package com.vgxit.learn.vgmybatis.ktdm.po;
import lombok.Data;
@Data
public class User {
/**
* 自增Id
*/
private Integer id;
/**
* 用户姓名
*/
private String name;
/**
* 用户性别,1表示男,2表示女
*/
private Short gender;
/**
* 年龄
*/
private Integer age;
}
6,创建映射器:
(1),创建对应的Mapper接口:
package com.vgxit.learn.vgmybatis.ktdm.mapper;
import com.vgxit.learn.vgmybatis.ktdm.po.User;
/**
* Mybatis查询具体数据的Mapper
*/
public interface UserMapper {
/**
* 通过Id来查询用户
* @param id
* @return
*/
User getUserById(int id);
}
(2),创建一个映射器文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//rnybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.vgxit.learn.vgmybatis.ktdm.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="com.vgxit.learn.vgmybatis.ktdm.po.User">
select * from user where id=#{id}
</select>
</mapper>
7,在配置文件中注入映射器:
<!--注入映射器-->
<mappers>
<mapper class="com.vgxit.learn.vgmybatis.ktdm.mapper.UserMapper"/>
</mappers>
8,修改pom.xml让其支持发布java目录下面的xml:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
9,具体的查询代码:
package com.vgxit.learn.vgmybatis.ktdm.test;
import com.vgxit.learn.vgmybatis.ktdm.po.User;
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.Reader;
public class Mybatis001Test {
public static void main(String[] args) {
//1,首先获取一个SqlSessionFactoryBuider对象。这个对象是用来创建SqlSessionFacotry
SqlSessionFactoryBuilder sessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2,加载对应的配置文件
try (Reader configReader = Resources.getResourceAsReader("mybatis-config.xml")) {
//3,创建SqlSessionFactory
SqlSessionFactory sessionFactory = sessionFactoryBuilder.build(configReader);
//4,创建SqlSession
SqlSession sqlSession = sessionFactory.openSession();
//5,查询对应的数据
User user = sqlSession.selectOne("com.vgxit.learn.vgmybatis.ktdm.mapper.UserMapper.getUserById", 1);
//6,打印数据
System.out.println(user);
//7,关闭sqlSession
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5,分析映射配置文件,UserMapper.xml
这个映射配置文件的主要作用,就是让程序员填充sql的,然后让Mybatis来调用就好了。映射配置文件有几个大的元素。我们下面来说一下:
- <mapper>元素,这个元素中有一个属性叫做namespace,所对应的是一个接口的全限定名。mybatis可以通过上下文直接来调用这个接口。
- <select>元素,这个元素代表的就是一个查询语句。属性id表示这个sql的表示,必须和对应的接口中的某个方法名完全一致。parameterType="int"表示传递给sql的是一个int类型的参数。resultType="com.vgxit.learn.vgmybatis.ktdm.po.User"表示的是接口方法返回的类型
-
{id}代表传递进来的参数