Mybatis是什么?
Mybatis简介
Mybatis官网:https://mybatis.net.cn/
mybatis是什么?
它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低。
mybatis是半自动的又该怎么理解呢?
用mybatis进行开发,需要手动编写SQL语句。而全自动的ORM框架,如hibernate,则不需要编写SQL语句。用hibernate开发,只需要定义好ORM映射关系,就可以直接进行CRUD操作了。由于mybatis需要手写SQL语句,所以它有较高的灵活性,可以根据需要,自由地对SQL进行定制,也因为要手写SQL,当要切换数据库时,SQL语句可能就要重写,因为不同的数据库有不同的方言(Dialect),所以mybatis的数据库无关性低。虽然mybatis需要手写SQL,但相比JDBC,它提供了输入映射和输出映射,可以很方便地进行SQL参数设置,以及结果集封装。并且还提供了关联查询和动态SQL等功能,极大地提升了开发的效率,并且它的学习成本也比hibernate低很多。
ORM又是什么?
ORM全称Object Relation Mapping,可以理解为对象关系映射。对象指的是Java对象,关系指的是数据库中的关系模型,对象关系映射,指的就是在Java对象和数据库的关系模型之间建立一种对应关系,比如用一个Java的Student类,去对应数据库中的一张student表,类中的属性和表中的列一一对应。Student类就对应student表,一个Student对象就对应student表中的一行数据。
持久层又该怎么理解呢?
在javaEE三层架构分别是表现层、业务层、持久层。为了保证代码的职责单一,我们将同数据库操作的代码称为持久层,持久层:对数据持久化,保存到数据库。
框架又怎么理解呢?
框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。比如说:对一个石膏模子进行上色处理,石膏的大体模型已经雕刻好了,只需要对石膏模型进行上色处理即可。
Mybatis简化了JDBC操作
JDBC操作数据库的步骤请看[https://www.cnblogs.com/totora/p/17958845]
JDBC缺点:
1.硬编码(很多重复,且耦合性强的代码,注册驱动,获取连接、SQL语句)。
2.操作繁琐(手动设置参数,手动封装结果集及资源管理)。
注意:在使用jdbc或mybatis时,需要在mysql中先创建表和添加数据,并且需要创建实体类。
JDBC连接数据库的四个参数Driver、Url、userName、Password都是直接写进代码中,属于编码方式,这样维护起来非常麻烦。因为它们在代码编译后不可动态更改,也不利于安全管理和不同环境下的部署。
Myabtis将这些参数写进mybatis-config配置文件里面,以后直接在配置文件中修改即可。
点击查看代码
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/teest?useSSL=false&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
JDBC中就是SQL语句也是直接嵌入在Java代码中,一旦表名或其结构发生变化,或者需要修改查询逻辑,都需要修改这段代码,不具备良好的可维护性和灵活性。
为了提高代码的可维护性和适应性,通常建议将此类SQL查询放入配置文件中,或者采用ORM(对象关系映射)框架,将数据库操作抽象化。
点击查看代码
<select id="selectAll" resultType="com.demo.pojo.User" >
select * from user
</select>
JDBC需要手动设置参数,手动封装结果集及资源的关闭处理等
点击查看代码
statement = connection.prepareStatement("select * from user where id=?");
Statement statement2 = connection.createStatement();
//4.执行SQL语句
// resultSet = statement.executeQuery("select * from user ");//resultSet查询返回的结果集
((PreparedStatement) statement).setInt(1, 1);
//5.处理SQL语句执行返回的结果
List<User> userList = new ArrayList<User>();
while (resultSet.next()){
Integer id = resultSet.getInt(1);
String loginName = resultSet.getString(2);
String pwd = resultSet.getString(3);
String name = resultSet.getString(4);
User user = new User();
user.setId(id);
user.setLoginName(loginName);
user.setName(name);
user.setPwd(pwd);
userList.add(user);
}
可以使用mybatis简化JDBC操作
点击查看代码
public class mybatisTest {
@Test
public void testSelectAll() throws IOException {
//加载Mybatis核心配置文件,获取SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取Sqlsession对象,用来执行sql语句
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.selectAll();
System.out.println(userList);
sqlSession.close();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?