zoukankan      html  css  js  c++  java
  • Mybatis 用Demo去入门 (使用数据库的查询操作测试)

    一:首先知道什么叫 Mybatis      

          MyBatis 是支持普通 SQL查询存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
       每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
    用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
    二:执行流程:(比较抽象{拽文得大牛读得懂哈哈---} 可参照 Demo 理解)
     
    (1)加载配置并初始化
    触发条件:加载配置文件
    处理过程:将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
    (2)接收调用请求
    触发条件:调用Mybatis提供的API
    传入参数:为SQL的ID和传入参数对象
    处理过程:将请求传递给下层的请求处理层进行处理。
    (3)处理操作请求
    触发条件:API接口层传递请求过来
    传入参数:为SQL的ID和传入参数对象
    处理过程:
    (A)根据SQL的ID查找对应的MappedStatement对象。
    (B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
    (C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
    (D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
    (E)释放连接资源。
    (4)返回处理结果将最终的处理结果返回。
    三:Demo 入门 Mybatis (本文最主要的部分)[后期提供相应的代码]
       首先看一下整个项目文件部署图:

             (1)创建项目-----接着导入相关的jar 包;

    (稍后提供相应的源码)

            (2) 接着 创建好 相应的数据库表 (Demo的数据库名:hytc ;表名称:users)

              (3) 创建相应的 entity 实体类 Users (Demo中 类的私有属性和表重的元素----有些不同 这里大家先留意一下

      

    package ankermaker.top.entity;
    import java.util.Date;
    /**
     * 
     * @author Ankermaker
     *  users 表对应的实体类
     */
    public class Users {    
        protected Integer id;
        protected String name;
        protected String sex;
        protected String edu;
        protected Date birth;
        protected String remark;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public String getEdu() {
            return edu;
        }
    
        public void setEdu(String edu) {
            this.edu = edu;
        }
    
        public Date getBirth() {
            return birth;
        }
    
        public void setBirth(Date birth) {
            this.birth = birth;
        }
    
        public String getRemark() {
            return remark;
        }
    
        public void setRemark(String remark) {
            this.remark = remark;
        }
        @Override
        public String toString() {
            return "Users [id=" + id + ", name=" + name + ", sex=" + sex + ", edu="
                    + edu + ", birth=" + birth + ", remark=" + remark + "]";
        }
    
    }

        (4)接下来创建 Mybatis 的 核心配置xml文件 (命名 没有要求 ),存放与src目录下;[Demo中 以 conf.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>
    <!-- 为 实体映射 文件 创建别名映射 -->
    <typeAliases>
    
        <package name="ankermaker.top.entity"/><!--这个 包下面的 所有 实体类 别名 自动 创建 -->
    
    </typeAliases>
    
        <environments default="development"><!-- 环境池 配置 :default 属性值 默认环境名称 -->
            <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/hytc" /><!-- 老陈写法:jdbc:mysql:///hytc -->
                    <property name="username" value="root" />
                    <property name="password" value="root" />
                </dataSource>
            </environment>
        </environments>
         
         <mappers>      
            <mapper resource="ankermaker/top/mappers/Usersmapper.xml"/>       
        </mappers>
    </configuration>

          (5)接下来创建 mapper 映射操作xml文件 (这个文件的作用:简单的说:所有对表的增删改查操作 的sql 语句和 该文件映射的借口类中的方法 在给文件中注册体现;执行查询的方法有多种,通过 映射文件创建映射借口,用户调用Mapper接口中的方法,执行相应的sql语句 并返回查询结果!大家在测试之后 可以仔细的感受该文件的作用!!!)

          Demo中的Mapper 映射操作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="ankermaker.top.mappers.Usersmapper"><!-- 映射接口类的 路径!!! -->
         
         <!-- 实体类 中 与表名字 不同  使用 resultMap 来创建 别名映射!-->
         <resultMap type="users" id="userMap">
                 <id column="u_id" property="id" jdbcType="INTEGER"/>
                 <result column="u_name" property="name"/>
                 <result column="u_sex" property="sex"/>    
         </resultMap>   
           <!-- 查询 所有 数据 测试! -->  
        <select id="getObjects" resultMap="userMap"> <!-- 直接引用 上面的 resultMap --> 
         
            select u_id,u_name,u_sex from users
            
        </select>
      
    </mapper>

          (6)接下来创建 mapper映射文件的 映射接口类:接口类名和映射操作xml文件 名一样!!都为:Usersmapper

    package ankermaker.top.mappers;
    
    import java.util.List;
    
    
    import ankermaker.top.entity.Users;
    
    public interface Usersmapper {
    
        /**
         * 查询所有用户的信息
         * 
         * @return
         */
        public List<Users> getObjects();//测试 数据库获取所有的 记录 方法;
    
    
    }

            (7)接了下就是测试 数据库操作的时候了  创建 测试类,

          

    package ankermaker.top.Test;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    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 org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import ankermaker.top.entity.Users;
    import ankermaker.top.mappers.Usersmapper;
    public class AppText {
    
        private SqlSessionFactory sessionFactory;
        private static SqlSession session;
        private Usersmapper mapper;
    
        @Before
        public void setup() {
            String resource = "conf.xml";
            InputStream is = null;
            try {
                is = Resources.getResourceAsStream(resource);
                sessionFactory = new SqlSessionFactoryBuilder().build(is);
                session = sessionFactory.openSession();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        @Test
        public void getObjects() {
            // 分页查询
            // 获取 映射 借口 对象 ;
            mapper = session.getMapper(Usersmapper.class);
            List<Users> list = mapper.getObjects();
    
            for (Users u : list) {
                System.out.println(u + "测试成功");
            }
        }
    
        @After
        public void result() {
            if (sessionFactory != null) {
                sessionFactory = null;
            }
            if (session != null) {
                session = null;
    
            }
        }
    }

      使用 junit test 测试 getObjects方法; 

    四:问题分析:论ResultMap 的作用!

    大家看Usersmapper.xml 中的resultMap标签的使用! 

    <resultMap id="userMap" type="users">

      <id jdbcType="INTEGER" property="id" column="u_id"/>

      <result property="name" column="u_name"/>

      <result property="sex" column="u_sex"/>

    </resultMap> 

    ....

    select u_id,u_name,u_sex from users 

    由于实体中的私有属性和表中的列名不一致所以要使用 ResultMap 这个标签让他们之间产生映射,Demo中不能展现的很清楚大家可以在测试 按条件查询的时候,会发现resultMap 的用处!

    五:项目部署完成  但总感觉这篇写的没有什么思路希望大家看不明白了谅解,大家学习即可就好啦,我们大家一起进步;

    项目源码下载

        
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    linux php安装ODBC扩展
    linux wget变成000权限
    linux tomcat启动报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
    字符串的操作, 日期格式, 数据转换, 模糊查询
    Oracle控制结构
    创建角色,用户,视图,索引,分析计划
    Oracle用触发器解决修改主表A主键值,从表的外键值也会跟着改变的问题
    行为科学统计第17章--回归
    行为科学统计第13-15章
    行为科学统计第12章
  • 原文地址:https://www.cnblogs.com/Ankermaker/p/6930903.html
Copyright © 2011-2022 走看看