mybatis是个ORM(Object Relational Mapping 对象模型到关系模型的映射)框架。解决对象模型到二维表的关系模型的阻抗不匹配的问题。ORM框架在三层结构中,处在持久层,业务层调用持久层,持久层与数据库打交道,完成数据的CRUD操作,事务管理等。
ORM框架一般都需要两个元素来支持数据的持久化,1是建立维护数据库的关联;2是对象模型到关系的映射。对应mybaits的两种配置文件,基础配置文件和映射文件。
官网中文在线教程http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html,也有PDF的版可以下载
开发环境搭建
- 建立maven项目,提供依赖包
在pom.xml加入以下依赖
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency>
- 在src/main/resources下提供基础配置文件(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> <!-- 引入外部properties文件 --> <properties resource="jdbc.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> </configuration>
jdbc.properties文件
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test username=root password=root
- 创建表
DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` int(10) NOT NULL AUTO_INCREMENT, `username` varchar(40) NOT NULL, `password` varchar(40) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT INTO `t_user` VALUES ('1', 'alex', '123'); INSERT INTO `t_user` VALUES ('2', 'bing', '5234');
- 创建实体类
public class User {
private int id;
private String username;
private String password;
// 省略getter setter方法
// ...
// 重写toString 方法
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
- 配置映射文件(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.alex.app.entity.User"> <select id="selectUser" parameterType="int" resultType="com.alex.app.entity.User"> select * from t_user where id = #{id} </select> </mapper>
- 基础配置文件(mybatis-config.xml)中,使用mappers配置映射文件的指向(代码21-23行)
<?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文件 --> <properties resource="jdbc.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="com/alex/app/entity/User.xml"/> </mappers> </configuration>
- 测试
执行结果:public class UserTest { @Test public void testSelectUser() { try { // 加载基础配置文件 InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); // 创建SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); // 创建SqlSession SqlSession sqlSession = factory.openSession(); // 执行业务操作 /* selectOne方法说明 * 第一个参数是User.xml的namespace属性 + "." + select标签的id属性 * 第二个参数是id */ String statement = "com.alex.app.entity.User.selectUser"; User user = (User)sqlSession.selectOne(statement,2); System.out.println(user); } catch (IOException e) { e.printStackTrace(); } } }
User [id=2, username=bing, password=5234]