Mybatis(一)

什么是 MyBatis ?

  • MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
  • MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

Mybatis 的优势

sql 与Java 代码分开,功能边界清晰,一个专注业务,一个专注数据

Mybatis 入门实例

  • 原理
    • 根据全局配置文件 mybatis-config.xml ,利用 SqlSessionFactoryBuilder 从 该配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
    • 从 SqlSessionFactory 中获取 SqlSession , 使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
    • 一个sqlSession就是代表和数据库的一次会话,用完关闭
      使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。
  • 项目结构如下图
    Mybatis(一)_第1张图片
  • 第一步:根据xml配置文件(全局配置文件 mybatis-config.xml)创建一个SqlSessionFactory对象 包含数据源等一些运行环境信息


<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/mytripod" />
			<property name="username" value="root" />
			<property name="password" value="123456" />
		dataSource>
	environment>
environments>
	
  
	<mappers>
		<mapper resource="EmployeeMapper.xml" />
	mappers>
configuration>
  • 第二步:sql映射文件( Employee.xml );配置了每一个sql,以及sql的封装规则等。


<mapper namespace="com.myt.dao.EmployeeMapper">
	
	 
	 
	<select id="getEmp" resultType="com.myt.bean.Employee">
		select employee_ID,employeeName,email from hr_o_employee where employee_ID = #{employee_ID}
	select>
	
	
	<select id="getEmpName" resultType="String">
		select employeeName from hr_o_employee where employee_ID = #{employee_ID}
	select>
	
	
	<select id="getEmpByGender" resultType="com.myt.bean.Employee">
		select * from hr_o_employee where gender = #{gender}
	select>
	
	
	<select id="getEmpWithMapBean" resultType="com.myt.bean.Employee">
		select * from hr_o_employee where gender = #{gender}
	select>
	
mapper>
  • 创建实体类
package com.myt.bean;

public class Employee {
	
	private String employee_ID;
	private String employeeName;
	private String email;
	private short gender;
	public String getEmployee_ID() {
		return employee_ID;
	}
	public void setEmployee_ID(String employee_ID) {
		this.employee_ID = employee_ID;
	}
	public String getEmployeeName() {
		return employeeName;
	}
	public void setEmployeeName(String employeeName) {
		this.employeeName = employeeName;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public short getGender() {
		return gender;
	}
	public void setGender(short gender) {
		this.gender = gender;
	}
	@Override
	public String toString() {
		return "Employee [employee_ID=" + employee_ID + ", employeeName=" + employeeName + ", email=" + email
				+ ", gender=" + gender + "]";
	}
}

  • 测试
package com.myt.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

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.myt.bean.Employee;
import com.myt.dao.EmployeeMapper;

public class MainTest {

	@Test
	public void Test() throws IOException{
		//获取全局配置文件路径
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
		/**
		 * selectOne(sql的唯一标识,执行sql要用的参数)
		 */
		SqlSession session = sqlSessionFactory.openSession();
		try {
			
			Employee employee = (Employee) session.selectOne("com.myt.dao.EmployeeMapper.getEmp", "C1707937");
			System.out.println("返回Java bean..."+employee);
		
			String eName = session.selectOne("com.myt.dao.EmployeeMapper.getEmpName","C1707937");
			System.out.println("返回String...."+eName);
			
			List<Employee> list  = (List) session.selectList("com.myt.dao.EmployeeMapper.getEmpByGender",1);
			
			for(Employee e :list){
				System.out.println("返回list..."+e);
			}
			/*
			Map mapbean  = session.selectMap("getEmpWithMapBean", 1, "gender");
					//selectMap("getEmpWithMap",1, eName);
			for(Employee e :mapbean.values()){
				System.out.println("返回mapbean..."+e);
			}
			*/
			
		} finally {
		  session.close();
		}
	}

}

自此一个入门的 mybatis 实例完成。

接口式编程

mybtais 将映射文件与接口绑定,不需要定义接口实现类,利用Java 动态代理实现接口,而我们需要做的就是:

  • 在sql 映射文件中编辑sql( 见上诉Employee.xml ),定义每一个sql 的id
  • 在定义的接口中编写方法,方法名与sql 映射文件中的 sql 语句的id 一致

定义接口 EmployeeMapper

package com.myt.dao;

import com.myt.bean.Employee;

public interface EmployeeMapper {
	
	//方法名与映射文件中 sql 的 id一致
	public Employee getEmp(String id);
	
}

测试

package com.myt.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

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.myt.bean.Employee;
import com.myt.dao.EmployeeMapper;

public class MainTest {
	
	
	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		return new SqlSessionFactoryBuilder().build(inputStream);
	}
	
	@Test
	public void Test2() throws IOException{
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		// 2、获取sqlSession对象
		SqlSession session = sqlSessionFactory.openSession();
		//获取接口的实现类对象
		//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
		try {
			EmployeeMapper mapper = (EmployeeMapper) session.getMapper(EmployeeMapper.class);
			Employee e = mapper.getEmp("C1707856");
			System.out.println("返回Javabean2.."+e);
		} finally {
			session.close();
		}
	}

}

你可能感兴趣的:(Mybatis,Mybatis)