Mybatis框架 入门学习

目录

Mybatis框架简介

框架介绍

原始JDBC操作查询

原始JDBC操作问题分析

Mybatis框架介绍

Mybatis 架构

Mybatis快速入门

开发步骤

环境搭建

知识小结


Mybatis框架简介

框架介绍

什么是框架,为什么使⽤框架,框架优点 ?

框架( framework )是⼀个基本概念上的结构,⽤于去解决或者处理复杂的问题。

框架,即framework。其实就是某种应⽤的半成品,就是⼀组组件,供你选⽤完成你⾃⼰的系统。简单说就是使⽤别⼈搭好的舞台,你来做表演。 框架是在特定的领域内解决问题。

 

优点 :

    1). 重⽤代码⼤⼤增加,软件⽣产效率和质量也得到了提⾼。

    2). 使⽤框架开发,它提供统⼀的标准,⼤⼤降低了我们的后期维护。

 

java 开发中常⽤框架 :

    1). springmvc spring mybatis(ibatis) -- SSM

    2). SpringData SpringBoot SpringCloud

 

SSM框架在JavaEE开发中所处的位置:

 

原始JDBC操作查询

 
  1. @Test

  2. public void testQuery(){

  3. Connection connection = null;

  4. PreparedStatement preparedStatement = null;

  5. ResultSet resultSet = null;

  6. try {

  7. //加载数据库驱动

  8. Class.forName("com.mysql.cj.jdbc.Driver");

  9. //通过驱动管理类获取数据库链接

  10. connection =DriverManager.getConnection("jdbc:mysql://localhost:3306/test_wensong","root", "root");

  11.  
  12. //定义sql语句 ? 表示占位符

  13. String sql = " select * from user where username = ?";

  14.  
  15. //获取预处理statement

  16. preparedStatement = connection.prepareStatement(sql);

  17.  
  18. //设置参数,第⼀个参数为sql语句中参数的序号(从1开始),第⼆个参数为设置的参数值

  19. preparedStatement.setString(1, "Tom");

  20.  
  21. //向数据库发出sql执⾏查询,查询出结果集

  22. resultSet = preparedStatement.executeQuery();

  23.  
  24. List<User> userList = new ArrayList<User>();

  25. //遍历查询结果集

  26. while(resultSet.next()){

  27. User user = new User();

  28. user.setId(resultSet.getInteger("id"));

  29. user.setUsername(resultSet.getString("username"))

  30. user.setSex(resultSet.getString("sex"));

  31. user.setAddress(resultSet.getString("address"));

  32. userList.add(user);

  33. }

  34. } catch (Exception e) {

  35. e.printStackTrace();

  36. }finally{

  37. //释放资源

  38. if(resultSet!=null){

  39. try {

  40. resultSet.close();

  41. } catch (SQLException e) {

  42. e.printStackTrace();

  43. }

  44. }

  45. if(preparedStatement!=null){

  46. try {

  47. preparedStatement.close();

  48. } catch (SQLException e) {

  49. e.printStackTrace();

  50. }

  51. }

  52. if(connection!=null){

  53. try {

  54. connection.close();

  55. } catch (SQLException e) {

  56. e.printStackTrace();

  57. }

  58. }

  59. }

  60. }

原始JDBC操作问题分析

原始 jdbc 开发存在的问题如下:

① . 数据库连接创建、释放频繁造成系统资源浪费从⽽影响系统性能 。

② . sql 语句在代码中硬编码,造成代码不易维护,实际应⽤ sql 变化的可能较⼤, sql 变动需要改变 java 代码 。

③ . 查询操作时需要⼿动将结果集中的数据⼿动封装到实体中。插⼊操作时需要⼿动将实体的数据设置到 sql 语句的占位符位置 。

 

应对上述问题给出的解决⽅案:

① . 使⽤数据库连接池初始化连接资源 。

② . 将 sql 语句抽取到 xml 配置⽂件中 。

③ . 使⽤反射等底层技术,⾃动将实体与表进⾏属性与字段的⾃动映射 。

 

Mybatis框架介绍

mybatis 是⼀个优秀的基于 java 的持久层框架,它内部封装了 jdbc ,使开发者只需要关注 sql语句本身,⽽不需要花费精⼒去处理加载驱动、创建连接、创建 statement 等繁杂的过程 。

mybatis 通过 xml 或注解的⽅式将要执⾏的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进⾏映射⽣成最终执⾏的 sql 语句 。

最后 mybatis 框架执⾏ sql 并将结果映射为 java 对象并返回。采⽤ ORM思想解决了实体和数据库映射的问题,对 jdbc 进⾏了封装,屏蔽了 jdbc api 底层访问细节,使我们不⽤与 jdbc api 打交道,就可以完成对数据库的持久化操作 。

MyBatis 官⽹地址: https://mybatis.org/mybatis-3/

Mybatis 架构

1). mybatis 配置⽂件

SqlMapConfig.xml ,此⽂件作为 mybatis 的全局配置⽂件,配置了 mybatis的运⾏环境等信息。mapper.xml ⽂件即 sql 映射⽂件,⽂件中配置了操作数据库的 sql语句。此⽂件需要在SqlMapConfig.xml 中加载。

2). 通过 mybatis 环境等配置信息构造 SqlSessionFactory 即会话⼯⼚

3). 由会话⼯⼚创建 sqlSession 即会话,操作数据库需要通过 sqlSession 进⾏。

4). mybatis 底层⾃定义了 Executor 执⾏器接⼝操作数据库, Executor接⼝有两个实现,⼀个是基本执⾏器 BaseExecutor 、⼀个是缓存执⾏器 CachingExecutor 。

5). MappedStatement 也是 mybatis ⼀个底层封装对象,它包装了 mybatis 配置信息及 sql映射信息等。mapper.xml ⽂件中⼀个 sql 对应⼀个 MappedStatement 对象, sql 的 id 即是 Mapped statement 的 id 。

6). MappedStatement 对 sql 执⾏输⼊参数进⾏定义,包括 HashMap 、基本类型、 pojo , Executor通过Mapped Statement 在执⾏ sql 前将输⼊的 java 对象映射⾄ sql 中,输⼊参数映射就是 jdbc编程中对 preparedStatement 设置参数。

7). MappedStatement 对 sql 执⾏输出结果进⾏定义,包括 HashMap 、基本类型、 pojo , Executor通过Mapped Statement 在执⾏ sql 后将输出结果映射⾄ java 对象中,输出结果映射过程相当于 jdbc编程中对结果的解析处理过程。

 

Mybatis快速入门

开发步骤

① . 添加 MyBatis 的坐标

② . 准备数据库环境

③ . 编写 User 实体类

④ . 编写核⼼⽂件 SqlMapConfig.xml

⑤ . 编写映射⽂件 UserMapper.xml

⑥ . 编写测试类

 

环境搭建

导⼊依赖

 
  1. <!--mybatis坐标-->

  2. <dependency>

  3. <groupId>org.mybatis</groupId>

  4. <artifactId>mybatis</artifactId>

  5. <version>3.4.5</version>

  6. </dependency>

  7. <!--mysql驱动坐标-->

  8. <dependency>

  9. <groupId>mysql</groupId>

  10. <artifactId>mysql-connector-java</artifactId>

  11. <version>8.0.16</version>

  12. </dependency>

  13. <!--单元测试坐标-->

  14. <dependency>

  15. <groupId>junit</groupId>

  16. <artifactId>junit</artifactId>

  17. <version>4.12</version>

  18. </dependency>

  19. <!--lombok坐标-->

  20. <dependency>

  21. <groupId>org.projectlombok</groupId>

  22. <artifactId>lombok</artifactId>

  23. <version>1.16.20</version>

  24. </dependency>

  25. <!--⽇志坐标-->

  26. <dependency>

  27. <groupId>log4j</groupId>

  28. <artifactId>log4j</artifactId>

  29. <version>1.2.17</version>

  30. </dependency>

2准备数据库环境

 
  1. create database mybatis;

  2. use mybatis;

  3. CREATE TABLE `user` (

  4. `id` int(11) NOT NULL AUTO_INCREMENT,

  5. `username` varchar(32) NOT NULL COMMENT '⽤户名称',

  6. `sex` char(1) DEFAULT NULL COMMENT '性别',

  7. `address` varchar(256) DEFAULT NULL COMMENT '地址',

  8. PRIMARY KEY (`id`)

  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  10. insert into `user` (`id`, `username`, `sex`, `address`)

  11. values(NULL,'Tom','男','北京');

  12. insert into `user` (`id`, `username`, `sex`, `address`)

  13. values(NULL,'Jack','男','上海');

  14. insert into `user` (`id`, `username`, `sex`, `address`)

  15. values(NULL,'Rose','⼥','⻄安');

  16. insert into `user` (`id`, `username`, `sex`, `address`)

  17. values(NULL,'Poll','⼥','利⽐亚');

 

3编写 User 实体

 

 
  1. @Data

  2. public class User {

  3. private Integer id;

  4. private String username;

  5. private String sex;

  6. private String address; }

编写 MyBatis核心文件

⽂件名 : SqlMapConfig.xml

 
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE configuration

  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">

  5. <configuration>

  6. <!--配置数据库运⾏环境-->

  7. <environments default="development">

  8. <environment id="development">

  9. <transactionManager type="JDBC"/>

  10. <dataSource type="POOLED">

  11. <property name="driver" value="com.mysql.cj.jdbc.Driver"/>

  12. <property name="url" value="jdbc:mysql://127.0.0.1:3306/test_wensong"/>

  13. <property name="username" value="root"/>

  14. <property name="password" value="root"/>

  15. </dataSource>

  16. </environment>

  17. </environments>

  18. <!--配置关联的SQL语句的映射⽂件-->

  19. <mappers>

  20. <mapper resource="UserMapper.xml"/>

  21. </mappers>

  22. </configuration>

编写 UserMapper 映射⽂件

⽂件名 : UserMapper.xml

 
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE mapper

  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  5. <mapper namespace="userMapper">

  6. <!--查询所有⽤户-->

  7. <select id="findAll" resultType="com.wensong.pojo.User">

  8. select * from user

  9. </select>

  10. </mapper>

查询所有用户

 
  1. public class UserTest {

  2. @Test

  3. public void findAllTest() throws IOException {

  4. //加载核⼼配置⽂件 SqlMapConfig.xml

  5. InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");

  6. //构造SQLSessionFactory对象

  7. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

  8. //构造SQLSession对象

  9. SqlSession sqlSession = sqlSessionFactory.openSession();

  10. //执⾏查询语句

  11. List<User> userList = sqlSession.selectList("userMapper.findAll");

  12. for (User user : userList) {

  13. System.out.println("user = " + user);

  14. }

  15. //释放资源

  16. sqlSession.close();

  17. }

  18. }

查询结果显示:

知识小结

 
  1. 1). 搭建环境, 导⼊依赖

  2. mybatis , mysql数据库驱动, junit , lombok

  3.  
  4. 2). 准备数据库环境

  5. 3). 编写实体类User

  6. 4). 编写核⼼配置⽂件

  7. A. mybatis的运⾏环境 -----> <environments>

  8. B. 加载映射配置⽂件 -------> <mappers>

  9.  
  10. 5). 编写映射配置⽂件

  11. SQL语句

  12.  
  13. 6). 编写测试代码

  14. A. 加载Mybatis的核⼼配置⽂件

  15. B. 构造SqlSessionFactory

  16. C. 构造SqlSession

  17. D. 调⽤SqlSession中的selectList执⾏查询

  18. E. 释放资源

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值