MyBatis是Apache公司的一个开源项目iBatis,是基于Java的持久层框架,iBatis提供的持久层框架包括SQLMaps和
Data Access Object(DAO)。Mybatis主要用于解决数据库存储问题,是数据持久层框架,把实体类和SQL语句之间建立映射关系,是一种“半自动化”的ORM实现。
MyBatis使用简单的XML或注解用于配置和源文件映射,将接口和Java的普通对象(Plain Old Java Object)映射成数据库中的记录。
“半自动化”是相对于Hibernate等提供了全面数据库封装机制的全自动化ORM实现来说,“全自动”ORM实现了POJO和数据库表之间的映射和SQL的自动生成和执行。
1,基于SQL语法,简单易学
2,SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度
3,程序调试方便
4,Java与SQL分离,SQL语句都定义在xml文件中,也可以通过注解的方式在接口上实现(这些映射文件为mapper)
在数据库中建立数据表,在java类中实现与数据库字段相对应
package com.neusoft.vo;
public class MyBatisStudent {
private int id;
private String name;
private String phone;
private String address;
@Override public String toString() {
return "MyBatisStudent [id=" + id + ", name=" + name + ", " +
"phone=" + phone + ", address=" + address + "]";
}
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 String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public MyBatisStudent(int id, String name, String phone, String address) {
super();
this.id = id;
this.name = name;
this.phone = phone;
this.address = address;
}
public MyBatisStudent() {
super();
}
}
2,创建全局配置文件,配置数据资源,事物等MyBatis运行环境
MyBatis提供了三种数据源类型:UNPOOLED,POOLED,JNDI
(1)UNPOOLED: 实现在每次请求的时候简单的打开或者关闭一个连接,比较慢,作为一些不需要性能和立即响应的简单应用可以选择使用
(2)POOLED : 缓存了JDBC连接对象,避免每次都要连接和生成连接实例所需要的验证时间,对于并发WEB应用很流行,因为他有最快的响应时间
(3)JNDI : 它是为了准备和Spring或应用服务一起使用,可以在外部也可以在内部配置这个资源,然后在JNDI上下文中引用它
基础配置文件——事务管理:
MyBatis有两种事物管理类型:
JDBC:直接全部使用JDBC的提交和回滚功能。它依靠使用连接的数据源来管理事务的作用域
MANAGED:将事务管理交给Spring或者JAVAEE服务器
package com.neusoft.mapper;
import com.neusoft.vo.MyBatisStudent;
public interface StudentDao {
//插入对象
public void insertStudent(MyBatisStudent student);
//根据id删除
public void deleteStudent(int id);
//根据id更新
public void updateStudent(int id);
//根据id查询
public void selectStudent(int id);
}
配置映射文件
parameterType:指定输入参数的类型(例如通过id查询,则为int)
resultTYpe : 知道sql输出结果映射的java对象类型
id :接口中的方法名
#{ }表示一个占位符
#{A}:A表示接受输入的参数,根据id查询,则参数就是id
insert into mybatisstudent values (#{id},#{name},#{phone},#{address})
delete from mybatisstudent where id=#{id}
update mybatisstudent set name=#{name},phone=#{phone},address=#{address} where id=#{id}
4,测试,创建SqlSessionFactory工厂,创建SqlSession,执行数据库操作
package com.neusoft.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.neusoft.vo.MyBatisStudent;
public class TestMybatis {
@Test
public void insertStudent() throws IOException{
InputStream inputStream = Resources.getResourceAsStream("Mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = factory.openSession();
MyBatisStudent student = new MyBatisStudent();
student.setId(3);
student.setName("jack");
student.setPhone("222");
student.setAddress("222");
session.insert("test.insertStudent",student);
session.commit();
}
@Test
public void deleteStudent() throws IOException{
InputStream inputStream = Resources.getResourceAsStream("Mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = factory.openSession();
session.delete("test.deleteStudent",2);
session.commit();
}
@Test
public void updateStudent() throws IOException{
InputStream inputStream = Resources.getResourceAsStream("Mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = factory.openSession();
MyBatisStudent student = new MyBatisStudent();
student.setId(2);
student.setName("rose");
student.setPhone("888");
student.setAddress("888");
session.update("test.updateStudent",student);
session.commit();
}
@Test //需要导入JUnit4
public void selectStudent() throws IOException{
InputStream inputStream = Resources.getResourceAsStream("Mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = factory.openSession();
MyBatisStudent student = session.selectOne("test.selectStudent", 1);
System.out.println(student);
}
}
JUnit4导入方法:
在项目上点击右键——属性——在弹出的窗口左边选择“Java Build Path”,然后在右边选择“Libraries”,再在最右边选择“Add Library...”——在弹出的对话框中选择JUnit4并确定
运行时选择JUnit Test