一、Mybatis简介
1.1 MyBatis背景
MyBatis本是apache的一个开源项目iBatis,2010年这个
1.2 MyBatis特点
-
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。
-
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 映射成数据库中的记录。
-
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。
-
MyBatis 不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
-
解除sql与程序代码的耦合,通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
1.3 持久化
-
持久化是将程序数据在持久状态和瞬时状态间转换的机制。
-
即把数据保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等。
-
JDBC就是一种持久化机制。文件IO也是一种持久化机制。
-
-
由于内存本身的缺陷导致需要持久化服务。
-
内存断电后数据会丢失,但有些对象是不能够丢失的。
-
内存的价格过于昂贵,而且维持成本也高,所以即使对象不需要永久保存,也需要持久化地缓存到外存。
-
1.4 持久层
-
持久层是完成持久化工作的代码块 。
-
数据持久化意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系型数据库来完成。
-
对于应用系统而言,数据持久功能大多是必不可少的组成部分。我们的系统架构中,应该有一个相对独立的逻辑层面,专著于数据持久化逻辑的实现。
-
1.5 MyBatis的优势
-
Mybatis能够方便地将数据存入数据库中 ,以及从数据库中读取出数据。
-
Mybatis可以减少重复代码,提高开发效率。传统的jdbc操作,有很多重复代码块 (比如 :数据库的建立连接等)。
-
MyBatis 是一个半自动化的ORM框架 -->对象关系映射框架
二、MyBatis实践
2.1 操作流程:
-
搭建数据库,创建相关实验表。
-
导入MyBatis相关jar包。
-
Maven仓库中下载
-
Github中下载
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency> -
-
编写MyBatis核心配置文件。
-
编写MyBatis工具类。
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取Sql Session连接
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
-
创建数据库实体类。
public class User {
private int id; //id
private String name; //姓名
private String pwd; //密码
//构造,有参,无参
//set/get()
//toString()
public User() {
}
...
}
-
编写Mapper接口类。
public interface Mapper {
List<User> selectUser();
}
-
编写Mapper.xml配置文件。
-
编写测试类,Junit包测试。
public class MapperTest {
@Test
public void selectUser() {
SqlSession session = MybatisUtils.getSession();
//方法一:
//List<User> users = session.select List("com.mybatis.mapper.Mapper.select User");
//方法二:
Mapper mapper = session.getMapper(Mapper.class);
List<User> users = mapper.selectUser();
for (User user: users){
System.out.println(user);
}
session.close();
}
}
-
运行测试结果
注意:Maven静态资源过滤问题
-
项目结构图:
2.2 错误及解决
-
IDEA连接数据库失败:
-
原因:该问题的原因是MySQL驱动jar中的默认时区是UTC,UTC代表的是全球标准时间 ,但是我们使用的时间是北京时区也就是东八区,领先UTC八个小时。
-
解决方法:在“高级”标签中手工设置“serverTimezon"属性值。
-
-
IDEA运行失败,报如下错误:Type interface com.mybatis.dao.Mapper is not known to the MapperRegistry.
-
解决方法:在mybatis-config.xml文件中添加如下代码:
<mappers>
<mapper resource="com/mybatis/dao/Mapper.xml"/>
</mappers> -
-
-
解决方法:在父工程的pom文件中添加如下代码:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build> -