MyBatis基础操作
Posted LXMJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis基础操作相关的知识,希望对你有一定的参考价值。
MyBatis基础操作
一、Mybatis简介
1.1 MyBatis背景
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects。MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java对象映射成数据库中的记录。
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核心配置文件。
<?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"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?
use SSL=true&use Unicode=true&character Encoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis/dao/Mapper.xml"/>
</mappers>
</configuration>
-
编写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配置文件。
<?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="com.mybatis.dao.Mapper">
<select id="selectUser" resultType="com.mybatis.pojo.User" >
select * from user
</select>
</mapper>
-
编写测试类,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> -
-
IDEA运行失败,报如下错误:Could not find resource com/mybatis/dao/Mapper.xml
-
解决方法:在父工程的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> -
以上是关于MyBatis基础操作的主要内容,如果未能解决你的问题,请参考以下文章