XML是什么以及其优势
为了解决传统JDBC开发模式的缺陷,就出现了mybatis等优秀的框架,其中这些框架的核心就是把对数据库的链接与操作的链接语句和sql语句转移到xml文件中,使得我们更改配置或sql语句时无需重新编译整个系统。
下面来介绍一下xml:
- 什么是xml
- xml的优势
- mybatis入门
什么是 XML?
XML 指可扩展标记语言(EXtensible Markup Language)。在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
XML的优点
以下内容来自于W3C的xml教程
-
XML的设计宗旨是传输数据,而非显示数据
-
XML 标签没有被预定义。您需要自行定义标签。
-
XML 被设计为具有自我描述性。
如上面的图片显示,这是一个再xml文件,用于存储信息的,而且我们很容易就能通过每个标签的属性(再标签内部使用双引号括起来的就是属性,所有xml文件都是如此)以及值(标签之间包裹的值)获取有用信息,并且提取的时候也很简单,找到对应属性就能获取值。比如上面文件就是代表
id为16111
姓名为ace
性别为男
试想如果按照文字方式存储,取出对应值该多么麻烦,而xml文件就能让我们根据属性取值。
再举一个更简单的例子:
<letter>
<from>ace</from>
<to>sxy</to>
<message>I love u</message>
</letter>
很明显,这是一封ace写个sxy的信,内容是I love u;而且这封信具有自我描述性。它拥有留言,同时包含了发送者和接受者的信息。是不是很直观而且便签都是我自定义的。
XML 简化数据共享
在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。
XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。
这让创建不同应用程序可以共享的数据变得更加容易。
所以传统JDBC缺陷都可以用mybatis弥补,mybatis就是使用xml配置数据库链接以及sql语句,减少硬编码
通过mybatis,我们可以将数据库内容转换到JavaBean中
mybatis-将配置信息放入xml文件中
首先你要下载mybatis框架并把jar包导入,构建路径,然后按照上图配置一下文件,其中Model文件夹放置JavaBean,要注意的是你在新建config文件夹后要把设为源文件
数据库链接配置文件SqlMapConfig.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">
<!--上面是指此xml文件需要依照mybatis标准定义写-->
<configuration>
<!-- 设置输出日志 -->
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<environments default="development">
<environment id="development">
<!-- 使用JDBC事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<!--数据库配置信息-->
<property name="driver" value="org.gjt.mm.mysql.Driver" />
<property name="url"
value="jdbc:mysql://localhost/test?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="1023" />
</dataSource>
</environment>
</environments>
<!-- 下面的就是sql映射配置文件,必须卸载configuration最后,运行时会加载-->
<mappers>
<mapper resource="UserMapper.xml" />
</mappers>
</configuration>
下面是sql映射文件 UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybaits.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--上面是指此xml文件需要依照mybatis标准定义写-->
<!--命名空间,会根据test去找要执行的sql语句-->
<mapper namespace="test">
<select id="findUserById" parameterType="int"
resultType="User">
select * from user where id=#{id}
</select>
</mapper>
数据库连接类Dataconnection.java
package com.ace.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;
public class Dataconnection {
private String resource = "SqlMapConfig.xml";
private SqlSessionFactory sqlSessionFactory;
private SqlSession sqlSession = null;
public SqlSession getConnect(){
try {
//通过Resource资源信息加载对象加载数据库配置文件,并产生于数据库交互的会话实例SqlSession
InputStream input = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);
} catch (IOException e) {
e.printStackTrace();
}
sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}
测试类:
package com.ace.Test;
import java.util.List;
import org.junit.*;
import org.apache.ibatis.session.SqlSession;
import com.ace.Model.User;
public class Main {
public Dataconnection dbcon = new Dataconnection();
//注意,如果你没有采用junit测试的话,就把下面的方法改为main方法即可
@Test
public void TestSelectByName() {
SqlSession sqlSession = dbcon.getConnect();
User user = sqlSession.selectOne("test.findUserById",1);
System.out.println(user);
sqlSession.close();
}
}
JavaBean类:User.java
package com.ace.Model;
public class User {
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", height=" + height + ", id=" + id + "]";
}
private String name;
private int age;
private int height;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return name;
}
public void setUsername(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}