目录
一、MyBatis是什么
二、mybatis的优点
三、mybatis的缺点
四、mybatis与JDBC、jdbctemplate对比
1、JDBC
2、 MyBatis
3、 JdbcTemplate
五、mybatis工作原理
一、MyBatis是什么
mybatis是一个简化和实现了java数据持久层的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单易用的API和数据库交互。
二、mybatis的优点
1、与JDBC相比,减少了50%以上的代码量。
2、mybatis是最简单的持久化框架,小巧并且简单易学(使用简单,学习成本较低)。
3、mybatis灵活,不会对应用程序或者数据库的限售设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。
4、提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)
三、mybatis的缺点
1、SQL语句的编写工作量较大,对开发人员的SQL语句编写有一定的水平要求。
2、SQL语句过于依赖数据库,不能随意更换数据库。自动化程度不高,移植性也不高,有时从一个数据库迁移到另外一个数据库的时候需要自己修改配置,所以称只为半自动ORM框架
3、拼接复杂SQL语句时不灵活
注:复杂交易订单、支付等业务逻辑往往需要复杂SQL,本人曾在的互联网公司就没有使用mybatis,而是使用了JDBCTemplate.
四、mybatis与JDBC、jdbctemplate对比
相同点: 都是用于操作数据库
1、JDBC
JDBC英文名为:Java Data Base Connectivity(Java数据库连接),官方解释它是Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API,根本上说JDBC是一种规范,它提供的接口,一套完整的,允许便捷式访问底层数据库。
通过JDBC,Java应用程序可以与多种关系数据库进行交互,如Oracle、MySQL、SQL Server等。
JDBC存在的问题
1.数据库连接创建,释放频繁造成西戎资源的浪费,从而影响系统性能,使用数据库连接池可以解决问题。
2.sql语句在代码中硬编码,造成代码的不已维护,实际应用中sql的变化可能较大,sql代码和java代码没有分离开来维护不方便。
3.使用preparedStatement向有占位符传递参数存在硬编码问题因为sql中的where子句的条件不确定,同样是修改不方便/
4.对结果集中解析存在硬编码问题,sql的变化导致解析代码的变化,系统维护不方便。
举例说明:
public void test() throws SQLException {Connection conn=null;PreparedStatement pstmt=null;try {// 1.加载驱动Class.forName("com.mysql.jdbc.Driver");// 2.创建连接conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_example", "root", "123456");// SQL语句String sql="select id,user_name,create_time from t_user where id=?";// 获得sql执行者pstmt=conn.prepareStatement(sql);pstmt.setInt(1,1);// 执行查询//ResultSet rs= pstmt.executeQuery();pstmt.execute();ResultSet rs= pstmt.getResultSet();rs.next();User user =new User();user.setId(rs.getLong("id"));user.setUserName(rs.getString("user_name"));user.setCreateTime(rs.getDate("create_time"));System.out.println(user.toString());} catch (Exception e) {e.printStackTrace();}finally{// 关闭资源try {if(conn!=null){conn.close();}if(pstmt!=null){pstmt.close();}} catch (SQLException e) {e.printStackTrace();}}
}
2、 MyBatis
一句话总结:灵活的 SQL 控制(将SQL语句与Java代码进行解耦)
MyBatis 是一个持久层框架(需要在Spring中使用Mybatsi, 可以与Spring框架整合),用于将 SQL 语句和 Java 对象之间进行映射,它消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs (Plain Old Java Objects) 映射成数据库中的记录。
通过 XML 或注解配置 SQL 语句和映射关系,MyBatis 将 SQL 语句与 Java 代码解耦,使开发者能够更自由地编写和优化 SQL 语句。这使得 MyBatis 特别适用于需要精细控制 SQL 的应用场景。
Mybatis与JDBC的关系
Mybatis并没有取代JDBC,而是在JDBC的基础上进行了封装和扩展。Mybatis通过JDBC连接数据库,然后提供了一种更加简洁、灵活的方式来操作数据库。通过Mybatis,开发者可以更加专注于SQL语句的编写,而不需要关心底层的JDBC细节。
MyBatis通过什么方式连接数据库?
MyBatis是一款持久层框架,它提供了多种连接数据库的方式。其中最常用的方式是通过JDBC连接数据库。MyBatis使用JDBC来与数据库进行通信,通过配置数据源和数据库连接信息,可以轻松地连接到各种不同类型的数据库,如MySQL、Oracle、SQL Server等。
除了通过JDBC连接数据库外,MyBatis还支持通过JNDI和Spring的数据源来连接数据库。通过JNDI连接数据库需要在应用服务器中配置数据源,并在MyBatis的配置文件中指定JNDI名称。而通过Spring的数据源连接数据库,则需要在Spring的配置文件中配置数据源,并将数据源注入到MyBatis的SqlSessionFactory中。这些方式都能够实现与数据库的连接,并且可以根据具体的场景选择合适的方式来连接数据库。
举例说明:
<sql id="Base_Column_List">id, filename, fileurl, isdel</sql><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from filewhere id = #{id,jdbcType=INTEGER}</select>
3、 JdbcTemplate
一句话总结:简化的数据库访问
JdbcTemplate 是 Spring 框架中的一部分(Spring 框架提供的一个 JDBC 抽象层),它用于简化 JDBC 操作。它消除了可能导致大量代码的错误,如手动关闭连接和结果集。JdbcTemplate 自动进行事务管理,并且可以很容易地集成 Spring 的异常转换。
相对于 MyBatis,JdbcTemplate 提供了更高级别的接口,不需要手动编写 SQL 语句。通过方法调用和占位符,开发者可以执行数据库操作,如查询、插入、更新和删除等。
在 Spring 框架,你希望使用更简化的方式,那么选择 JdbcTemplate 是更合适的选择
举例说明:
// JdbcTemplate 使用
@Autowired
private JdbcTemplate jdbcTemplate;public User getUserById(int id) {String sql = "SELECT * FROM users WHERE id = ?";RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);return jdbcTemplate.queryForObject(sql, rowMapper, id);
}
五、mybatis工作原理
Mybatis在底层使用了JDBC进行数据库的连接和操作。