Mybatis框架01

概述

  MyBadis是一个优秀的基于Java的持久层框架,内部封装了Jdbc,使开发者只需要关注SQL语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。

  Mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过Java对象和statement中SQL的动态参数进行映射生成最终执行的SQL,最后由mybatis框架执行SQL并将结果映射为Java对象并返回。

  采用ORM思想解决了实体和数据库映射的问题,对Jdbc进行了封装,屏蔽了Jdbc api底层访问细节,使我们不用与Jdbc api打交道,就可以完成对数据库的持久化操作。

  ORM:对象关系型映射。它的实现思想就是讲关系型数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作,因此他的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。

 1、JDBC编程的分析

 1.1 Jdbc程序的回顾

 1 public class Clazz {
 2     public static void main(String[] args) {
 3         Connection connection = null;
 4         PreparedStatement preparedStatement = null;
 5         ResultSet resultSet = null;
 6         try {
 7             // 加载数据库驱动
 8             Class.forName("com.mysql.jdbc.Driver");
 9             // 获取数据库连接
10             connection = DriverManager
11                     .getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root", "root");
12             // 定义SQL语句
13             String sql = "select * from user where username = ?";
14             // 获取预处理对象
15             preparedStatement = connection.prepareStatement(sql);
16             // 设置参数
17             preparedStatement.setString(1,"不为");
18             // 执行查询,获取结果集
19             resultSet = preparedStatement.executeQuery();
20             // 遍历查询结果集
21             while (resultSet.next()){
22                 System.out.println(resultSet.getString("id")+
23                 resultSet.getString("username"));
24             }
25         } catch (ClassNotFoundException e) {
26             e.printStackTrace();
27         } catch (SQLException e) {
28             e.printStackTrace();
29         } finally {
30             // 释放资源
31             if (resultSet!=null){
32                 try {
33                     resultSet.close();
34                 } catch (SQLException e) {
35                     e.printStackTrace();
36                 }
37             }
38             if(preparedStatement!=null){
39                 try {
40                     preparedStatement.close();
41                 } catch (SQLException e) {
42                     e.printStackTrace();
43                 }
44             }
45             if(connection!=null){
46                 try {
47                     connection.close();
48                 } catch (SQLException e) {
49                     e.printStackTrace();
50                 }
51             }
52         }
53     }
54 }

以上使用Jdbc的原始方法实现了查询数据库表记录的操作。

 1.2 Jdbc问题分析

  1、数据库在连接创建、释放频繁造成系统资源浪费而影响系统性能,如果使用数据库连接池可以解决此问题。

  2、SQL语句在代码中硬编码,造成代码不易维护,实际应用SQL变化的可能较大,SQL变动需要改变Java代码。

  3、使用preparedstatement向占位符传递参数存在硬编码,因此SQL语句的where条件不一定,有可能多也可能少,修改SQL还药修改代码,系统不易维护。

  4、对结果集解析存在硬编码(查询列名),SQL变化导致解析代码变化,系统不易维护,如果能够将数据库记录封装成pojo对象解析比较方便。

 2、Mybatis框架快速入门 -- 入门案例

        2.1 开发准备

    • 官网下载MyBadis框架
      2.2 搭建Mybatis开发环境
    • 创建Maven工程
    • 添加Mybatis的坐标
    •  1 <dependencies>
       2     <dependency>
       3         <groupId>org.mybatis</groupId>
       4         <artifactId>mybatis</artifactId>
       5         <version>3.4.5</version>
       6     </dependency>
       7     <dependency>
       8         <groupId>junit</groupId>
       9         <artifactId>junit</artifactId>
      10         <version>4.10</version>
      11         <scope>test</scope>
      12     </dependency>
      13     <dependency>
      14         <groupId>mysql</groupId>
      15         <artifactId>mysql-connector-java</artifactId>
      16         <version>5.1.6</version>
      17         <scope>runtime</scope>
      18     </dependency>
      19     <dependency>
      20         <groupId>log4j</groupId>
      21         <artifactId>log4j</artifactId>
      22         <version>1.2.12</version>
      23     </dependency>
      24 </dependencies>
    • 编写User实体类
    •  1 public class User {
       2     private int id;
       3     private String name;
       4     private String address;
       5
       6     public int getId() {
       7         return id;
       8     }
       9
      10     public void setId(int id) {
      11         this.id = id;
      12     }
      13
      14     public String getName() {
      15         return name;
      16     }
      17
      18     public void setName(String name) {
      19         this.name = name;
      20     }
      21
      22     public String getAddress() {
      23         return address;
      24     }
      25
      26     public void setAddress(String address) {
      27         this.address = address;
      28     }
      29 }
    • 编写持久层接口UserDao
    • public interface UserDao {
          /**
           * 查询所有用于
           * @return
           */
          List<User> findAll();
      }
    • 持久层映射文件UserDao.xml
    • 要求:创建位置必须和持久层在相同的包中,名称必须以持久层接口命名文件名,扩展名为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="com.itheima.dao.IUserDao">
       6     <!-- 配置查询所有操作 -->
       7     <select id="findAll" resultType="com.itheima.domain.User">
       8         select * from user
       9     </select>
      10 </mapper> 
    • 编写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     <!-- 配置 mybatis 的环境 -->
       7     <environments default="mysql">
       8         <!-- 配置 mysql 的环境 -->
       9         <environment id="mysql">
      10             <!-- 配置事务的类型 -->
      11             <transactionManager type="JDBC"></transactionManager>
      12             <!-- 配置连接数据库的信息:用的是数据源(连接池) -->
      13             <dataSource type="POOLED">
      14                 <property name="driver" value="com.mysql.jdbc.Driver"/>
      15                 <property name="url" value="jdbc:mysql://localhost:3306/ee50"/>
      16                 <property name="username" value="root"/>
      17                 <property name="password" value="root"/>
      18             </dataSource>
      19         </environment>
      20     </environments>
      21     <!-- 告知 mybatis 映射配置的位置 -->
      22     <mappers>
      23         <mapper resource="com/buwei/dao/UserDao.xml"/>
      24     </mappers>
      25 </configuration>
    • 编写测试类
    •  1 public class MyBadisTest {
       2     public static void main(String[] args) {
       3         // 1.读取配置文件
       4         InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
       5         // 2.创建 SqlSessionFactory 的构建者对象
       6         SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
       7         // 3.使用构建者创建工厂对象 SqlSessionFactory
       8         SqlSessionFactory factory = builder.build(in);
       9         // 4.使用 SqlSessionFactory 生产 SqlSession 对象
      10         SqlSession session = factory.openSession();
      11         // 5.使用 SqlSession 创建 dao 接口的代理对象
      12         UserDao userDao = session.getMapper(UserDao.class);
      13         // 6.使用代理对象执行查询所有方法
      14         List<User> users = userDao.findAll();
      15         for (User user : users) {
      16             System.out.println(user);
      17         }
      18         // 7.释放资源
      19         session.close();
      20         in.close();
      21     }
      22 }

      2.3 小结

    • 通过上面的案例,我们可以发现使用mybatis还是一件比较容易的事情的,只需要编写Dao接口并且按照mybatis要求编写两个配置文件,就可以实现功能,远比我们之前的Jdbc方便多了。
    • 2.4 补充(基于注解的开发)
    • 1 public interface UserDao {
      2     /**
      3      * 查询所有用于
      4      * @return
      5      */
      6     @Select("select * from user")
      7     List<User> findAll();
      8 }

      修改SqlMapConfig.xml

    • 1 <!-- 告知 mybatis 映射配置的位置 -->
      2 <mappers>
      3     <mapper class="com.buwei.dao.UserDao"/>
      4 </mappers>

      注意事项:在使用基于注解的Mybatis配置时,需要移除 xml 的映射配置(UserDao.xml)。

      

原文地址:https://www.cnblogs.com/buwei/p/9975999.html

时间: 2024-10-03 09:04:57

Mybatis框架01的相关文章

【Struts2】如何实现Struts2与Spring的整合 外加 MyBatis 框架

1,简介 一般没有人会用Spring+Struts2+MyBatis这样的框架了,可不能简称为SSM.因为SSM是Spring+SpringMVC+Mybatis的简称.SSH是Spring+Struts2+Hibernate,不过现在SSH用的人也不多了.这里笔者把Sping+Struts2+Mybatis放在一起就是纯粹的实现一下功能.主要讨论的还是Struts2和Spring. 如果不使用Spring框架,Struts2框架内部还是有机制可以利用反射创建对象,之所以要把Spring+Str

使用mybatis框架的一个简单的用户商品的增删改查例子

---恢复内容开始--- 这个例子的实现过程:用户登录----->servlet验证用户是否存在----->显示商品信息----->可以进行商品的删除.修改.添加功能(商品信息是分页显示的) 例子很简单,但是基本的mybatis框架一个也差不多是这样的 数据库表格如下 项目的结构 1.src目录下的mybatis文件和外部源文件 jdbc.properties jdbc.driver=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle

struts2+spring+mybatis框架整合详细介绍

一.问题的提出 最近一直在看各种主流javaweb框架,感触颇深,一个好的框架可以让你的程序代码变得相当的明了,也便于后期的维护!目前用到的主流框架包括struts2+spring+mybatis和spring+springmvc+mybatis(注:个人觉得mybatis框架很好用,所以框架基本都会选择用mybatis).其实很多的小伙伴都想自己配置个框架,但是基于怕报错啊.引入jar包.程序调试啊等等问题都放弃了!基于这个现象,本人在这里就详细的介绍下本人配置框架的详细过程,希望对读者有所帮

SpringMVC+Mybatis框架搭建

一.新建javaweb项目,并建好相应的包结构 二.添加项目jar到lib目录下 三.在config包中新建配置文件 sping-mvc.xml,内容如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/

MyBatis框架之第一篇

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis.2013年11月迁移到Github. ●[GitHub] GitHub就是一个互联网上的超大SVN库,里面维护着许多开源项目的代码.任何人都可以把自己好多项目代码放上去共享,同时接受其他人的共同开发. 2.2.什么是MyBatis MyBatis是使用java语言编写的一个优秀的持久层框架,是对JDBC操

MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(六) MapperRegistry> 中我们知道DefaultSqlSession的getMapper方法,最后是通过MapperRegistry对象获得Mapper实例: public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final MapperProxyFactory<T> mapperProxyFactory =

MyBatis框架(一)

MyBatis介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁杂的过程代

MyBatis框架中Mapper映射配置的使用及原理解析(三) 配置篇 Configuration

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder> 我们知道XMLConfigBuilder调用parse()方法解析Mybatis配置文件,生成Configuration对象. Configuration类主要是用来存储对Mybatis的配置文件及mapper文件解析后的数据,Configuration对象会贯穿整个Mybatis的执行流程,为Mybatis的执行过程提供必要的配

MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder

在 <MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用> 的demo中看到了SessionFactory的创建过程: SqlSessionFactory sessionFactory = null; String resource = "mybatisConfig.xml"; try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources .getResourceAsRea