MyBatis是一个第一类持久性框架,支持自定义SQL,存储过程和高级映射。MyBatis几乎消除了所有JDBC代码和手动设置参数以及检索结果。MyBatis可以使用简单的XML或Annotations来配置和映射基元,Map接口和Java POJO(Plain Old Java Objects,普通的Java 对象)到数据库记录。
-------来自MyBatis官网的解释
1)创建项目并导包
mybatis需要jar包:mybatis-3.3.0.jar
Oracle驱动jar包:ojdbc6.jar(如果你用mysql的话就要导入mysql的包)
日志记录jar包:log4j.jar
2)创建数据库
--创建表--
CREATE TABLE BLOG(
ID NUMBER PRIMARY KEY,
TITLE VARCHAR2(50),
CONTENT VARCHAR2(2000),
CREATE_TIME DATE,
TYPE VARCHAR2(50)
)
--创建序列--
CREATE SEQUENCE BLOG_ID_SEQ
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
NOCACHE;
3)驱动配置文件
建好结构,配置文件先创建好
4)配置文件mybatis-config.xml
每个MyBatis应用程序都围绕一个SqlSessionFactory实例。可以使用SqlSessionFactoryBuilder获取SqlSessionFactory实例。SqlSessionFactoryBuilder可以从XML配置文件或Configuration类的自定义准备实例构建SqlSessionFactory实例。
配置XML文件包含MyBatis系统核心的设置,包括用于获取数据库连接实例的DataSource,以及用于确定如何确定事务范围和控制事务的TransactionManager。XML配置文件的完整详细信息可以在本文档的后面找到。
5)创建实体对象
package club.superbug.mybatis.entity;
import java.io.Serializable;
import java.util.Date;
public class Blog implements Serializable {
private static final long serialVersionUID = 1L;
private int id; // 博文ID
private String title; // 博文标题
private String content; // 博文内容
private Date create_time; // 创建日期
private String type; // 类型
public Blog() {
super();
}
public Blog(int id, String title, String content, Date create_time, String type) {
super();
this.id = id;
this.title = title;
this.content = content;
this.create_time = create_time;
this.type = type;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "Blog [id=" + id + ", title=" + title + ", content=" + content + ", create_time=" + create_time
+ ", type=" + type + "]";
}
}
5)创建方法接口BlogController.java
package club.superbug.mybatis.mapper;
import java.util.List;
import club.superbug.mybatis.entity.Blog;
public interface BlogMapper {
/**
* 新增博客
* @param blog
* @return
* @throws Exception
*/
public int insertBlog(Blog blog) throws Exception;
/**
* 根据id修改博客
* @param blog
* @param id
* @return
* @throws Exception
*/
public int updateBlog(Blog blog, int id) throws Exception;
/**
* 根据id删除博客
* @param id
* @return
* @throws Exception
*/
public int deleteBlog(int id) throws Exception;
/**
* 根据id查看博客
* @param id
* @return
* @throws Exception
*/
public Blog selectBlog(int id) throws Exception;
/**
* 查询所有博客信息
* @return
* @throws Exception
*/
public List selectBlog() throws Exception;
}
6)创建映射文件blogMapper.xml
MyBatis 真正的力量是在映射语句中。和对等功能的jdbc来比价,映射文件节省非常多的代码量,MyBatis的构建就是聚焦于sql的。
sql映射文件有例如以下几个顶级元素:(按顺序)
cache配置给定命名空间的缓存。
cache-ref从其它命名空间引用缓存配置。
resultMap最复杂,也是最有力量的元素。用来描写叙述怎样从数据库结果集中来载入你的对象。
parameterMap已经被废弃了!老式风格的參数映射。内联參数是首选,这个元素可能在将来被移除。
sql能够重用的SQL块,也能够被其它语句引用。
insert映射插入语句。
update映射更新语句。
delete映射删除语句。
select映射查询语句。
INSERT INTO
BLOG(ID,TITLE,CONTENT) VALUES(BLOG_ID_SEQ.NEXTVAL,#{title},#{content})
DELETE FROM BLOG WHERE
ID=#{id}
UPDATE BLOG SET
CONTENT='SpringMVC' WHERE ID=#{id}
这时需要为mybatis.cfg.xml里注册BlogMapper.xml文件。
7)需要建立一个工具类文件MyBatisUtil.java
package utils;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* MyBatis工具类
* @author Administrator
*
*/
public class MyBatisUtil {
//使用单例模式
private static final SqlSessionFactory factory;
static{
String resource = "mybatis-config.xml";
Reader reader = null;
try {
//使用MyBatis提供的Resources类加载mybatis的配置文件
reader = Resources.getResourceAsReader(resource);
} catch (Exception e) {
System.out.println(e.getMessage());
}
//构建sqlSession的工厂
factory = new SqlSessionFactoryBuilder().build(reader);
}
public static SqlSessionFactory getFactory(){
return factory;
}
}
8)写个测试类测试一下
这里用junit
package club.superbug.mybatis.test;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import club.superbug.mybatis.entity.Blog;
import club.superbug.mybatis.mapper.BlogMapper;
import utils.MyBatisUtil;
public class MyTest {
@Test
public void insertBlog() {
SqlSession session = MyBatisUtil.getFactory().openSession();
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = new Blog();
blog.setTitle("java");
blog.setContent("不如c");
try {
int a = mapper.insertBlog(blog);
System.out.println(blog.toString());
session.commit();
if(a>0){
System.out.println("插入成功");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}