Mybatis学习(一)
第一章 Mybatis简介
一、Mybatis是什么?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二、使用步骤
1.引入jar包
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
导入jar包示例如下:
2.改写配置文件
从mybatis-3-mybatis-3.5.6\src\test\java\org\apache\ibatis\submitted\complex_property中获取Configuration.xml文件,复制到项目中的Config包下,进行改写。
代码如下:
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="" value=""/>
</transactionManager>
<dataSource type="UNPOOLED">
<property name="driver" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:complexprop"/>
<property name="username" value="sa"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--<mapper resource="org/apache/ibatis/submitted/complex_property/User.xml"/>-->
</mappers>
</configuration>
这里选择把主配置文件中的<mappers>
注释,实际上注释内容就是要关联的子文件路径。
3.数据库连接
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 实例可以用SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。
public class DBUtil {
//在DBUtil中获取sqlSession的方法
public SqlSession getSqlSession() throws IOException {
//获取主配置文件com/colin/config/Configuration.xml 字节流/字符流
InputStream inputStream = Resources.getResourceAsStream("com/colin/config/Configuration.xml");
//创建SqlSessionFactory工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过factory的openSession获取sqlSession实例
// SqlSession sqlSession = sqlSessionFactory.openSession();
// return sqlSession;
//如果选用无参的openSession方法,在进行增删改的时候需要通过sqlSession.commit手动提交
return sqlSessionFactory.openSession();
}
}
4.MyBatis的简单应用
创建sql包用来存储sql语句,在sql包中创建.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="User">
</mapper>
这里以删除用户为例,进行举例说明:
<delete id="deleteUserById">
delete from user where id = #{id}
</delete>
声明一个UserDao类,用来定义一些方法:
public class UserDao {
/**
* 根据id删除用户
* */
public void deleteUserById(int id) throws IOException {
SqlSession sqlSession = null;
try {
//获取sqlSession实例
sqlSession = new DBUtil().getSqlSession();
//调用sqlSession中的方法delete
int i = sqlSession.delete("deleteUserById", id);
System.out.println("受影响行数" + i);
//手动提交
sqlSession.commit();
} finally {
//关闭资源
assert sqlSession != null;
sqlSession.close();
}
}
}
这里以删除用户为例,定义了一个deleteUserById的方法。值得注意的是,如果这时候我们定义主函数,调用方法执行删除操作,会报如下错误:
这是因为我们定义的主配置文件尚未和子配置文件进行关联,将主配置文件中的:
<mappers>
<!--<mapper resource="org/apache/ibatis/submitted/complex_property/User.xml"/>-->
</mappers>
修改成:
<mappers>
<!--关联主配置文件和子配置文件-->
<mapper resource="com/colin/config/sql/User.xml"/>
</mappers>
这样我们就把主配置文件和子配置文件关联到了一起。
这时再次执行主方法,输出如下:
一个简单的Mybatis实例就演示完毕了。