黑马程序员技术交流社区

标题: 【上海校区】Java框架篇---Mybatis 入门 [打印本页]

作者: 默默呜呜    时间: 2019-1-16 16:58
标题: 【上海校区】Java框架篇---Mybatis 入门
本帖最后由 默默呜呜 于 2019-1-16 17:17 编辑

一、Mybatis介绍       

      MyBatis是一款一流的支持自定义SQL、存储过程和高级映射的持久化框架。MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果。MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素、Map接口和POJOs(普通java对象)到数据库中的记录。

二、MyBatis工作流程
    (1) 加载配置并初始化
     触发条件:加载配置文件
     配置来源于两个地方,一处是配置文件,一处是Java代码的注解
    (2)接收调用请求
    触发条件:调用Mybatis提供的API
    传入参数:为SQL的ID和传入参数对象
    处理过程:将请求传递给下层的请求处理层进行处理。
   (3)处理操作请求 触发条件:API接口层传递请求过来
    传入参数:为SQL的ID和传入参数对象
    处理过程:
          (A)根据SQL的ID查找对应的MappedStatement对象。
          (B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
          (C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
          (D)根据MappedStatement对象中的结果映射配置得到的执行结果进行转换处理,并得到最终的处理结果。
          (E)释放连接资源。
  (4) 返回处理结果将最终的处理结果返回。

三 、orm工具的基本思想
         无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:

  四、功能架构

   

   Mybatis的功能架构分为三层:
  需要添加的驱动包:
   

五、快速入门:
   1,实体类User:
[Java] 纯文本查看 复制代码
public class User {
    private String id;
    private String name;
    private  int age;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
   
}

  2,映射文件UserMapping.xml

[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">
<mapper namespace="com.oumyye.mapping.UserMapping">
    <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
    使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
    resultType="com.oumyye.model.User"就表示将查询结果封装成一个User类的对象返回
    User类就是users表所对应的实体类
    -->
    <!--
        根据id查询得到一个user对象
     -->
    <select id="getUser" parameterType="String"
        resultType="com.oumyye.model.User">
        select * from user where id=#{id}
    </select>
</mapper>

   3、资源文件mybatis.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="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
            <mapper resource="com/oumyye/mapping/userMapping.xml"/>
     </mappers>
</configuration>

  4,测试类:
  
[Java] 纯文本查看 复制代码
public class Tests {
    @Test
    public void test(){
        String resource = "mybatis.xml";
        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
        InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource);
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);     
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的标识字符串,
         * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper标签的namespace属性的值,
         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
         */
        String statement = "com.oumyye.mapping.UserMapping.getUser";//映射sql的标识字符串
        //执行查询返回一个唯一user对象的sql
        User user = session.selectOne(statement, "1123");
        System.out.println(user.toString());
    }
}














作者: yhx永不放弃    时间: 2019-1-16 18:12
我是一只小菜鸟,看不懂的也说好。
作者: 一个人一座城0.0    时间: 2019-1-17 08:44
看一看。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2