zoukankan      html  css  js  c++  java
  • mybatis之第一个mybatis程序(二)

    通过接口编程来实现mybatis之第一个mybatis程序(一)中的功能。

    1、在src下新建一个com,gong,mybatis.dao的包,在里面新建一个EmployeeDao.java(注意是接口)

    package com.gong.mybatis.dao;
    
    import com.gong.mybatis.bean.Employee;
    
    public interface EmployeeDao {
        public Employee getEmpById(Integer id);
    }

    2、更改EmployeeMapper.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.gong.mybatis.dao.EmployeeDao">
    <!-- 
    namespace:名称空间;指定为接口的全类名    
    public Employee getEmpById(Integer id);
     -->
        <select id="getEmpById" resultType="com.gong.mybatis.bean.Employee">
            select id,last_name lastName,email,gender from tbl_employee where id = #{id}
        </select>
    </mapper>

    这里需要修改的地方有两个:

    • 让namespace中为EmployeeDao接口的全类名
    • 让id的名称与EmployeeDao中的方法名一致

    这样就将EmployeeDao中的getEmpById方法与EmployeeMapper.xml中的进行了绑定

    3、修改TestMybatis.java中的方法

    package com.gong.mybatis.test;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    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.Test;
    
    import com.gong.mybatis.bean.Employee;
    import com.gong.mybatis.dao.EmployeeDao;
    
    public class TestMybatis {
        
        public SqlSessionFactory getSqlSessionFactory() throws IOException {
            String resource = "mybatis-config.xml";
            InputStream is = Resources.getResourceAsStream(resource);
            return new SqlSessionFactoryBuilder().build(is);
        }
    
        @Test
        public void test() throws IOException {
            SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
            SqlSession openSession = sqlSessionFactory.openSession();
            //获取sqlSession实例,能够直接执行已经映射好的sql语句
            try {
                Employee employee = openSession.selectOne("com.gong.mybatis.EmployeeMapper.getEmpById",1);
                System.out.println(employee);
            }finally {
                openSession.close();
            }    
        }
        
        @Test
        public void test01() throws IOException {
            // 1、获取sqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
            // 2、获取sqlSession对象
            SqlSession openSession = sqlSessionFactory.openSession();
            try {
                // 3、获取接口的实现类对象
                //会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
                EmployeeDao mapper = openSession.getMapper(EmployeeDao.class);
                Employee employee = mapper.getEmpById(1);
                System.out.println(mapper.getClass());
                System.out.println(employee);
            } finally {
                openSession.close();
            }
    
        }
    
    }

    首先将公有的代码提取出来为单独的一个方法。

    然后新加一个test01方法,并进行相关代码的编写,最后进行单元测试,在控制台输出:

    说明基于接口编程是成功的。 

    总结:

    (1)接口式编程

    • 原生: Dao ====> DaoImpl
    • mybatis: Mapper ====> xxMapper.xml

    (2)SqlSession代表和数据库的一次会话;用完必须关闭;
    (3)SqlSession和connection一样她都是非线程安全。每次使用都应该去获取新的对象。
    (4)mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。
    (5)两个重要的配置文件:

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

     

  • 相关阅读:
    Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. ......
    UVA 1597 Searching the Web
    UVA 1596 Bug Hunt
    UVA 230 Borrowers
    UVA 221 Urban Elevations
    UVA 814 The Letter Carrier's Rounds
    UVA 207 PGA Tour Prize Money
    UVA 1592 Database
    UVA 540 Team Queue
    UVA 12096 The SetStack Computer
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12208887.html
Copyright © 2011-2022 走看看