MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatement、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
官网: http://www.mybatis.org/mybatis-3/
开发jar包下载: https://github.com/mybatis/mybatis-3/releases
Mybatis整合Spring jar包下载: https://github.com/mybatis/spring/releases
Mybatis配置文件:mybatis-config.xml(建议名字,自己取的)
映射文件:Sql映射xml文件
创建流程:SqlSessionFactory - SqlSession
核心jar包:mybatis-x.x.x.jar
mysql jar 包:mysql-connector-java-x.x.x-bin.jar
在类路径下新建一个lib目录,把jar包放进lib目录
Eclipse : 右键jar包 - Source - build path
Idea : 右键jar包 - add a library
在src目录下新建一个文件 mybatis-config.xml
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<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/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="12345" />
dataSource>
environment>
environments>
configuration>
假设数据库有一张表 user,存在两个字段 id , name
实体类
public class User{
int id;
String name;
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getString(){
return name;
}
public void setString(String name){
this.name=name;
}
}
数据库表映射到实体类,原理是通过访问实体类的setter和getter方法
命名一般为:xxxMapper.xml
UserMapper.xml
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<select id="selectById" parameterType="int" resultType="com.shop.domain.User">
select * from tb_user where id=#{id}
select>
mapper>
namespace :命名空间,避免代码混乱
id :在命名空间中唯一的标识符,调用这个语句的功能时使用id引用
parameterType:传入的参数
resultType: 返回的值,要加上全路径,可以是一个对象,但是sql语句返回的列必须与对象属性名称相同,可以起别名使名称一致
select id,name from user
此处 sql 语句 返回字段 id , name 要和 实体类 User 属性 id , name 名称一致
添加这一段到 mybatis-config.xml
<mappers>
<mapper resource="com/shop/domain/UserMapper.xml"/>
mappers>
mybatis-config.xml 文件
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<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/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="12345" />
dataSource>
environment>
environments>
<mappers>
<mapper resource="com/shop/domain/UserMapper.xml"/>
mappers>
configuration>
编写测试类
public class TestDemo{
public static void main(String[] args){
//mybatis配置文件名
String config ="mybatis-config.xml";
//读取mybatis配置文件
InputStream is = Resources.getResourceAsStream(config);
//创建一个SqlSessionFactory对象,此对象可以完成对配置文件的读取,build有几个重载方法,这里使用参数为 InputStream 类型的 build 方法
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
//创建 一个 SqlSession对象
SqlSession session = sf.openSession();
//方法一
//接下来就可以执行sql操作了
try {
//Mapper文件路径+ Mapper文件中sql语句的 id 值
User user = (User) session.selectOne(
"com.shop.domain.UserMapper.selectById", 1);
} finally {
session.close();
}
//方法二
try {
//调用mapper文件进行数据操作
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectById(1);
} finally {
session.close();
}
}
简单的一个mybatis查询就完成了