MyBatis开发框架的四大核心
2023-04-13 16:33:55
MyBatis 四大核心主要包括(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。
MyBatis 作为互联网数据库映射工具行业“上古神器”,训有四大“神兽”,谓之:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper。可以说,了解了这四个核心,就知道了 MyBatis 八 九。
SqlSessionFactoryBuilder 从命名上可以看出,这是一个 Builder 用于创建模型 SqlSessionFactory 的类。SqlSessionFactoryBuilder 结构按配置进行 SqlSessionFactory。
有两种配置方法
1. XML 文件方式 XML 文件方法是一种常用的方法:String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
mybatis-config.xml 是我们的配置文件:
PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
2. Java Config 这是第二种配置方法 Java 配置代码: 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);
Java Config 相比较 XML 就文件的方式而言,会有一些限制 制。比如配置文件修改后需要重新编译,注释方法没有 XML 配置项多等。因此,在大多数情况下,行业是选择 XML 文件的方式。但选择哪种方式取决于你自己团队的需要。例如,项目 SQL 句子不复杂,也不需要一些高级的 SQL 特性,那么 Java Config 它会更简洁一点;相反,你可以选择 XML 文件的方式。
SqlSessionFactory SqlSessionFactory 顾名思义,用于生产 SqlSession 的工厂。
通过以下方式获取 SqlSession 实例: SqlSession session = sqlSessionFactory.openSession();
SqlSession SqlSession 包含了执行 SQL 所有方法。以下是示例: SqlSession session = sqlSessionFactory.openSession(); try { Blog blog = session.selectOne( "org.mybatis.example.BlogMapper.selectBlog", 101); } finally { session.close(); }
当然,以下方法可以实现类型安全: SqlSession session = sqlSessionFactory.openSession(); try { BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101); } finally { session.close(); }
Mapper Mapper 顾名思义,就是用来做的 Java 与 SQL 它们之间的映射。包括 Java 映射为 SQL 语句,以及 SQL 返回结果映射为 Java。
例如,以下是一个常见的例子 Mapper 接口映射文件: select * from Blog where id = #{id} 其中 "org.mybatis.example.BlogMapper" 这是我们想要射击的接口,selectBlog 是BlogMaper上的方法。而这个 selectBlog 具体来说,它需要执行“select * from Blog where id = #{id}”这个 SQL 语句。
这样,我们就可以通过了 Blog blog = session.selectOne( "org.mybatis.example.BlogMapper.selectBlog", 101);
或者是 BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101);
获得执行结果。
当然,如果采用注释的方法,可以省去 XML 文件: public interface BlogMapper { @Select("SELECT * FROM blog WHERE id = #{id}") Blog selectBlog(int id); }