码迷,mamicode.com
首页 > 其他好文 > 详细

Mybatis框架 入门学习

时间:2020-11-12 13:27:05      阅读:10      评论:0      收藏:0      [点我收藏+]

标签:关注   -o   管理类   springmvc   ref   简单   ODB   gets   class   

目录

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. //定义sql语句 ? 表示占位符

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

  13. //获取预处理statement

  14. preparedStatement = connection.prepareStatement(sql);

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

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

  17. //向数据库发出sql执?查询,查询出结果集

  18. resultSet = preparedStatement.executeQuery();

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

  20. //遍历查询结果集

  21. while(resultSet.next()){

  22. User user = new User();

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

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

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

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

  27. userList.add(user);

  28. }

  29. } catch (Exception e) {

  30. e.printStackTrace();

  31. }finally{

  32. //释放资源

  33. if(resultSet!=null){

  34. try {

  35. resultSet.close();

  36. } catch (SQLException e) {

  37. e.printStackTrace();

  38. }

  39. }

  40. if(preparedStatement!=null){

  41. try {

  42. preparedStatement.close();

  43. } catch (SQLException e) {

  44. e.printStackTrace();

  45. }

  46. }

  47. if(connection!=null){

  48. try {

  49. connection.close();

  50. } catch (SQLException e) {

  51. e.printStackTrace();

  52. }

  53. }

  54. }

  55. }

原始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. 2). 准备数据库环境

  4. 3). 编写实体类User

  5. 4). 编写核?配置?件

  6. A. mybatis的运?环境 -----> <environments>

  7. B. 加载映射配置?件 -------> <mappers>

  8. 5). 编写映射配置?件

  9. SQL语句

  10. 6). 编写测试代码

  11. A. 加载Mybatis的核?配置?件

  12. B. 构造SqlSessionFactory

  13. C. 构造SqlSession

  14. D. 调?SqlSession中的selectList执?查询

  15. E. 释放资源

Mybatis框架 入门学习

标签:关注   -o   管理类   springmvc   ref   简单   ODB   gets   class   

原文地址:https://www.cnblogs.com/jiagouX/p/13795086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!