MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回
那么mybatis到底是怎么样让其sql语句运行起来呢
今天就来解析一下xml文件
Mapper.xml文件 是Mybatis框架缺一不可的配置文件
Mapper.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="cn.yhmis.mapper.OrderMapper">
<!-- 查询所有 -->
<select id="list" resultType="Order">
SELECT * FROM tb_order
</select>
<!-- 删除某条记录 #{}占位符-->
<delete id="delete" parameterType="int">
DELETE FROM tb_order WHERE id=#{id}
</delete>
</mapper>
分析xml文件配置属性
- namespace一般指定为当前文件的所在包路径+文件名
将来在程序中通过[ namespace + id ]定位到执行哪一条SQL语句 - resultType返回值类型,简单类型(例如:Integer,String,Emp等)
如果返回集合(List),只需配置集合中的元素类型即可!
开发步骤:
- 1、导入dom4j工具包
- 2、定位当前类所在目录,然后得到Mapper.xml映射文件
- 3、创建解析对象SAXReader
- 4、获取根元素0
- 5、获取里面的元素(第一级)
- 6、遍历数组打印出所有属性
- 7、标签的内容
package analyse.data;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Test_xml {
@org.junit.Test
public void domaj() throws Exception {
String id = "list";
System.out.println("指定id=list的sql语句 获取 SQL语句");
// 空字符串,获取当前类所在路径
String dir = this.getClass().getResource("").getPath();
String fileName = dir + "OrderMapper.xml";
// 创建一个解析对象
SAXReader reader = new SAXReader();
FileInputStream in = new FileInputStream(fileName);
Document doc = reader.read(in);// xml文件
System.out.println(doc.asXML());// 打印 xml文件
// 获取根元素
Element root = doc.getRootElement();
// 根元素的内容返回是一个集合
Iterator<Element> it = root.elementIterator();
while (it.hasNext()) {// 迭代器遍历
Element e = (Element) it.next();
System.out.println(e.getName());
// System.out.println(e.getStringValue()); //去空格
// System.out.println(e.getStringValue().trim());
Iterator<Attribute> atts = e.attributeIterator();// 拿到属性值 集合遍历
while (atts.hasNext()) {
Attribute at = atts.next();
// System.out.println(at+"--------");
if (id.equals(at.getValue())) {
System.out.println("-------------------");
System.out.println("SQL语句:" + e.getStringValue().trim());
}
}
}
}
}