MyBatis基础,
MyBatis基础,
MyBatis
MyBatis是java平台下一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,简单普通的 Java对象)映射成数据库中的记录。
其前身为apache的ibatis后来迁移到Gihub并更名为MyBatis
特点:
1.轻量级自身不依赖其他任何JAR,但需要提供JDBC实现
2.灵活,更加适用于需求变化频繁的互联网应用
3.学习成本低,相比ORM框架而言,掌握MyBatis的使用是很轻松的
在结构中的位置
可以看出MyBatis处在DAO(数据访问对象)的位置,回顾一下DAO的工作职责:
连接数据库
接收输入数据
拼接并执行SQL
解析并返回结果
为什么需要MyBatis
使用JDBC完成DAO层存在以下问题
每次操作都需要手动的创建连接,最后关闭连接
对于重复代码通常开发者都会进行封装,但是由于每个人的编码风格不同导致封装的代码也没有固定的套路
MyBatis将数据库连接相关的参数放到配置XML中并封装了创建连接的代码
频繁的创建和销毁连接
由于数据库连接使用的是TCP长连接,并发量大的系统中,这样的方式会导致数据库连接资源耗尽
MyBatis本身实现了连接池,可以解决这一问题,当然后续会更换其他更好的连接池
接受参数拼接SQL语句并执行
每一条SQL语句都是直接写在代码中(硬编码),如果后期需求发生变化,则需要修改源码中的SQL,然后重新编译,测试.....
MyBatis将SQL语句从代码中剥离到Mapper.xml映射文件中
解析结果
JDBC返回的是ResultSet,必须手动将其映射到一个个的对象中,同样是重复度很高的代码;并且存在硬编码问题
MyBatis实现了入参映射到SQL参数,以及结果集映射到POJO对象
更多功能
MyBatis在解决上述问题的同时提供了更多实用的功能
动态SQL,即在SQL语句中可以包含逻辑处理(判断,循环等....)
高级映射,支持一对一,一对多映射
动态代理Mapper,使得可以用面向对象的方式来完成数据库操作
逆向工程,根据表结构自动生成,POJO,Mapper映射和Mapper接口,包含简单的CRUD
MyBatis构架
SqlMapConfig.xml作为全局配置,指定MyBatis的基本参数,如运行环境(开发,发布),事务管理器,数据来源等; 以及需要加载的mapper映射文件(从源码中剥离出来的SQL语句)
SqlSessionFactory,负责读取SqlMapConfig中的参数创建会话
- SqlSession,通过SqlSessionFactory获取一个Session(会话)
- Executor 真正负责执行sql语句的对象
MappedStatement用于将输入参数映射到sql语句,以及结果集映射到POJO
上述构架中,SqlSession以下的部分是MyBatis封装好的,SqlSession负责调用它们完成操作; 开发过程中不需要涉及(特殊需求除外);
另外SqlSessionFactory和SqlSession也可以通过简单的代码获取到,后续Spring框架能够自动创建它们
所以使用MyBatis的重点就落在了SqlMapConfig.xml以及Mapper.xml中
CRUD入门
环境搭建
官方文档:https://mybatis.org/mybatis-3/getting-started.html
查询数据
查询单个
UserMapper.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">
<!--namespace 用于多个Mapper出现相同的sql时区分不同包-->
<mapper namespace="com.kkb.UserMapper">
<!--查询语句
id用于表示这条sql
parameterType 表示 sql语句接受一个整数参数
resultType表示 将结果映射到Products对象中
#{} 表示一个站位符等同于 ?
若输入参数是基础数据类型则可以随意写
若输入是一个POJO则写属性名称-->
<select id="selectProductBtId" parameterType="int" resultType="com.kkb.pojo.Products">
select *from products where pid = #{pid}
</select>
</mapper>
不要忘记将这个mapper配置到mybatis-config.xml中
<mappers>
<mapper resource="mapper/ProductsMapper.xml"/>
</mappers>
@Test
public void TestSelect() throws IOException {
//获取的工厂构造器
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//加载配置文件
InputStream stream = Resources.getResourceAsStream("mybatis-config.xml");
//获得会话工厂
SqlSessionFactory factory = builder.build(stream);
//获得会话
SqlSession sqlSession = factory.openSession();
//执行sql
Products product = sqlSession.selectOne("selectProductBtId", 1);
System.out.println(product);
}
查询多个
需求:使用模糊查询名字中带有新疆的数据
插入数据
更新数据
删除数据
相关文章
- 暂无相关文章
用户点评