mybatis的详解

mybatis的简单介绍:

MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。

  1)MyBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。
  2)它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
  3)mybatis与hibernate的对比?

   mybatis提供一种“半自动化”的ORM实现。
   这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。

    而mybatis的着力点,则在于POJO与SQL之间的映射关系。

Mybatis的功能架构分为三层:

1)       API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

2)       数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

3)      基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

mybatis配置文件(mybatis.cfg.xml)

<?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>

<typeAliases>
<typeAlias alias="student" type="entity.student"/>
</typeAliases>

<!-- 配置多个数据源环境  default为默认 -->
<environments default="students">
<!-- 具体配置数据库连接信息 -->
<environment id="students">
<!-- mybatis有两个事物管理  jdbc是 直接用jdbc管理;;       managed  :mybatis不负责管理  交由第三方容器 或是javaee服务器 -->
<transactionManager type="JDBC"></transactionManager>
<!-- UNPOOLED   POOLED   (JNDI,JDBC,C3P0,DBCP) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="accp"/>
</dataSource>
</environment>

</environments>

<mappers>
<mapper resource="entity/studentMapper.xml"/>
</mappers>

</configuration>
student实体类
package entity;

public class student {
private int id;
private String name;
private int age;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
}

studentMapper.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">
<!-- namespace必须写 -->
<mapper namespace="entity.student">

<insert id="addstudent" parameterType="entity.student" >
insert into student values(#{id},#{name},#{age})
</insert>

<select id="selectall" resultType="student">
select * from student
</select>

</mapper>

测试类mybatistest.java

package test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

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 entity.student;

public class mybatistest {
@Test
public void addstudent(){
    try {
        Reader reader=Resources.getResourceAsReader("mybatis.cfg.xml");
        SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
        SqlSessionFactory factory=sfb.build(reader);
        SqlSession session=factory.openSession();
        student stu=new student();
        stu.setAge(22);
        stu.setId(4);
        stu.setName("zhangsan");
        session.insert("entity.student.addstudent", stu);
        session.delete("entity.student.deletestu",1);
        session.commit();
        session.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

@Test
public void selectall(){
    try {
        Reader reader=Resources.getResourceAsReader("mybatis.cfg.xml");
        SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
        SqlSessionFactory factory=sfb.build(reader);
        SqlSession session=factory.openSession();
        List<student> list=session.selectList("entity.student.selectall");
        System.out.println(list.size()+"==="+list.get(0).getName());
        session.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

 

原文地址:https://www.cnblogs.com/xzjf/p/7150447.html