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映射文件

     

  • 相关阅读:
    C# ViewState
    ASP.NET C#中Application Session 的用法
    JS取 Input 控件值方法
    JS通过HTML标签自身属性获取属性值
    SQLServer 数据库操作
    查看和修改 Windows 实例远程桌面默认端口
    只能输入数字0-9 正则表达式,兼容Google Firefox IE浏览器
    C# 类初始化顺序
    window系统 任务计划程序
    微信公众号开发--消息接收与回复
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12208887.html
Copyright © 2011-2022 走看看