MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
基本使用方法如下:
首先创建一个数据库mybatis并在mybatis数据库下创建usertable 表
CREATE TABLE usertable (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(10) DEFAULT NULL,
sex int(11) DEFAULT NULL,
address varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 |
1、创建工程
打开eclipse创建一个Java工程,在工程中加入Junit4依赖方便测试,目录结构如下:
添加mybatis依赖和数据库连接驱动:
mybatis-3.2.7.jar
mysql-connector-java-5.1.7-bin.jar
2、在com.po包下写一个封装数据的简单类User,添加getters、setters和toString方法
package com.po;
public class User {
private int id;
private String username;
private int sex;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", address=" + address + "]";
}
}
首先是一个全局配置文件(名称可以自己制定),我这里取名为SqlMapConfig.xml内容如下:
4、创建mapper
在config文件夹下创建一个folder名为mapper
在mapper下创建UserMapper.xml(要注意命名规范)
insert into usertable(username, sex,address) values(#{username}, #{sex}, #{address})
这里封装了两个数据库操作
注意这里的namespace属性为com.dao.UserMapper这是我们要定义的接口的全限定类名,我们要定义一个接口,mybatis就会自动依据mapper配置文件自动生成代理类,这样就可以通过调用接口中的方法来实现对数据库的操作了。
在写完mapper配置文件后要记得在第三部的全局配置文件中注册该mapper。方法为:在
在定义dao接口之前要知道,接口和上面定义的mapper是一一对应的。对应规范如下:
1、 Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同 (一个sql语句就是一个statement)
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
package com.dao;
import com.po.User;
public interface UserMapper {
public User findUserById(int id) throws Exception;
public void insertUser(User user) throws Exception;
}
package com.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.Before;
import org.junit.Test;
import com.dao.UserMapper;
import com.po.User;
public class TestUserMapper {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws IOException{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws Exception{
//获取session
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取mapper接口的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用代理对象的方法
User user = userMapper.findUserById(9);
System.out.println(user);
sqlSession.close();
}
}
setUp方法中的代码可以作为一个模板来使用,在这个方法中最后通过SqlSessionFactoryBuilder来创建一个SqlSessionFactory的实例,对于所有的sql操作一个实例就够了。
然后在每个dao方法中都要由SqlSessionFactory来创建一个SqlSession实例
调用getMapper方法传入UserMapper的类类型生成代理对象,而后就可以进行增删改查操作了
最后切记要关闭sqlSession释放资源。
执行测试方法可以看到输出:
User [id=9, username=kitty, sex=1, address=NewYork]