什么是MyBatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis 是一款优秀的半自动的ORM持久层框架,它支持自定义 SQL、存储过程以及高级映射
持久层:可以立刻保存在磁盘上,这里可以理解为与数据库相关的操作。
什么是ORM:OBject Relation Mapping 对象关系映射
对象指的是面向面向对象,关系指的是数据库中的表,
例如Java语言中的POJO类与数据库模型之间的对应关系。
什么是半自动ORM 用mybatis进行开发,需要手动编写SQL语句。而全自动的ORM框架,如hibernate,则不需要编写SQL语句。用hibernate开发,只需要定义好ORM映射关系,就可以直接进行CRUD操作了。由于mybatis需要手写SQL语句,所以它有较高的灵活性,可以根据需要,自由地对SQL进行定制,也因为要手写SQL,当要切换数据库时,SQL语句可能就要重写,因为不同的数据库有不同的方言(Dialect),所以mybatis的数据库无关性低。虽然mybatis需要手写SQL,但相比JDBC,它提供了输入映射和输出映射,可以很方便地进行SQL参数设置,以及结果集封装。并且还提供了关联查询和动态SQL等功能,极大地提升了开发的效率。并且它的学习成本也比hibernate低很多
JDBC和MyBatis的主要角色
JDBC
- DriverManager,数据库驱动管理对象
- Connection,数据库连接对象
- Statement | PrepareStatement ,操作数据库SQL语句对象
- ResultSet,结果集对象
Mysbatis
- SqlSession对象,该对象包含了执行SQL语句的所有方法,例如JDBC里面Connection
- Executor接口,将传递过来的参数动态生成SQL语句,负责查询缓存。
- MappedStatement对象,该对象负责对SQL封装,用于存储需要映射的SQL语句及参数等信息
- ResultHandler对象,用户返回结果集合,封装成最红想要的数据类型,可以自定义返回类型
开发流程
1、在xml文件中添加mybatis相关的依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
2、配置核心文件
<?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>
<!-- 给数据源起别名,当使用dev数据源时就是使用该数据源-->
<environments default="dev">
<environment id="dev">
<!-- 采用什么方法对数据库事务进行管理-->
<transactionManager type="JDBC"></transactionManager>
<!-- 使用什么方法对数据源进行管理-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/database?......"/>
<property name="username" value=""/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
</configuration>
3、创建实体类。实体类就是和数据库表中相对应的java类,类中的属性就表中的字段。
实体类实例:
public class goods {
private Integer goodsId;
private String title;
private String subtitle;
//get、set方法
.......
}
4、Mapper映射文件 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="goods">
<!-- namespace:命名空间,用于区分不同的sql语句,因为不同的表可能会有想同的查询名称-->
<!-- id相当于sql语句的名称,resultType相当于查询返回的结果-->
<select id="selectAll" resultType="mybatis/entity/goods">
-- 正常的sql语句
select * from ....
</select>
</mapper>
使用mapper映射时要在config最后中添加记录,否则不会将该mapper作为映射文件。
<mappers>
<mapper resource="mapper/goods.xml"></mapper>
</mappers>
5、初始化sessionfactory。
//利用reader加载配置文件
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
// 初始化sqlsessionfactor对象,并解析mybatis-config
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//获取sqlsession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
6、利用sqlsqession操作数据
//使用命名空间加方法名来定位具体的sql语句并执行。
List<goods> list = sqlSession.selectList("goods.selectAll");
//关闭,释放资源
sqlSession.close();
总共的大体流程
public void testsqlsessionfactory() throws IOException {
//利用reader加载配置文件
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
// 初始化sqlsessionfactor对象,并解析mybatis-config
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//获取sqlsession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//使用命名空间加方法名来定位具体的sql语句并执行。
List<goods> list = sqlSession.selectList("goods.selectAll");
//关闭,释放资源
sqlSession.close();
}
在看网上的学习资料的时候发现可以写一个mapper接口,里面是方法的名称,然后再mapper的xml文件中namespace替换为接口,xml中的sql语句就和接口中的方法一一对应。
public interface interfacetest {
List<goods> selectAll;
}
//位置写的不太对,但可以这样实现
<mapper namespace="src/main/java/mybatis/mapper/interfacetest">
<select id="selectAll" resultType="mybatis/entity/goods">
select * from ....
</select>
</mapper>
学习参考: MyBatis从入门到精通_李昊哲小课的博客-CSDN博客、
blog.csdn.net/vcj10097848…