一、MyBatis
之前的项目中,我们的sql语句是直接嵌在java代码中的,这种方式使得程序移植后的维护修改非常繁琐。如果能将sql语句和java代码分离开来,显然能方便许多。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
二、实例应用MyBatis
项目结构:
数据库表:
1、jar包:
2、创建含有需要连接数据库方法的接口:
3、配置匹配该接口方法的xml file 文件:
<!-- user_info.xml文件 (文件名一般对应模块名、表名)-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace属性值为对应接口的全名,且与该项目中其他的此类型文件不可重名 -->
<mapper namespace="com.jd.userinfo.dao.IUserInfoDao">
<!-- id值为对应接口抽象方法名
resultType值为返回值类型 -->
<select id="getUserName" resultType="java.lang.String">
<!-- sql语句 -->
select user_name from user_info where id = #{id}
</select>
</mapper>
4、配置此项目的xml file 文件:
<!-- Mybatis_config.xml文件-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- environments标签内配置数据库信息
environments下可以有多个environment
default值为当前所用的配置id值 -->
<environments default="test">
<!-- 配置数据库连接信息 -->
<environment id="test">
<!-- 配置事务管理器 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<!-- 驱动 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- 链接 -->
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test" />
<!-- 用户名及密码 -->
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 这里指定映射的xml文件 -->
<mapper resource="user_info.xml" />
</mappers>
</configuration>
5、创建测试类:
public class Test {
public static void main(String[] args) {
try {
//通过数据流获取到mybatis_config.xml文件数据
InputStream inputStream = Resources.getResourceAsStream("mybatis_config.xml");
//根据数据流创建的会话工厂并获取:此语句执行后,已经获取之前xml文件中的映射对象,并生成动态代理
SqlSessionFactory sqlsessionfactory=new SqlSessionFactoryBuilder().build(inputStream);
//该会话工厂创建一次会话
SqlSession sqlsession =sqlsessionfactory.openSession();
//获取生成的动态代理对象,该对象为对应接口动态代理实现类所创建的对象
IUserInfoDao userInfoDao =sqlsession.getMapper(IUserInfoDao.class);
//查询数据库中第一条数据
String name=userInfoDao.getUserName("3ddcf637-15a8-49d9-a378-b3fa2f2f9c65");
//验证代理对象
System.out.println(userInfoDao.getClass());
//输出查询结果
System.out.println(name);
sqlsession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
测试类结果: