Mybatis-9.28
环境:
- JDK1.8
- Mysql 5.7
- maven 3.6.1
- IDEA
回顾:
- JDBC
- Mysql
- Java基础
- Maven
- junit
框架:配置文件
官网文档:https://mybatis.org/mybatis-3/zh/index.html
1、简介
1.1、 什么是Mybatis
- MyBatis 是一款优秀的持久层框架
- 它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
- MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
- MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
如何获得Mybatis?
- maven仓库:https://mvnrepository.com/artifact/org.mybatis/mybatis
- Github : https://github.com/mybatis/mybatis-3/releases
1.2、持久化
数据持久化
- 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
- 内存:断电即失
- 数据库(jdbc),io文件持久化
- 生活中的例子:冷藏食物、罐头。
为什么需要持久化?
-
有一些对象,不能让他丢掉。
-
内存太贵了 ,所以才把东西存在硬盘里
1.3、持久层
- 完成持久化工作的代码块
- 层的界限十分明显。
1.4、为什么需要Mybatis
-
帮助程序员将数据存入到数据库中。
-
方便
-
传统的JDBC代码太复杂。简化JDBC代码
-
不用Mybatis也可以,但是学习它更容易上手。
1.5、Mybatis 特点
- 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
- 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
- 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射
- 提供对象关系映射标签,支持对象关系组建维护
- 提供xml标签,支持编写动态sql。 [2]
2、第一个Mybatis 程序
思路:搭建环境—导入Mybatis—编写代码—测试
2.1、搭建环境
搭建数据库
新建一个maven项目
导入依赖
mybaties依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
2.2、创建一个模块
- 编写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?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
2.3、编写Mybatis 工具类
官网的入门教程:
1.从 XML 中构建 SqlSessionFactory
使用Mybatis的第一步:获取SqlSessionFactory对象
2.从SqlSessionFactory 中获取 SqlSession
既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:
2.4编写代码
1.建立对应数据库的实体类
2.Dao接口
3.接口实现类
是一个mapeer.xml配置文件
4.测试
注意的是:
测试结果:
3、CRUD
1、namespace
namespace中的包名要和DAO/Mapper中的包名一致
2、增删改查
-
id: 对应接口中的方法名
-
resultType :查询的返回值类型
-
parameteType:参数类型
增删改查通用的三大步骤
- 编写对应的接口
2.在Mapper.xml文件中编写对应接口的mapper中的sql语句
<mapper namespace="com.lei.dao.UserDao">
<select id="getUserList" resultType="com.lei.pojo.User">
select * from mybatis.user
</select>
<select id="getUserByid" parameterType="int" resultType="com.lei.pojo.User">
select * from mybatis.user where id =#{id}
</select>
<insert id="addUser" parameterType="com.lei.pojo.User" >
insert into mybatis.user (id,name,pwd) values(#{id },#{name },#{pwd})
</insert>
<update id="Update" parameterType="com.lei.pojo.User">
update mybatis.user set id=#{id}, name=#{name } ,pwd=#{pwd} where id=1 ;
</update>
<delete id="delete" parameterType="com.lei.pojo.User">
delete from mybatis.user where id=#{id}
</delete>
</mapper>
3.在测试类中启动测试
- 测试的第一步:获取SqlSession对象
- 第二步:通过sqlsession对象获取mapper
- 第三步:通过mapper执行接口中写好的sql语句
值得注意的是 增删改操作需要提交事务
sqlSession.commit();
3、Map
假设,我们的实体类或者数据库中的表,字段或者参数过多,我们应当考虑使用Map
相当于 往数据库里面传递一些键值对:
//通过Map添加用户
int addUser2( Map<String ,Object> map);
//通过Map查寻用户
User getUserByid2( Map<String ,Object> map);
<insert id="addUser2" parameterType="map">
insert into mybatis.user (id,pwd) values (#{userid},#{userpassword})
</insert>
<select id="getUserByid2" parameterType="map" resultType="com.lei.pojo.User">
select * from mybatis.user where id=#{hello} and name=#{name };
</select>