MyBatis流程以及套路

1、配置pom文件

也就是那些依赖什么的东西,插件啊,不自己导入,通过maven来导入
首先可以根据官网的来看,https://mybatis.net.cn/getting-started.html,从里面可以看到

默认使用maven来构建项目,根据官方文档,如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

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

2、构建 SqlSessionFactory

构建 SqlSessionFactory官方文档给出的有两种方法,一种是从 XML 中构建 SqlSessionFactory,另一种是不使用 XML 构建 SqlSessionFactory,我学习的就是从 XML 中构建 SqlSessionFactory,所以另一种方法也不多解释。

根据官方文档的描述:每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例

从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

这个东西呢,是存在在java文件下面的,也就是说说我从 XML 文件中构建 SqlSessionFactory 的实例是在真正运行的时候,从java文件中我需要以下的代码来构建SqlSessionFactory。

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

XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。后面会再探讨 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>
//<!--这个是别名,就是我这里写上这个包,我在我的xml文件的mapper里面,mapper中的select中的resultType,可以直接写这个下面的文件,就不用写前面的东西了-->
<typeAliases>
        <package name="pojo"/>
    </typeAliases>
 
  <environments default="development">
  //<!--可以配置多个environment,通过配置不同default来切换不同的environment-->
    <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>
  // <!--sql的映射文件-->
      // <!-- <mapper resource="mapper/UserMapper.xml"/>-->

        //<!--mapper代理的方法-->
        <package name="mapper"/>
  </mappers>
</configuration>

当然,还有很多可以在 XML 文件中配置的选项,上面的示例仅罗列了最关键的部分。 注意 XML 头部的声明,它用来验证 XML 文档的正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。

3 从 SqlSessionFactory 中获取 SqlSession

既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句

但现在有了一种更简洁的方式——使用和指定语句的参数和返回值相匹配的接口(比如 BlogMapper.class),现在你的代码不仅更清晰,更加类型安全,还不用担心可能出错的字符串字面值以及强制类型转换。

		//2. 获取SqlSession对象,用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        //List<User> Users = sqlSession.selectList("test.selectAll");
        //3.1 获取Mapper接口的代理对象
        //通过sqlSession来获取对于的mapper,通过这行代码就可以找到对于的UserMapper接口,然后因为接口中有一个同名的UserMapper.xml文件,所以可以访问该文件找到对象的sql语句,
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();

4 探究已映射的 SQL 语句

现在你可能很想知道 SqlSession 和 Mapper 到底具体执行了些什么操作,但 SQL 语句映射是个相当广泛的话题,可能会占去文档的大部分篇幅。 但为了让你能够了解个大概,这里会给出几个例子。

在上面提到的例子中,一个语句既可以通过 XML 定义,也可以通过注解定义。我们先看看 XML 定义语句的方式,事实上 MyBatis 提供的所有特性都可以利用基于 XML 的映射语言来实现,这使得 MyBatis 在过去的数年间得以流行。如果你用过旧版本的 MyBatis,你应该对这个概念比较熟悉。 但相比于之前的版本,新版本改进了许多 XML 的配置,后面我们会提到这些改进。这里给出一个基于 XML 映射语句的示例,它应该可以满足上个示例中 SqlSession 的调用。

<?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>

为了这个简单的例子,我们似乎写了不少配置,但其实并不多。在一个 XML 映射文件中,可以定义无数个映射语句,这样一来,XML 头部和文档类型声明部分就显得微不足道了。文档的其它部分很直白,容易理解。 它在命名空间 “org.mybatis.example.BlogMapper” 中定义了一个名为 “selectBlog” 的映射语句,这样你就可以用全限定名

“org.mybatis.example.BlogMapper.selectBlog” 来调用映射语句了,就像上面例子中那样:

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

你可能会注意到,这种方式和用全限定名调用 Java 对象的方法类似。这样,该命名就可以直接映射到在命名空间中同名的映射器类,并将已映射的 select 语句匹配到对应名称、参数和返回类型的方法。因此你就可以像上面那样,不费吹灰之力地在对应的映射器接口调用方法,就像下面这样:

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

第二种方法有很多优势,首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 IDE 有代码补全功能,那么代码补全可以帮你快速选择到映射好的 SQL 语句。


简单demo流程

1、用户填写账号密码,通过submit提交到servlet,通过from表单中的action来链接到Servlet。
2、提交到Servlet中,在Servlet里面
1)接收用户名和密码
2)调用mabits的代码,也就是我们上面那一堆,调用我们定义的方法,获取返回值,
调用Mapper查询,返回User对象
3、Servlet做出相应的响应

mabits相关准备:
1、导入MyBatis坐标, MySQl驱动坐标
2、创建mybatis-config.xm|核心配置文件, UserMapper.xml映射文件, UserMapper接口


mybatis-config.xm|核心配置文件:①起别名②配置驱动信息③扫描mapper映射

其实在这份代码里面,并没有用到 ①起别名

<configuration>
    <!--起别名-->

    <!--<typeAliases>
        <package name="web.pojo"/>
    </typeAliases>-->

    <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:///db1?useSSL=false&amp;useServerPrepStmts=true"/>
                <property name="username" value="root"/>
                <property name="password" value="15857305803"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--扫描mapper-->
        <package name="web.mapper"/>
    </mappers>
</configuration>

猜你喜欢

转载自blog.csdn.net/missgrass/article/details/126085320