初始MyBatis(二) -- MyBatis的功能及实现步骤
Mybatis 的功能:
支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。 – from *
- 人话就是:我们用 JDBC 操纵数据库所完成的功能,MySql都能实现,并且使用起来相对于Mysql 更加方便。
使用Mybatis 的步骤:
-
导入Mybatis 的相关 jar 包(包括Mysql的驱动包):
-
配置核心配置文件:
<?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="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
- 该配置文件可以在MyBatis官方文档中找到,配置文件中的标签代表的意义看下文,有详细的解释。
3、创建sqlSessionFactory,以及获得 SqlSession:
// 加载配置文件(注意路径不要搞错,做项目时我们一般直接放在src目录下)
package rj.cool.util;
import com.mysql.cj.Session;
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.InputStream;
public class MyBatisDButils {
/**
* 通过配置文件创建 SqlSessionFactory 是 SqlSession 的一个工厂类
*
* */
public static SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory;
}
/**
* SqlSession 通过 id 找到对应的 SQL 语句,执行 SQL 语句
*
* */
public static SqlSession getSession() throws IOException {
SqlSession session = getSqlSessionFactory().openSession();
return session;
}
}
对代码中关键类的解释:
SqlSessionFactoryBuilder :
这个类可以被实例化、使用和丢弃,一旦创建了SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder实例的最佳作用域是方法作用域(也就是局部方法变量)。 你可以重用 SqlSessionFactoryBuilder 来创建多个SqlSessionFactory 实例,但最好还是不要一直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情。SqlSessionFactory SqlSessionFactory:
一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。 使用 SqlSessionFactory
的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。因此
SqlSessionFactory 的最佳作用域是应用作用域。 有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。SqlSession :
每个线程都应该有它自己的 SqlSession 实例。SqlSession
的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。 绝对不能将 SqlSession
实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。 也绝不能将 SqlSession 实例的引用放在任何类型的托管作用域中,比如
Servlet 框架中的 HttpSession。 如果你现在正在使用一种 Web 框架,考虑将 SqlSession 放在一个和 HTTP
请求相似的作用域中。 换句话说,每次收到 HTTP 请求,就可以打开一个 SqlSession,返回一个响应后,就关闭它。
这个关闭操作很重要,为了确保每次都能执行关闭操作,你应该把这个关闭操作放到 finally 块中。--------from MyBatis 文档
- 创建实体类(对应数据库中的一张表,基本上有几张表就有多少个实体类)
User表:
package rj.cool.bean;
public class User {
private int id;
private String name;
private int pwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPwd() {
return pwd;
}
public void setPwd(int pwd) {
this.pwd = pwd;
}
}
- 编写sql语句的映射文件:
(在查询相关信息时主要是利用相对应的映射文件进行查找)
<?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">
<mapper namespace="rj.cool.dao.UserMapper">
<!-- 根据 id 查找对应的用户-->
<select id="selectUser" resultType="rj.cool.bean.User">
select * from User where id = #{id}
</select>
</mapper>
--对代码中的标签代表的意义会有专门的文章进行介绍
- 测试
后记:
- 本人也是初学者,如有不清楚的地方,欢迎各位随时私信我,看到一定会及时回复,加油!
推荐阅读
-
Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(二)
-
SpringBoot下Mybatis的缓存的实现步骤
-
MyBatis整合Redis实现二级缓存的示例代码
-
SpringBoot整合Mybatis实现高德地图定位并将数据存入数据库的步骤详解
-
初始MyBatis(二) -- MyBatis的功能及实现步骤
-
详解jeefast和Mybatis实现二级联动的问题
-
Mybatis 一级缓存与二级缓存的实现
-
MyBatis整合Redis实现二级缓存的示例代码
-
RedisCluster实现mybatis的二级缓存
-
SpringBoot整合Mybatis实现高德地图定位并将数据存入数据库的步骤详解