前言
MyBatis
是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs
(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
为什么要选择mybatis
框架呢?这里有一个原因:利用JDBC
代码来对数据库进行操纵会比较繁琐,而mybatis
可以使我们可以几乎仅用sql
就可以完全简单操纵数据库,使我们从JDBC
的泥潭中脱身。
通过下面例子,也许能够触发你入门mybatis
的起点。
配置
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
例
配置文件mybatis.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>
<properties>
<property name="driver" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="system"/>
<property name="password" value="Open1234"/>
</properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper.xml"/>
</mappers>
</configuration>
映射器配置文件mapper.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">
<mapper namespace="BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from PERSON where id=#{id} and NAME=#{name}
</select>
</mapper>
在映射器文件中实现接口,id
属性的值是要实现的接口方法名,resultType
的值是用于封装语句执行结果的类的名字
BlogMapper类(接口)
public interface BlogMapper {
Blog selectBlog(Blog b);
}
Blog类
public class Blog{
private int id;
private String name;
public String getName() {
return name;
}
public int getId() {
return id;
}
public Blog setId(int id) {
this.id = id;
return this;
}
public Blog setName(String name) {
this.name = name;
return this;
}
}
这里涉及到一个创新,用类来封装数据库中的字段,然后只需要传入一个初始化了属性的对象,便能够实现传入多个字段值的作用。
测试
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class pra {
public static void main(String[] args) throws Exception {
String resource = "mybatis.xml";
InputStream res = Resources.getResourceAsStream(resource);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(res);
Blog b
= ssf.openSession()
.getMapper(BlogMapper.class)
.selectBlog(
new Blog().setId(312)
.setName("黄海锋")
);
System.out.println(b.getId() + " : " + b.getName());
}
}
项目目录结构
简单的说就是,在映射器配置文件Mapper.xml
中用sql
语言实现接口BlogMapper