mybatis面向接口编程

在mybatis老版本都是通过如下方式,详情见:

http://blog.csdn.net/yuehailin/article/details/78759226

  String resource = "conf/conf.xml";
        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
        InputStream is = MyBatisTest.class.getClassLoader().getResourceAsStream(resource);
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
        //Reader reader = Resources.getResourceAsReader(resource);
        //构建sqlSession的工厂
        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //创建能执行映射文件中sql的sqlSession
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的标识字符串,
         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
         */
        try {
            String statement = "selectEmp";//映射sql的标识字符串
            //执行查询返回一个唯一user对象的sql
            Employee user = session.selectOne(statement, 2);
            System.out.println(user);
        }finally {
            session.close();
        }

今天我们来说一下面向接口编程:

那么什么是面向接口编程呢?面向接口编程在mybatis里是怎么用的呢?

在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。

我们来看看面向接口编程在mybatis中应用,也是现在mybatis中的主流用法。

数据库建表语句:

CREATE TABLE `tbl_employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `last_name` varchar(255) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

Employee

package com.yuehailin.entity;

/**
 * Created by yuehailin on 2017/12/9.
 */
public class Employee {

    private String lastName;
    private String email;
    private String gender;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
}
EmployeeMapper

package com.yuehailin.dao;

import com.yuehailin.entity.Employee;

/**
 * Created by yuehailin on 2018/1/14.
 */
public interface EmployeeMapper {

    public Employee getEmpById(Integer id);
}
MyBatisTest

package com.yuehailin.test;

/**
 * Created by yuehailin on 2017/12/9.
 */

import com.yuehailin.dao.EmployeeMapper;
import com.yuehailin.entity.Employee;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class MyBatisTest {


//    public static void main(String[] args) throws IOException {
//        //mybatis的配置文件
//        String resource = "conf/conf.xml";
//        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
//        InputStream is = MyBatisTest.class.getClassLoader().getResourceAsStream(resource);
//        //构建sqlSession的工厂
//        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//        //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
//        //Reader reader = Resources.getResourceAsReader(resource);
//        //构建sqlSession的工厂
//        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//        //创建能执行映射文件中sql的sqlSession
//        SqlSession session = sessionFactory.openSession();
//        /**
//         * 映射sql的标识字符串,
//         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
//         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
//         */
//        try {
//            String statement = "selectEmp";//映射sql的标识字符串
//            //执行查询返回一个唯一user对象的sql
//            Employee user = session.selectOne(statement, 2);
//            System.out.println(user);
//        }finally {
//            session.close();
//        }
//    }




    public void test01(){
// 1.       获取sqlsessionfactory
        //mybatis的配置文件
        String resource = "conf/conf.xml";
        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
        InputStream is = MyBatisTest.class.getClassLoader().getResourceAsStream(resource);
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //2.获取sqlsession对象,代表和数据库的一次会话,用完必须关掉
        //sqlsession和connection一样都是非线程安全。每次使用都应该获取新的对象
        SqlSession session = sessionFactory.openSession();
        //3.获取接口的实现类
        //快捷键shift+alt+l
        try {


            EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
            Employee empById = mapper.getEmpById(1);
            System.out.println(empById);
        }finally {
            session.close();
        }
    }

    public static void main(String[] args) {
        MyBatisTest myBatisTest = new MyBatisTest();
        myBatisTest.test01();
    }

}
配置文件信息:

conf:





    
    
        
    
    
        
            
            
            
                
                
                
                
            
        
    

    
        
        
    

employeeMapper.xml






    
    
    


说明:

1.在配置文件中:

    
    
        
    
我们可以看到为什么数据库中和实体类中的属性名不是完全一样的,为什么可以传过来信息呢?那么我们使用的驼峰命名法,也就是上面的代码。

2.在employeeMapper.xml中的namespace必须是定义接口的全类名,也就是将配置信息与接口绑定再一起。

注:本人小白,欢迎指正,谢谢大家。

你可能感兴趣的:(框架)