简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
其中mybatis的下载,可以通过github获取,地址:https://github.com/mybatis/mybatis-3
实例准备工作
为了便于理解,实例采用eclipse的普通工程加mysql作为讲解。
其中数据库用用户作为演示的实例,在mysql数据库中创建用户表,其用户结构及数据内容如下:
/*用户表 */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
`username` varchar(20) DEFAULT NULL COMMENT '用户名',
`password` varchar(20) DEFAULT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
insert into `user`(`id`,`username`,`password`) values (1,'demo','123456');
在eclipse中创建一个java工程。目录结构如下:
com.example.mybatis.config:用于存放mybatis的配置文件
com.example.mybatis.entries:用于存放对应的用户表对应的实体类
com.example.mybatis.mappers:用于存放mytabtis对应映射文件
test:用于存放对应的测试用例
通过github下载mybatis,把里面的mybatis-x.x.x.jar、log4j以及对应数据库类型的驱动放到lib目录下作为项目环境的依赖jar。
创建及配置MyBatis的资源配置文件
在com.example.mybatis.config创建一个名为mybatis-config.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>
<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://127.0.0.1/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 映射文件集合列表 -->
</mappers>
</configuration>
文件中的driver,url,username,password根据实际情况进行配置。
编写配置文件的测试用例,测试配置信息是否正确。测试用例代码如下:
package com.example.mybatis.config;
import static org.junit.Assert.*;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
public class MybatisConfigTest {
@Test
public void test() throws IOException {
String resource = "com/example/mybatis/config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
assertNotNull(sqlSessionFactory);
}
}
创建用户的实体类
在com.example.mybatis.entries目录下创建用户实体类文件:User.java。
package com.example.mybatis.entries;
/**
* 用户实体类
* @author root
*
*/
public class User {
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
创建针对用户表实现的映射文件
在com.example.mybatis.mappers目录下创建一个user.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="com.example.mybatis.mappers.user">
<select id="selectById" resultType="com.example.mybatis.entries.User">
select * from user where id = #{id}
</select>
</mapper>
把创建的user.xml添加到mybatis配置文件的映射器中,即加入<mappers></mappers>中。
<mappers>
<!-- 映射文件集合列表 -->
<mapper resource="com/example/mybatis/mappers/user.xml"/>
</mappers>
实现根据用户id获取用户信息用例
在test目录下com.example.mybatis 编写一个测试用例,根据用户id获取用户信息。
测试用例代码:
package com.example.mybatis.config;
import static org.junit.Assert.*;
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.example.mybatis.entries.User;
public class GetUserInfoByIdTest {
@Test
public void test() {
String resource = "com/example/mybatis/config/mybatis-config.xml";
SqlSession sqlSession=null;
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession=sqlSessionFactory.openSession();
User user= sqlSession.selectOne("com.example.mybatis.mappers.user.selectById", 1);
System.out.println(user.toString());
assertNotNull(user);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
sqlSession.close();
}
}
}
测试结果:
总结
通过示例我们可以发现最终查询数据是通过SqlSession来实现的。而SqlSession是通过一个会话工厂SqlSessionFactory获取的。所以每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
本文暂时没有评论,来添加一个吧(●'◡'●)