zoukankan      html  css  js  c++  java
  • MyBatis(二)HelloWorld 案例

    一、准备工作

      1、创建数据库和表信息

    DROP DATABASE IF EXISTS mybatis;
    CREATE DATABASE mybatis;
    
    DROP TABLE IF EXISTS tbl_employee;
    
    CREATE TABLE IF NOT EXISTS tbl_employee (
        id INT(11) PRIMARY KEY AUTO_INCREMENT,
        last_name VARCHAR(255),
        gender CHAR(1),
        email VARCHAR(255)
    )
    
    INSERT INTO tbl_employee(`id`, `last_name`, `gender`, `email`) VALUES(1, 'Tom', 0, 'tom@126.com');

      2、加入依赖

     1       <dependency>
     2             <groupId>org.mybatis</groupId>
     3             <artifactId>mybatis</artifactId>
     4             <version>3.4.1</version>
     5         </dependency>
     6         <dependency>
     7             <groupId>mysql</groupId>
     8             <artifactId>mysql-connector-java</artifactId>
     9             <version>5.1.47</version>
    10         </dependency>
    11         <dependency>
    12             <groupId>log4j</groupId>
    13             <artifactId>log4j</artifactId>
    14             <version>1.2.17</version>
    15         </dependency>
    16         <dependency>
    17             <groupId>junit</groupId>
    18             <artifactId>junit</artifactId>
    19             <version>4.12</version>
    20         </dependency>

      3、创建对应的 JavaBean

      4、添加 log4j 的配置文件,方便观看输出日志信息

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
            <param name="Encoding" value="UTF-8"/>
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%-5p %d{MM-dd  HH:mm:ss,SSS} %m  (%F:%L) 
    "/>
            </layout>
        </appender>
        <logger name="java.sql">
            <level value="debug"/>
        </logger>
        <logger name="org.apache.ibatis">
            <level value="info"/>
        </logger>
        <root>
            <level value="debug"/>
            <appender-ref ref="STDOUT"/>
        </root>
    </log4j:configuration>

    二、使用 MyBatis 操作数据库

      1、创建 mybatis 全局配置文件

        MyBatis 的全局配置文件包含了影响 MyBatis 行为甚深的设置( settings)和属性( properties)信息、如数据库连接池信息等。指导着MyBatis进行工作。我们可以参照官方文件的配置示例。

        创建mybatis的核心(全局)配置文件mybatis-config.xml,并配置(用于连接数据库)参考 MyBatis 的官网手册
    <?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>
    
        <!-- 写好的 SQL 映射文件一定要注册到全局配置文件中   -->
        <mappers>
            <mapper resource="EmpMapper.xml"/>
        </mappers>
    </configuration>

      2、创建 sql 映射文件

        映射文件的作用就相当于是定义Dao接口的实现类如何工作。这也是我们使用MyBatis时编写的最多的文件。

        创建映射文件XxxMapper.xml,并配置(用于操作数据库)参考 MyBatis 的官方手册
    <?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="EmpMapper">
    <!--
        namespace:名称空间
        id:唯一标识
        resultType:返回值类型
        #{id} 从传递过来的参数中取出id值
    -->
        <select id="selectEmp" resultType="com.njf.mybatis.bean.Employee">
            select id, last_name lastName, email, gender from tbl_employee where id = #{id}
        </select>
    
    </mapper>

      3、测试

         @Test
         public void test1() throws IOException {
              //1、获取 sqlSessionFactory 工厂
              String resource = "mybatis-config.xml";
              InputStream inputStream = Resources.getResourceAsStream(resource);
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
              //2、获取 sqlSession 实例,能直接执行已经映射的 SQL 语句
              //  sql的唯一标识:statement Unique identifier matching the statement to use.
              //  执行SQL要用的参数:parameter A parameter object to pass to the statement.
              SqlSession sqlSession = sqlSessionFactory.openSession();
    
              try {
             //根据方法 id 进行操作 Employee emp
    = sqlSession.selectOne("EmpMapper.selectEmp", 1); System.out.println(emp); } finally { sqlSession.close(); } }

        运行结果:

      4、小结

        (1)根据xml配置文件(全局配置文件)创建一个 SqlSessionFactory 对象数据源一些运行环境的配置信息;

        (2)SQL 映射文件,配置了每一个 SQL,以及 SQL 的封装规则等;

        (3)将SQL映射文件注册在全局配置文件中

        (4)操作步骤:

          ① 根据全局配置文件得到 sqlSessionFactory;

          ② 使用sqlSession工程,获取到 sqlSession 对象使用他来执行增删改查,一个 sqlSession 就是代表和数据库的一次会话,用完关闭;

          ③ 使用 SQL 的唯一标识来告诉 MyBatis 执行那个 SQL,SQL都在保存在 SQL 映射文件中;

    三、面向接口编程

      1、创建一个接口

    public interface EmployeeMapper {
    
        public Employee getEmpById(Integer id);
    }

      2、根据接口创建 mapper 文件,并进行绑定

    <?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.njf.mybatis.dao.EmployeeMapper">
    <!--
        namespace:名称空间,指定为接口的全类名
        id:唯一标识,方法名
        resultType:返回值类型
        #{id} 从传递过来的参数中取出id值
    -->
    
        <select id="getEmpById" resultType="com.njf.mybatis.bean.Employee">
            select id, last_name lastName, email, gender from tbl_employee where id = #{id}
        </select>
    
    </mapper>
      注意:一定要完成两个绑定
                (1)Mapper 接口与 Mapper 映射文件的绑定,在 Mapper 映射文件中的 <mapper> 标签中的 namespace 中必须指定 Mapper 接口的全类名
                (2)Mapper 映射文件中的增删改查标签的 id 必须指定 Mapper 接口中的方法名;

      3、在全局配置文件中注册 mapper 配置文件

    <mappers>
        <mapper resource="EmpMapper.xml"/>
        <mapper resource="EmployeeMapper.xml"/>
    </mappers>

      4、测试

    public SqlSessionFactory getsqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        return sqlSessionFactory;
    }
    
    @Test
    public void test2() throws IOException {
        //1、获取 sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = getsqlSessionFactory();
    
        //2、获取 sqlSession 实例,能直接执行已经映射的 SQL 语句
        SqlSession sqlSession = sqlSessionFactory.openSession();
    
        try {
           //3、获取接口的实现类对象
           /**
            * 推荐使用
            * 会为接口自动的创建一个代理对象,代理对象去执行增删改查方法,会通过动态代理动态生成UserMapper的代理实现类
            */
           EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
           System.out.println(employeeMapper);
           System.out.println(employeeMapper.getClass());
           Employee emp = employeeMapper.getEmpById(1);
           System.out.println(emp);
        } finally {
           sqlSession.close();
        }
    }

        运行结果:

        可以看到是由 MyBatis 生成接口的代理对象来执行 SQL的。

        

        SqlSession可以直接调用方法的id进行数据库操作,但是我们一般还是推荐使用SqlSession获取到Dao接口的代理类,执行代理对象的方法,可以更安全的进行类型检查操作。
     

    四、使用步骤

      (1)添加相关的依赖

      (2)创建 MyBatis 的核心(全局)配置文件 mybatis-config.xml 并配置(用于连接数据库)

      (3)创建mapper接口

      (4)创建SQL映射文件XxxMapper.xml,并配置每一个SQL语句(用于操作数据库)

          实现两个绑定:

          ① 接口全限定名要和映射文件的namespace保持一致;

          ② 接口中方法名和SQL语句的id保持一致;

      (5)将SQL映射文件注册在全局配置文件中;

      (6)获取mybatis操作数据库的会话对象SqlSession,通过getMapper()获取接口的动态代理实现类;

      (7)测试使用

        ① 根据全局配置文件得到 SqlSessionFactory;

        ② 使用sqlSession工厂,获取到sqlSession对象使用它来执行增删改查,一个sqlSession就是代表和数据库的一次会话,用完关闭。

        ③ 使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。

     

    五、小结

      1、面向接口编程

    原生:          Dao           ========>     DaoImpl
     Mybatis:    Mapper     ========>      xxxMapper.xml

      2、SqlSession 代表和数据库的一次会话,用完必须关闭。

      3、SqlSession 和 Connection 一样都是非线程安全的,因此是不能被共享的。每次使用都应该去获取新的对象,所以不能声明为私有的成员变量(注意)。 SqlSession每次使用完成后需要正确关闭,这个关闭操作是必须的。

      4、SqlSession可以直接调用方法的 id 进行数据库操作,但是我们一般还是推荐使用SqlSession获取到Dao接口的代理类,执行代理对象的方法,可以更安全的进行类型检查操作;

      5、mapper 接口没有实现类,但是 Mybatis 会为这个接口生成一个代理对象,将接口和xml进行绑定。

    EmployeeMapper empMapper = sqlSession.getMapper(EmployeeMapper.class);
    

      

      6、两个重要的配置文件:

        ① Mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等...系统运行环境信息;

        ② Sql映射文件:保存了每一个sql语句的映射信息,将SQL抽取出来;

     
  • 相关阅读:
    在SplendidCRM中添加用户控件
    SPendidCRM:给HK的ImageInfoEntryEditView增加一个checkbox,用于判断特殊类型的PODS记录
    html button 跳转ASP.NET页面跳转技术总结
    让<li>不显示超出内容,显示... (编程方法和CSS方法)
    SplendidCRM Popup.aspx的hyperlink字段配置的易错点
    asp.net 个别页面URL参数出现中文乱码的解决方法
    解决:工具箱里边没了Dev控件
    DevControlgridview的属性说明 (转)
    DevControlgridview的属性说明 (转)
    VM如何设置U盘启动
  • 原文地址:https://www.cnblogs.com/niujifei/p/15220293.html
Copyright © 2011-2022 走看看