(二)初学者学习Mybatis首先需要了解什么?

这篇文章主要讲述初学者学习Mybatis需要学习的一些常识,本篇文章主要来源于官方文档整理,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

1、导入依赖

想要使用Mybatis首先我们需要导入Mybatis的jar包,这里我们通过Maven坐标形式引入即可。

<dependency>
	 <groupId>org.mybatis</groupId>
	 <artifactId>mybatis</artifactId>
	 <version>x.x.x</version>
</dependency>

2、创建SqlSessionFactory

每个MyBatis应用程序都围绕着Sql会话工厂(SqlSessionFactory)的实例。 使用SqlSessionFactoryBuilder可以获取SqlSessionFactory实例。 Sql Session Factory Builder可以从XML配置文件或配置类的自定义准备实例构建Sql Session Factory实例。

通过xml构建SqlSessionFactory

从类路径或其他位置加载资源

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

创建xml
下一篇博客重点讲解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.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
	<mappers>
		<mapper resource="EmployeeMapper.xml" />
	</mappers>
</configuration>

Java构建配置SqlSessionFactory

如果您希望直接从Java构建配置,而不是XML,或者创建自己的配置生成器,MyBatis提供了一个完整的配置类,它提供了与XML文件相同的所有配置选项

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

Mapper类是包含SQL Mapping Annotations的Java类,它避免了XML的需要,如果我们是用xml来写的sql,MyBatis将自动查找并加载该文件(在本例中,BlogMapper.xml将根据BlogMapper.class的类路径和名称加载)。

3、从Sql会话工厂获取Sql会话

Sql Session绝对包含对数据库执行SQL命令所需的所有方法。 您可以直接针对Sql Session实例执行映射的SQL语句。 例如:

try(SqlSession session = sqlSessionFactory.openSession()) {
 Blog blog = session.selectOne(
 "org.mybatis.example.BlogMapper.selectBlog", 101);
}

虽然这种方法是有效的,并且对以前版本的MyBatis用户很熟悉,但是现在有了一种更干净的方法。 使用接口(例如。 正确描述给定语句的参数和返回值的BlogMapper.class,现在可以执行更干净和更类型的安全代码,而不需要容易出错的字符串文字和转换。

try (SqlSession session = sqlSessionFactory.openSession()) {
 BlogMapper mapper = session.getMapper(BlogMapper.class);
 Blog blog = mapper.selectBlog(101);
}

4、 探索映射SQL语句

在上面的任何一个示例中,语句都可以由XML或注释定义。 让我们先看看XML。 MyBatis提供的全套功能可以通过使用基于XML的映射语言来实现,这使得MyBatis多年来很受欢迎。下面是一个基于XML的映射语句的示例,它将满足上述Sql Session调用。

 <?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="org.mybatis.example.BlogMapper">
	 <select id="selectBlog" resultType="Blog">
	 	select * from Blog where id = #{id}
	 </select>
</mapper>

他在名称空间定义了org.mybatis.example.BlogMapper,我们就可以通过完整的名称来调用他 名称空间+id = org.mybatis.example.BlogMapper.selectBlog

Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

此名称可以直接映射到与名称空间同名的Mapper类,方法将名称、参数和返回类型匹配为映射的select语句。
也就是xml当中这个namespace,他相当于和接口的映射。

BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);

第二种方法有很多优点。 首先,它不依赖于字符串文字,所以它更安全。

5、名称空间

名称空间以前在Mybatis是可选的,现在是必填的,命名空间启用了接口绑定。名称空间尽量填写全类名,避免不同包下同id,这样会导致找不到映射id然后报错。

<mapper namespace="org.mybatis.example.BlogMapper">

6、注解添加sql

对于一些sql比较简单的,我们可以直接使用java注解省略xml。当然语句复杂的不建议使用这种

package org.mybatis.example;
public interface BlogMapper {
 @Select("SELECT * FROM blog WHERE id = #{id}")
 Blog selectBlog(int id);
}

7、范围和生命周期

依赖注入框架可以创建线程安全、事务性的Sql Sessions和映射器,并将它们直接注入到bean中,这样您就可以忘记它们的生命周期了。

SqlSessionFactoryBuilder

该类可以被实例化、使用和丢弃。 一旦您创建了Sql Session Factory,就没有必要保留它。 因此,Sql SessionFactoryBuilder实例的最佳范围是方法范围(即。 局部方法变量)。 您可以重用Sql Session Factory Builder来构建多个Sql Session Factory实例,但最好不要保留它,以确保所有XML解析资源都被释放出来用于更重要的事情

SqlSessionFactory

一旦创建,Sql Session Factory应该在应用程序执行期间存在。 应该很少或根本没有理由去处理或重新创造它。 不在应用程序运行中多次重建Sql Session Factory是最好的做法。 最简单的方法是使用单例模式或静态单例模式

SqlSession

每个线程都应该有自己的Sql会话实例。 Sql Session的实例不能共享,线程也不安全。 因此,最佳范围是请求或方法范围。 不要将对Sql会话实例的引用保存在静态字段中,甚至是类的实例字段中。 不要将对Sql Session的引用保留在任何托管范围内,例如Servlet框架的Http Session。在收到HTTP请求时,您可以打开Sql会话,然后在返回响应时,您可以关闭它。

 openSession.close();

Mapper Instances

映射器是您为绑定到映射语句而创建的接口。 映射器接口的实例是从Sql会话获取的。 因此,从技术上讲,任何映射器实例的最广泛范围与请求它们的Sql会话相同。 然而,映射器实例的最佳范围是方法范围。 也就是说,它们应该在使用它们的方法中被请求,然后被丢弃。 它们不需要明确关闭。

 try (SqlSession session = sqlSessionFactory.openSession()) {
 BlogMapper mapper = session.getMapper(BlogMapper.class);
 // do work
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值