简介
什么是MyBatis
- MyBatis 是一款优秀的持久层框架
- MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程
- MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。
- MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并 且改名为MyBatis 。 2013年11月迁移到Github .
- Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html
- GitHub : https://github.com/mybatis/mybatis-3
如何获得MyBatis
- Maven
- Github:
- 中文文档
- Maven仓库
什么是持久层
数据持久化
- 持久化是将程序的数据在持久状态和瞬时状态转化的过程
- 即把数据 (如内存中的对象)保存到可永久存储的设备(如硬盘上)
- 数据持久化的方式:数据库(jdbc),io文件持久化
- 生活:冷藏、罐头
- 为什么要持久化?
- 内存:断电即失
- 有一些对象不能丢掉
- 内存太贵
持久层
Dao层、Service层、Controller层
- 完成持久化工作的代码块 Dao(Data Access Object数据访问对象)层
- 持久化的实现过程大多是通过各种关系化数据库完成的
- 层界限十分明显
为什么需要MyBatis
- 帮助程序员将数据存入数据库中
- 半自动的ORM框架(Object Relation Mapping)—>对象关系映射
- 传统的JDBC代码太复杂,简化
- 不用MyBatis也可以
- 优点:
- 简单易学:本身小巧,没有第三方依赖。安装只要两个jar文件和配置几个sql映射文件就可以
- 灵活:SQL写在xml里,便于统一管理
- 解除sql与代码的耦合:提高了可维护性
- 提供映射标签,支持对象与数据库的orm关系字段映射
- 提供对象关系映射,支持对象关系组件维护
- 提供xml标签,支持编写动态sql
框架:依照模板自动化
MyBatis第一个程序
思路流程:搭建环境——>导入Mybatis——>编写代码——>测试
搭建实验数据库
CREATEDATABASE`mybatis`;
USE`mybatis`;
DROPTABLEIFEXISTS`user`;
CREATETABLE`user`(
`id`int(20)NOTNULL,
`name`varchar(30)DEFAULTNULL,
`pwd`varchar(30)DEFAULTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
insertinto`user`(`id`,`name`,`pwd`)values(1,'ks','123456'),(2,'张三','abcdef'),(3,'李四','987654');
新建一个普通的Maven项目
- 导入MyBatis相关jar包
- Github上找
<dependencies>
<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>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
- 配置 防止导出失败
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
- 创建一个Maven子项目
编写MyBatis核心配置文件
- 查看帮助文档
mybatis-config.xml
<?xmlversion="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<configuration>
<environmentsdefault="development">
<environmentid="development">
<transactionManagertype="JDBC"/>
<dataSourcetype="POOLED">
<propertyname="driver"value="com.mysql.jdbc.Driver"/><!--&相当于& 在xml中需要转义-->
<propertyname="url"value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<propertyname="username"value="root"/>
<propertyname="password"value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapperresource="com/kuang/dao/UserMapper.xml"/>
</mappers>
</configuration>
编写MyBatis工具类
- 查看帮助文档 com.kuang.dao MybatisUtil
importorg.apache.ibatis.io.Resources;
importorg.apache.ibatis.session.SqlSession;
importorg.apache.ibatis.session.SqlSessionFactory;
importorg.apache.ibatis.session.SqlSessionFactoryBuilder;
importjava.io.IOException;
importjava.io.InputStream;
publicclassMybatisUtils {
privatestaticSqlSessionFactorysqlSessionFactory;
static {
try {
// 获取SqlSessionFactory对象
Stringresource="mybatis-config.xml";
InputStreaminputStream=Resources.getResourceAsStream(resource);
sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);
} catch (IOExceptione) {
e.printStackTrace();
}
}
//获取SqlSession连接
publicstaticSqlSessiongetSession(){
returnsqlSessionFactory.openSession();
}
}
创建实体类
publicclassUser {
privateintid; //id
privateStringname; //姓名
privateStringpwd; //密码
//构造,有参,无参
//set/get
//toString()
}
编写Mapper接口类
importcom.kuang.pojo.User;
importjava.util.List;
publicinterfaceUserDao {
List<User>getUserList();
}
编写Mapper.xml配置文件
- namespace十分重要,不能写错 UserMapper.xml
<?xmlversion="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 绑定一个对应的Dao/Mapper接口-->
<mappernamespace="com.kuang.dao.UserDao">
<!--select查询语句 id对应方法名 resultType返回一个结果集-->
<selectid="getUserList"resultType="com.kuang.pojo.User">
select * from user
</select>
</mapper>
编写测试类
- junit测试
publicclassMyTest {
@Test
publicvoidselectUser() {
// 通过MybatisUtils获得工具类创建出的Session
SqlSessionsession=MybatisUtils.getSession();
//方法一:
//List<User> users =
session.selectList("com.kuang.mapper.UserMapper.selectUser");
//方法二:
UserMappermapper=session.getMapper(UserMapper.class);
// 获得映射(使得可以通过接口生成对象)
List<User>users=mapper.selectUser();
for (Useruser: users){
System.out.println(user);
}
session.close();
}
}