官方文档: https://mybatis.org/mybatis-3/zh/index.html 百度百科: MyBatis 本是 apache 的一个 开源项目 iBatis, 2010 年这个 项目 由 apache software foundation 迁移到了 google code ,并且改名为 MyBatis 。 2013 年 11 月迁移到 Github 。 iBATIS 一词来源于 “internet” 和 “abatis” 的组合,是一个基于 Java 的 持久层 框架。 iBATIS 提供的持久层框 架包括 SQL Maps 和 Data Access Objects ( DAOs ) 当前,最新版本是 MyBatis 3.5.7 ,其发布时间是 2021 年 4 月 21 日。 官网 : MyBatis 是一款优秀的 持久层框架 ,它支持自定义 SQL 、存储过程以及高级映射。 MyBatis 免除了几乎 所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBatis 可以通过简单的 XML 或注解来配置和映 射原始类型、接口和 Java POJO ( Plain Old Java Objects ,普通老式 Java 对象)为数据库中的记录。 二,为什么需要Mybatis? 简化传统的JDBC代码,能够实现自动化映射 简单,容易上手 大部分公司都在用 优点: 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配 置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的 设计思路和实现。 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里, 便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系 统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。 提供映射标签,支持对象与数据库的orm字段关系映射 提供对象关系映射标签,支持对象关系组建维护 提供xml标签,支持编写动态sql。 三,制作第一个mybatis程序 1.搭建数据库
创建一个父类的项目,里面创建module项目,在子类的pom.xml文件中创建一个
parent里面的三行是从父类的pom.xml文件中复制过来就好 2.创建项目,导入依赖org.example mybatisPractice1.0-SNAPSHOT
导入mybatis依赖还有mysql依赖
mybatis依赖去百度mybatis官网上搜索,复制下来就好
3.编写配置文件mybatis-config.xml官网上搜即可
4.搭建框架
在resources下创建db.properties文件
注意,写命令时不能加空格和分号
在mybatis-config.xml文件中引入db.properties文件
然后在resources下创建directory目录Mapper下创建UserMapper.xml文件(名字随意.xml)
创建好后去官网上复制
select * from Blog where id = #{id}
这个,然后这个和上面mybatis-config.xml要连接起来,
在创建一个接口,用来连接刚才新建的那个.xml文件
现在我们这三个就连接起来了
5.创建工具类
package com.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class baseDaoUtil {
private static SqlSessionFactory sessionFactory;
static {
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取SqlSession对象
public static SqlSession sqlSession(){
return sessionFactory.openSession();
}
}
写入静态代码块里是为了更好的被其他类调用
6.创建实体类创建一个pojo包下创建一个实体类(User 名字随意),写上n个属性,获取getter/setter方法,获取有参无参函数,
1-1,查找数据库所有信息
在接口中写入方法
ListqueryUserList();
然后去新建的UserMapper.xml文件中写sql语句
这里面的id就是接口中的方法名,resultType需要映射返回值User,因为接口中写的要返回User对象,所以要映射
7.创建测试类test
创建一个测试类UserMapperTest(类名随意),
这样就可以查到所有的数据了
1-2,增加信息 还是一样在接口中写方法
int addUser(User user);
然后去UserMapper.xml文件中写sql语句
insert into user (id,userName,pwd) values (#{id},#{userName},#{pwd});
接口中参数是user类,所以parameterType是接收参数类型的,parameterType=“User实体类的路径地址”
然后去测试类测试
@Test
public void addUser(){
SqlSession sqlSession = baseDaoUtil.sqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int rows = mapper.addUser(new User(1, "张紫怡", "250"));
System.out.println("新增数据"+rows+"条");
sqlSession.commit();
sqlSession.close();
}
ok搞定!
1-3修改信息写接口
int updateUser(User user);
接着去写sql语句
update user set userName = #{userName},pwd = #{pwd} where id = #{id};
然后测试类写
@Test
public void updateUser(){
SqlSession sqlSession = baseDaoUtil.sqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int name = mapper.updateUser(new User(3, "zhuang", "200"));
System.out.println("修改成功"+name+"条");
sqlSession.commit();
sqlSession.close();
}
1-4 删除信息
写接口
int deleteUser(@Param("id") int id);
写sql语句,在这里参数是int,parameterType=“这里直接写int,与前面的参数要对应”
delete from user where id = #{id};
写测试
@Test
public void deleteUser(){
SqlSession sqlSession = baseDaoUtil.sqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.deleteUser(6);
System.out.println("删除"+i+"条数据");
//增删改需要提交事务
sqlSession.commit();
sqlSession.close();
}
在这里会有人说,为啥有的里面有sqlSession.commit();有的没有
因为查找数据的时候是不需要提交事务的
增删改都需要手动提交事务,sqlSession.commit();手动提交事务



