Mybatis是什么?
它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低。
ORM是什么?
对象关系映射。对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,比如用一个Java的Student类,去对应数据库中的一张student表,类中的属性和表中的列一一对应。
为什么Mybatis是半自动的ORM框架?
因为Mybatis需要手动编写sql语句,所以Mybatis的sql语句灵活性高,可以根据需求需要开发者自由的编写相关sql语句,而全自动的ORM框架是只需要定义好ORM映射关系,不用手动编写sql语句.
Mybatis编写步骤:
- 创建maven项目
- 导入依赖的jar包,编写全局配置文件
- 编写mapper.xml映射文件
- 加载全局配置文件,生成SqlSessionFactory
- 创建SqlSession,调用mapper映射文件中的SQL语句来执行CRUD操作
详细步骤:
1.maven项目创建
2.配置pom.xml 导入jar包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- 数据库jar -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<!-- mybatis jar -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.7</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>junit</groupId><!-- groupId坐标 -->
<artifactId>junit</artifactId><!-- artifactId jar包名称 -->
<version>4.12</version><!-- 版本 -->
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- jdk编译插件及maven-war-plugin配置 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
<path>/Springboot01</path> <!-- 设置Tomcat 7访问该Maven中web资源的虚拟路径 -->
<uriEncoding>UTF-8</uriEncoding><!-- 设置项目名称 -->
</configuration>
</plugin>
</plugins>
</build>
</project>
2.1创建一个实体类
package bean;
public class Booktype {
private int tid;
private String booktypename;
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
public String getBooktypename() {
return booktypename;
}
public void setBooktypename(String booktypename) {
this.booktypename = booktypename;
}
public Booktype(int tid, String booktypename) {
super();
this.tid = tid;
this.booktypename = booktypename;
}
public Booktype() {
super();
}
@Override
public String toString() {
return "Booktype [tid=" + tid + ", booktypename=" + booktypename + "]";
}
}
2.2 配置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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/demo?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="bean/BooktypeMapper.xml"/> //这里写你BooktypeMapper.xml路径 下面图有获取路径方法 获取后复制过来bean包前面都删掉
</mappers>
</configuration>
3.配置BooktypeMapper.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">
<!-- 实体类的映射文件 -->
<!-- MyBatis属于映射框架 用来映射实体类和sql语句之间的关系 -->
<mapper namespace="org.mybatis.example.BlogMapper">
<!-- select 查询方法
id 方法名称
parameterType 传入数据中的参数类型
resultType (用于告诉数据库将查到的数据自动填充到bean.Booktype类中)返回数据装在哪个类中
#{} 用于取值 取的字段名的与数据库中的字段名一样
-->
<select id="SelectByTid" parameterType="int" resultType="bean.Booktype">
select * from Booktype where tid=#{tid}
</select>
<!-- 原始public void Add(Booktype booktype)
insert 添加方法
id 方法名称
parameterType 传入数据中的参数类型
resultType (用于告诉数据库将查到的数据自动填充到bean.Booktype类中)返回数据装在哪个类中
#{} 用于取值 在添加时候添加数据的字段名的与数据库中字段名一样 顺序也要一样
-->
<insert id="Add" parameterType="bean.Booktype">
INSERT INTO booktype (`tid`,`booktypename`) VALUES (null,#{booktypename})
</insert>
</mapper>
class
4.加载全局配置文件,生成SqlSessionFactory(我的测试类也直接写在了其中)MybatisTest.class
package bean;
import java.io.IOException;
import java.io.InputStream;
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;
/***
* hengqirong
*/
public class MybatisTest {
/***
* 根据id进行查询
* @throws IOException
*/
@Test
public void test() throws IOException {
String resource = "mybatis-config.xml";//配置文件的路径 获取数据库
InputStream inputStream = Resources.getResourceAsStream(resource);//拿到数据库的流
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//获取会话工厂 用会话工厂去解析上面的xml
SqlSession session=sqlSessionFactory.openSession();//打开Session
Booktype bt=session.selectOne("org.mybatis.example.BlogMapper.SelectByTid",1);//提供了增删改查方法 这里我用的查询括号里(BooktypeMapper.xml中方法名,查询的参数)
System.out.println(bt);
session.close();//关闭Session
}
/***
* 添加 mybatis
* @throws IOException
*/
@Test
public void test2() throws IOException {
String resource = "mybatis-config.xml";//加载配置文件 配置文件的路径 获取数据库
InputStream inputStream = Resources.getResourceAsStream(resource);//拿到数据库的流
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//获取会话工厂 用会话工厂去解析上面的xml
SqlSession session=sqlSessionFactory.openSession();//打开Session 只用通过Session去掉增删改查方法
Booktype bt=new Booktype(0,"测试社科");
System.out.println(bt);
session.insert("org.mybatis.example.BlogMapper.Add",bt);//通过BooktypeMapper.xml中的namespace路径找到方法id
session.commit();//手动提交事务,否则数据库不显示,增删改成功必须手动提交事务
session.close();
}
}
以上这个情况表示运行成功,如果报错创建个txt文件将错误复制到.txt文件中进行排错
总结
- 编写mapper.xml,书写SQL,并定义好SQL的输入参数,和输出参数
- 编写全局配置文件,配置数据源,以及要加载的mapper.xml文件
- 通过全局配置文件,创建SqlSessionFactory
- 每次进行CRUD时,通过SqlSessionFactory创建一个SqlSession
- 调用SqlSession上的
selectOne 根据id进行查询
selectList 列表显示查询全部
insert 添加方法
delete 删除方法
update 修改方法
等方法,传入mapper.xml中SQL标签的id,以及输入参数