MyBatis框架学习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis框架学习相关的知识,希望对你有一定的参考价值。
MyBatis介绍
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并改名为MyBatis。2013年11月迁移到Github。iBatis一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
当我们在DAO层使用jdbc连接数据查询数据时,会发现有许多重复的代码。
为了减少代码量与遵循开发规范,我们可以使用MyBatis框架。
MyBatis作为一个持久层的框架,几乎消除了jdbc代码。
它能够将数据库中的记录映射成基本类型、Map类型和Pojo类型。
MyBatis在开发中的位置
由上图可以看出MyBatis位于DAO层,具体来说是DAO层下面连接数据库的实现类中。
我们可以分析一下jdbc连接数据那些变化的部分
从上面的图片我们可以看出在使用jdbc连接数据的时候那些变化的部分:
1、输入参数类型
2、sql语句
3、参数设置
4、封装数据
那些重复的部分交给MyBatis框架完成,变化的部分我们在程序中仍要实现,就好像我们之前使用的根据类一样。
只不过在使用了框架之后,实现的方式有写代码的方式转到配置文件元素的方式而已。
MyBatis应用的简单程序
1、新建Java工程
2、导入相关的jar包
3、编写全局配置文件
<?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>
<!-- mybatis的运行环境
数据库信息
事务
-->
<environments default="development">
<environment id="development">
<!-- jdbc事务 -->
<transactionManager type="JDBC" />
<!-- mybatis自身数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>
<!-- 映射文件的信息 -->
<mappers>
<mapper resource="sqlmap/GoodsDAO.xml"/>
</mappers>
</configuration>
4、实体类:GoodsModel
package cn.sxt.mybatis.vo; public class GoodsModel { private int uuid; private String name; private String description; private float price; public GoodsModel() { } public GoodsModel(int uuid, String name, String description, float price) { this.uuid = uuid; this.name = name; this.description = description; this.price = price; } public int getUuid() { return uuid; } public void setUuid(int uuid) { this.uuid = uuid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((description == null) ? 0 : description.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + Float.floatToIntBits(price); result = prime * result + uuid; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; GoodsModel other = (GoodsModel) obj; if (description == null) { if (other.description != null) return false; } else if (!description.equals(other.description)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (Float.floatToIntBits(price) != Float.floatToIntBits(other.price)) return false; if (uuid != other.uuid) return false; return true; } @Override public String toString() { return "GoodsModel [uuid=" + uuid + ", name=" + name + ", description=" + description + ", price=" + price + "]"; } }
5、编写mapper文件
<?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="goods">
<select id="getByUuid" parameterType="int" resultType="cn.sxt.mybatis.vo.GoodsModel">
select * from tbl_goods where uuid=#{uuid}
</select>
</mapper>
6、编写测试类
package cn.sxt.mybatis.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 cn.sxt.mybatis.vo.GoodsModel;
public class TestApp {
public static void main(String[] args) throws IOException {
String resource = "SqlMapConfig.xml";
//根据全局配置文件得到输入流
InputStream inputStream = Resources.getResourceAsStream(resource);
//根据输入流创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//根据SqlSessionFactory创建sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//操作
GoodsModel gm = sqlSession.selectOne("goods.getByUuid", 1);
System.out.println(gm);
sqlSession.close();
}
}
数据库表:
从上面的程序我们可以看出:
1、相关的jar包无须解释。
2、全局配置文件是和我们所用的数据库有关,里面的mapper元素需要我们进行手动配置。
3、mapper文件是使用MyBatis的一个重点。
namespace:命名空间,防止多个id一样的方法,在调用方法时用到。
id:方法名
parameterType:输入参数类型
resultType:返回结果类型
sql语句:#{uuid} 相当于之前的‘?‘
4、在TestApp中,我们不需要再写jdbc中那些重复的步骤。相比之下,我们需要得到一个SqlSession实例,而这个这实例可以从MyBatis框架中获取,我们可以忽略它。然后就是调用它的相对应的方法,输入相应的参数,获取查询结果。
以上是关于MyBatis框架学习的主要内容,如果未能解决你的问题,请参考以下文章