无锡市网站建设_网站建设公司_RESTful_seo优化
2026/1/17 10:47:34 网站建设 项目流程

完整教程:Mybatis入门

2026-01-17 10:45  tlnshuju  阅读(0)  评论(0)    收藏  举报

1.创建数据库

在数据库中创建一个表,命名随意,字段随意,但是一定要给id主键且自动递增!!!

给表添加数据

2.在idea中创建maven环境

在新建项目中选择maven而不是java

3.配置坐标

打开maven项目中的pox.xml文件

dependencies里面配置相应的mybatis依赖,mysql依赖和junit单元测试

 org.mybatismybatis3.5.5com.mysqlmysql-connector-j8.0.33runtimejunitjunit4.13test

4.配置文件

4.1.从 XML 中构建 SqlSessionFactory

!!!配置文件要放在resources下面

4.1.1 mybatis-config.xml


在url中:jdbc:mysql:///mybatis?useSSL=false-->mysql是你的数据库类型;mybatis是数据库的名称。

其中mapper是用来指明sql的映射文件的

4.2 sql映射文件

UserMapper.xml


id是此SQL语句的唯一标识,com.qcby.pojo.User你要包装的类型

5.定义User类

此类用于接受数据库的数据

package com.qcby.pojo;
public class User {private Integer id;private String username;private String password;private String sex;private String address;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", sex='" + sex + '\'' +", address='" + address + '\'' +'}';}
}

6.测试:

1.加载mybatis核心配置文件,获取SqlSessionFactory对象

        String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2.创建SqlSession对象,用于执行sql操作
SqlSession sqlSession = sqlSessionFactory.openSession();
3.执行 sql

其中添加的内容就是sql映射文件中的命名空间加唯一标识

List users = sqlSession.selectList("test.selectAll");

4.回收资源

sqlSession.close();

完整代码:

package com.qcby;
import com.qcby.pojo.User;
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;
import java.util.List;
public class mybatisDemo {public static void main(String[] args) throws IOException {//1.创建SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.创建SqlSession对象,用于执行sql操作SqlSession sqlSession = sqlSessionFactory.openSession();//3.执行 sqlList users = sqlSession.selectList("test.selectAll");System.out.println(users);//4.关闭SqlSession对象sqlSession.close();}
}

7.优化使用Mapper代理完成第三步执行 sql

  1. 定义与 SQL 映射文件同名的 Mapper 接口,并且将 Mapper 接口和 SQL 映射文件放置在同一目录下将映射文件放于接口同一文件下有两种方法:1.直接放于mapper包中(不推荐);2.在resources下创建与java中同结构的包名,!!!创建不能使用.要用/做为分割
  2. 设置 SQL 映射文件的 namespace 属性为 Mapper 接口全限定名
  3. 在 Mapper 接口中定义方法,方法名就是 SQL 映射文件中 sql 语句的 id,并保持参数类型和返回值类型一致                                                                                                                                 如果放回的是一个数据就是User,多个就用List<User>.其中User是和映射文件中类型相同还要修改mybatis配置文件中的映射地址优化使用包扫描
  4. 编码
    1. 通过 SqlSession 的 getMapper 方法获取 Mapper 接口的代理对象
    2. 调用对应方法完成 sql 的执行
 //3.获取UserMapper接口的代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List users = userMapper.selectAll();System.out.println( users);

8.总结

对比维度JDBC(原生)MyBatis(基于 JDBC 封装)
代码复杂度极高:需手写加载驱动、创建连接、编写 SQL、创建 Statement/PreparedStatement、设置参数、遍历结果集、关闭资源(连接 / Statement/ResultSet),代码冗余且重复。极低:无需手写连接管理、参数设置、结果集映射,仅需定义 Mapper 接口 + 编写 SQL(XML / 注解),框架自动完成底层 JDBC 操作。
SQL 编写与维护硬编码在 Java 代码中,SQL 与业务代码耦合,修改需改 Java 代码并重新编译,维护成本高;拼接 SQL 易出错(如字符串拼接导致语法错误 / 注入)。SQL 与 Java 代码解耦(XML / 注解),修改 SQL 无需改 Java 代码,维护更灵活;支持动态 SQL(if/where/foreach 等),避免手动拼接。
参数处理需手动通过setInt()/setString()设置参数,参数位置与 SQL 硬绑定,易因参数顺序错误导致问题。自动映射参数:支持按参数名(#{name})绑定,无需关心顺序;支持基本类型、POJO、Map、数组 / 集合等多类型参数,框架自动处理类型转换。
结果集映射需手动遍历 ResultSet,通过getInt()/getString()获取字段值,并手动封装为 POJO / 实体类,代码量大且易出错。半自动映射:支持resultType(简单类型 / POJO)、resultMap(复杂映射 / 关联查询),框架自动将结果集映射为 Java 对象,无需手动遍历封装;支持一对一、一对多等关联查询映射。
资源管理(连接 / 事务)需手动管理数据库连接:要么每次创建新连接(性能差),要么手动实现连接池(如 C3P0/Druid);事务需手动通过Connection.commit()/rollback()控制,且需保证连接一致性。内置连接池适配(可集成 Druid/HikariCP),自动管理连接获取 / 释放;事务管理更便捷:支持编程式(SqlSession)、声明式(Spring 整合后 @Transactional),无需手动操作 Connection。
SQL 注入风险若使用 Statement(拼接 SQL)则极易引发注入;使用 PreparedStatement 可避免,但需开发者严格遵守规范,无强制约束。默认使用 PreparedStatement(#{参数}),自动预编译 SQL,从框架层面规避注入风险;仅当使用 ${参数}(字符串替换)时需手动防范,安全性更高。
灵活性完全灵活:可自定义所有 JDBC 细节(如特殊的 Statement 类型、自定义结果处理),适合极致定制化场景,但开发成本高。兼顾灵活与规范:核心 SQL 由开发者编写(保留 SQL 灵活性),底层 JDBC 操作由框架封装;支持自定义 TypeHandler(类型处理器)处理特殊类型(如日期、枚举),满足定制化需求。
性能理论性能最高:无额外封装开销,但性能依赖开发者优化(如连接池、批处理);若手动管理不当(如频繁创建连接),性能反而差。略有封装开销(可忽略):框架底层仍用 JDBC,性能接近原生;内置批处理、缓存(一级缓存默认开启,二级缓存可选),优化后性能甚至优于手写 JDBC(避免开发者低级优化失误)。
调试与排错调试直观:可直接断点查看 SQL、参数、结果集,但需逐行排查 JDBC 代码;排错成本高(如资源未关闭导致连接泄漏)。需借助日志(如 MyBatis 日志插件)查看最终执行的 SQL 和参数;框架封装了底层,定位 JDBC 级问题需熟悉 MyBatis 原理,但日常调试(SQL / 参数)更便捷。
学习成本低:仅需掌握 JDBC 核心 API(Connection/Statement/ResultSet),入门快。中:需学习 MyBatis 配置(mybatis-config.xml)、Mapper 映射、动态 SQL、结果集映射等规则,入门略高于 JDBC。
扩展性与生态无生态:需手动封装工具类(如 JDBCUtil)实现连接池、通用 CRUD,扩展性完全依赖开发者。丰富生态:支持 Spring/Spring Boot 整合、分页插件(PageHelper)、代码生成器(MyBatis Generator)、逆向工程,可快速集成到主流开发框架。
异常处理需手动捕获 SQLException,且异常信息较底层(如 SQLState),需自行解析封装。框架封装了 JDBC 异常,转换为更友好的 MyBatisException,且可通过自定义异常处理器扩展,便于业务层统一处理。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询