1-MyBatis概述

1-1-介绍

MyBatis(前身是iBatis)是一个支持普通SQL查询、存储过程以及高级映射的持久层框架。

MyBatis框架也被称之为ORM(Object/Relation Mapping,即对象关系映射)框架。

所谓的ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。

1-2-ORM框架的工作原理

1-3-Hibernate与MyBatis有什么区别

Hibernate是一个全表映射的框架。
通常开发者只需定义好持久化对象到数据库表的映射关系,就可以通过Hibernate提供的方法完成持久层操作。
开发者并不需要熟练的掌握SQL语句的编写,Hibernate会根据制定的存储逻辑,自动的生成对应的SQL,并调用JDBC接口来执行,所以其开发效率会高于MyBatis。
Hibernate也存在一些缺点,例如它在多表关联时,对SQL查询的支持较差;更新数据时,需要发送所有字段;不支持存储过程;不能通过优化SQL来优化性能等。

MyBatis是一个半自动映射的框架。
“半自动”是相对于Hibernate全表映射而言的,MyBatis需要手动匹配提供POJO、SQL和映射关系,而Hibernate只需提供POJO和映射关系即可。
与Hibernate相比,虽然使用MyBatis手动编写SQL要比使用Hibernate的工作量大,但MyBatis可以配置动态SQL并优化SQL,可以通过配置决定SQL的映射规则,它还支持存储过程等。对于一些复杂的和需要优化性能的项目来说,显然使用MyBatis更加合适。

2-MyBatis的下载和使用

下载地址:https://github.com/mybatis/mybatis-3/releases

使用MyBatis框架非常简单,只需在应用程序中引入MyBatis的核心包和lib目录中的依赖包即可。

注意:如果底层采用的是MySQL数据库,那么还需要将MySQL数据库的驱动JAR包添加到应用程序的类路径中;

如果采用其他类型的数据库,则同样需要将对应类型的数据库驱动包添加到应用程序的类路径中。

3-MyBatis的工作原理

4-MyBatis入门程序

4-1-创建数据库和表

MySQL数据库中,创建一个名为mybatis的数据库,在此数据库中创建一个t_customer表,同时预先插入几条数据。

CREATE DATABASE `mybatis`;

USE `mybatis`;

CREATE TABLE `t_customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `jobs` varchar(50) DEFAULT NULL,
  `phone` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;

insert  into `t_customer`(`id`,`username`,`jobs`,`phone`) values (1,'joy','doctor','13756566565'),(2,'jack','teacher','13645455454'),(3,'tom','worker','13423233232');

4-2-创建项目等准备工作

1.在Eclipse中,创建一个名为chapter06的Web项目,将MyBatis的核心JAR包、lib目录中的依赖JAR包,以及MySQL数据库的驱动JAR包一同添加到项目的lib目录下, 并发布到类路径中。

2.由于MyBatis默认使用log4j输出日志信息,所以如果要查看控制台的输出SQL语句,那么就需要在classpath路径下配置其日志文件。在项目的src目录下创建log4j.properties文件。

# Global logging configuration
       log4j.rootLogger=ERROR, stdout
       # MyBatis logging configuration...
       log4j.logger.com.itheima=DEBUG
       # Console output...
       log4j.appender.stdout=org.apache.log4j.ConsoleAppender
       log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
       log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3.在src目录下,创建一个com.itheima.po包,在该包下创建持久化类Customer,并在类中声明id、username、jobs和phone属性,及其对应的getter/setter方法。

public class Customer {
            private Integer id;        
            private String username;  
            private String jobs;       
            private String phone
            //省略Getter和Setter方法
            @Override
             public String toString() {
         return "Customer [id=" + id + ", username=" + username +
                      ", jobs=" + jobs + ", phone=" + phone + "]";
    }
     }

4-3-查询客户

4-3-1-根据客户编号查询客户信息

根据客户编号查询客户信息主要是通过查询客户表中的主键(这里表示唯一的客户编号)来实现的。

1.在src目录下,创建一个com.itheima.mapper包,并在包中创建映射文件CustomerMapper.xml。

<?xml version="1.0" encoding="UTF-8"?>
       <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
       <mapper namespace="com.itheima.mapper.CustomerMapper">
    <select id="findCustomerById" parameterType="Integer"
        resultType="com.itheima.po.Customer">
        select * from t_customer where id = #{id}
    </select>
       </mapper>

2.在src目录下,创建MyBatis的核心配置文件mybatis-config.xml。

<?xml version="1.0" encoding="UTF-8" ?>
       <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-config.dtd">
       <configuration>
              <environments default="mysql">
                     <environment id="mysql">
                           <transactionManager type="JDBC" />
                               <dataSource type="POOLED">
                      <property name="driver" value="com.mysql.jdbc.Driver" />
                                  <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC" />              
                      <property name="username" value="root" />
                      <property name="password" value="root" />
                                </dataSource>
                           </environment>
                      </environments>
             <mappers>
         <mapper resource="com/itheima/mapper/CustomerMapper.xml" />
             </mappers>
        </configuration>

3.在src目录下,创建一个com.itheima.test包,在该包下创建测试类MybatisTest,并在类中编写测试方法findCustomerByIdTest()。

public class MybatisTest {
             @Test
             public void findCustomerByIdTest() throws Exception {                             
                     String resource = "mybatis-config.xml";
         InputStream inputStream = Resources.getResourceAsStream(resource);
                     SqlSessionFactory sqlSessionFactory =
                                       new SqlSessionFactoryBuilder().build(inputStream);     
                     SqlSession sqlSession = sqlSessionFactory.openSession();
         Customer customer = sqlSession.selectOne("com.itheima.mapper"
                    + ".CustomerMapper.findCustomerById", 1);

System.out.println(customer.toString());
         sqlSession.close();
             }
     }

4-3-2-根据客户名模糊查询客户信息。

模糊查询的实现非常简单,只需在映射文件中通过<select>元素编写相应的SQL语句

1.在映射文件CustomerMapper.xml中,添加根据客户名模糊查询客户信息列表的SQL语句。

<select id="findCustomerByName" parameterType="String"
                   resultType="com.itheima.po.Customer">
               select * from t_customer where username like '%${value}%'
       </select>

2.在测试类MybatisTest中,添加测试方法findCustomerByNameTest()。

/**

* 根据用户名称来模糊查询用户信息列表

*/

@Test

public void findCustomerByNameTest() throws Exception{

// 1、读取配置文件

String resource = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

// 2、根据配置文件构建SqlSessionFactory

SqlSessionFactory sqlSessionFactory =

new SqlSessionFactoryBuilder().build(inputStream);

// 3、通过SqlSessionFactory创建SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession();

// 4、SqlSession执行映射文件中定义的SQL,并返回映射结果

List<Customer> customers = sqlSession.selectList("com.itheima.mapper"

+ ".CustomerMapper.findCustomerByName", "j");

for (Customer customer : customers) {

//打印输出结果集

System.out.println(customer);

}

// 5、关闭SqlSession

sqlSession.close();

}

4-3-3-案例总结

4-4-添加客户

1.添加操作是通过<insert>元素来实现的。例如,向数据库中的t_customer表中插入一条数据可以通过如下配置来实现。

<insert id="addCustomer"  parameterType="com.itheima.po.Customer">
        insert into t_customer(username,jobs,phone)
        values(#{username},#{jobs},#{phone})
</insert>

2.在测试类MybatisTest中,添加测试方法addCustomerTest()。

@Test

public void addCustomerTest() throws Exception{

// 1、读取配置文件

String resource = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

// 2、根据配置文件构建SqlSessionFactory

SqlSessionFactory sqlSessionFactory =

new SqlSessionFactoryBuilder().build(inputStream);

// 3、通过SqlSessionFactory创建SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession();

// 4、SqlSession执行添加操作

// 4.1创建Customer对象,并向对象中添加数据

Customer customer = new Customer();

customer.setUsername("rose");

customer.setJobs("student");

customer.setPhone("13333533092");

// 4.2执行SqlSession的插入方法,返回的是SQL语句影响的行数

int rows = sqlSession.insert("com.itheima.mapper"

+ ".CustomerMapper.addCustomer", customer);

// 4.3通过返回结果判断插入操作是否执行成功

if(rows > 0){

System.out.println("您成功插入了"+rows+"条数据!");

}else{

System.out.println("执行插入操作失败!!!");

}

 // 4.4提交事务

        sqlSession.commit();

// 5、关闭SqlSession

sqlSession.close();

}

4-5-更新客户

1.更新操作在映射文件中是通过配置<update>元素来实现的。

<update id="updateCustomer" parameterType="com.itheima.po.Customer">
       update t_customer set
       username=#{username},jobs=#{jobs},phone=#{phone}
       where id=#{id}
</update>

2.  在测试类MybatisTest中,添加测试方法updateCustomerTest(),
将id为4的用户职业修改为programmer,电话修改为13311111111。

@Test

public void updateCustomerTest() throws Exception{

// 1、读取配置文件

String resource = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

// 2、根据配置文件构建SqlSessionFactory

SqlSessionFactory sqlSessionFactory =

new SqlSessionFactoryBuilder().build(inputStream);

// 3、通过SqlSessionFactory创建SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession();

// 4、SqlSession执行更新操作

// 4.1创建Customer对象,对对象中的数据进行模拟更新

Customer customer = new Customer();

customer.setId(4);

customer.setUsername("rose");

customer.setJobs("programmer");

customer.setPhone("13311111111");

// 4.2执行SqlSession的更新方法,返回的是SQL语句影响的行数

int rows = sqlSession.update("com.itheima.mapper"

+ ".CustomerMapper.updateCustomer", customer);

// 4.3通过返回结果判断更新操作是否执行成功

if(rows > 0){

System.out.println("您成功修改了"+rows+"条数据!");

}else{

System.out.println("执行修改操作失败!!!");

}

// 4.4提交事务

sqlSession.commit();

// 5、关闭SqlSession

sqlSession.close();

}

4-6- 删除客户

1. 删除操作在映射文件中是通过配置<delete>元素来实现的。

<delete id="deleteCustomer" parameterType="Integer">
       delete from t_customer where id=#{id}
</delete>

2. 在测试类MybatisTest中,添加测试方法deleteCustomerTest(),该方法用于将id为4的客户信息删除。

@Test

public void deleteCustomerTest() throws Exception{

// 1、读取配置文件

String resource = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

// 2、根据配置文件构建SqlSessionFactory

SqlSessionFactory sqlSessionFactory =

new SqlSessionFactoryBuilder().build(inputStream);

// 3、通过SqlSessionFactory创建SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession();

// 4、SqlSession执行删除操作

// 4.1执行SqlSession的删除方法,返回的是SQL语句影响的行数

int rows = sqlSession.delete("com.itheima.mapper"

+ ".CustomerMapper.deleteCustomer", 4);

// 4.2通过返回结果判断删除操作是否执行成功

if(rows > 0){

System.out.println("您成功删除了"+rows+"条数据!");

}else{

System.out.println("执行删除操作失败!!!");

}

// 4.3提交事务

sqlSession.commit();

// 5、关闭SqlSession

sqlSession.close();

}

6-MyBatis基础相关推荐

  1. java mybatis基础

    java mybatis基础 1.1 什么是mybatis? mybatis是一个优秀的持久层框架. 避免几乎所有的JDBC代码和手动设置参数以及获取结果集的过程. 可以使用简单的xml或者注解来配置 ...

  2. MyBatis基础入门《九》ResultMap自动匹配

    MyBatis基础入门<九>ResultMap自动匹配 描述: Mybatis执行select查询后,使用ResultMap接收查询的数据结果. 实体类:TblClient.java 接口 ...

  3. Mybatis基础:增删改查、模糊查询、多条件查询

    Mybatis基础:增删改查.模糊查询.多条件查询http://www.bieryun.com/3132.html 1.新建测试数据库,根据实体类属性创建 2.实体类 [java] view plai ...

  4. javaweb实训第六天下午——Mybatis基础

    Mybatis基础 1.课程介绍 2.为什么需要Mybatis 3.初识Mybatis 3.1.Mybatis是什么 3.1.1.什么是框架 3.1.2.什么叫数据库持久化 3.1.3.什么是ORM ...

  5. Mybatis基础学习之万能的Map和模糊查询

    前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个Mybatis ...

  6. MyBatis基础篇

    MyBatis基础篇 简介 注意:本篇文章主讲语法,jar包导入大家可以在网上搜索(有问题一定要学会利用搜索引擎解决!!!),全程代码会写到文章中. 1. MyBatis是一个半自动ORM框架(作为解 ...

  7. MyBatis基础学习知识点2

    本文衔接MyBatis基础学习知识点1,继续对以下两个问题进行探讨 1.dao配置文件主要是用来干什么的?如何进行配置? 2.使用测试方法测试程序运行是如何实现的?每条语句起什么作用? 目录 dao配 ...

  8. MyBatis基础总结

    欢迎访问我的网站:www.ifueen.com Mybatis基础 文章目录 Mybatis基础 概念 面试题:MyBatis相较于jdbc的优点 MyBatis的使用 导包 配置核心文件 利用Myb ...

  9. mybatis基础学习小记

    mybatis基础应用学习记录 1.创建项目 创建一个maven项目 2. 配置mybatis xml配置文件 3.相关代码 4.使用mybatis 5.到此mybatis入门使用就算完结了,后续还得 ...

  10. Mybatis基础学习之一级缓存和二级缓存的简单使用

    前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个Mybatis ...

最新文章

  1. python3.8.5是python3吗_Python 升级到3.8.5
  2. SpringBoot b2b2c 多用户商城系统 ssm b2b2c
  3. Qt Creator查看输出
  4. Docker中数据管理
  5. android程序到处apk,导出已安装到手机中程序的apk文件
  6. 7天拿到阿里安卓岗位offer,附高频面试题合集
  7. 细说浏览器特性检测(1)-jQuery1.4添加部分
  8. cshop是什么开发语言_C语言是用什么语言编写出来的?
  9. vb调用存储过程的方法
  10. Cannot detect Web Project version. Please specify version of Web Project through Maven project ...报错
  11. 电脑重装操作系统——使用U盘安装(简略步骤)
  12. 中望cad自定义快捷键命令_[cad常用快捷键命令大全]中望cad常用快捷键及命令
  13. IP子网划分概念:IP地址,子网和网关配置——Vecloud
  14. intouch sqlserver_intouch 连接modbus 。转存数据库方法
  15. php微信公众号样式模板下载,PHP微信公众平台自定义菜单
  16. 【Multisim仿真】二极管加正向和反向电压测量实验
  17. 三维动画项目实训① ------(3.24-3.31)
  18. 数据库连接技术 - 数据库连接池
  19. 实验 Linux下C工具应用
  20. 回滚 rollback

热门文章

  1. Write operations are not allowed in read-only mode (FlushMode.MANUAL)
  2. 磁力计 姿态 matlab,磁力计如何用来计算姿态(1)
  3. 【clickhouse】clickhouse 副本与分片 副本详解
  4. 【ElasticSearch】Es 源码之 RerouteService 源码解读
  5. 【Spring 】Synchronized锁在Spring事务管理下,为啥还线程不安全?
  6. 60-130-336-源码-source-kafka相关-Flink读取kafka
  7. 【Flink】报错Could not forward element to next operator Buffer pool is destroyed
  8. Spring Boot如何以优雅的姿势校验参数
  9. Spring的@bean注解
  10. java实现mysql增量备份_企业级MySQL备份原理