Mybatis复习(一)

了解什么是Mybatis框架简介;

什么是MyBaits

Mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为Mybatis 。 2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java 的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
Mybatis是一个数据持久层(ORM)框架。把实体类和SQL语句之间建立了映 射关系,是一种半自动化的ORM(对象关系映射)实现。(hibernate完全自动化,完全看不到SQL语句)

Mybatis的优点
  1. 基于SQL语法,简单易学。
  2. .能了解底层组装过程。实体类和SQL之间如何调用。
  3. SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。
  4. 程序调试方便。 所有sql语句,全部定义在xml(建议)中。也可以通过注解的方式在接口上实现。这些映射文件称之为mapper。
JDBC和Mybatis对比

通过编写JDBC代码,例如:根据用户名查询用户信息在这里插入图片描述
发现JDBC操作非常繁琐,
1.定义数据库连接参数
2.打开数据库连接
3.声明SQL语句
4.预编译并执行SQL语句
5.遍历查询结果(如果需要的话),对每一记录行进行处理
6.处理事务
7.关闭数据库连接 以上步骤每次除了3和5步骤,其他全部是重复工作。

下面是Mybatis的配置文件 根据用户名查询用户信息

<mapper namespace="test">
	<select id="findUserByName" paramType=”string“ resultType="user">
		select * from user where username like contact('%',#{username},'%')
	</select>
</mapper>

与传统JDBC的比较
减少了61%的代码量
最简单的持久化框架
架构级性能增强
SQL代码从程序代码中彻底分离,可重用
增强了项目中的分工
增强了移植性

理解Mybatis框架功能架构;

Mybatis框架功能架构分为三层

在这里插入图片描述
API接口层
提供给外部使用的接口API,开发人员通过这些本地API来操 纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的 数据处理。
数据处理层
负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处 理等。它主要的目的是根据调用的请求完成一次数据库操作。
基础支撑层
负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

Mybatis工作流程

(1)加载配置并初始化(总配文件和映射文件)

总配文件:配置数据库连接信息
映射文件:实体类的对应关系
将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映 射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求

传入参数:为SQL的ID和传入参数对象

(3)处理操作请求

(A)根据SQL的ID查找对应的MappedStatement对象。
(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
©获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行 ,并得到执行结果。
(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换 处理,并得到最终的处理结果。
(E)释放连接资源。

(4)返回处理结果

掌握Mybatis框架项目创建;

1、新建Maven项目
2、pom.xml配置,导入Mybatis的依赖jar包
3、创建Mybatis-config.xml全局配置文件,配置数据源、事务等Mybatis 运行环境
4、创建mapper.xml映射文件,配置增、删、改、查的SQL语句。
5、创建SqlSessionFactory,根据全局配置文件创建工厂
6、创建SqlSession,是一个接口,执行数据库操作
7、释放资源

下面的练习,需要在数据库mybatis建一张表

create table user(
id int primary key auto_increment,
name varchar(20) ,
password varchar(20)
) 

1、新建Maven项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完整的maven web工程有以下几个目录:
src/main/java: 存放项目代码文件
src/main/resources: 存放项目配置文件
src/main/webapp: 存放web页面文件
src/test: 测试文件
如新建后有缺失,新建补全

2、pom.xml配置,导入Mybatis的依赖jar包

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

3、创建Mybatis-config.xml全局配置文件,配置数据源、事务等Mybatis 运行环境

为了方便以后使用,创建一个模板:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<?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>
    <properties resource="db.properties"></properties>
    <settings>
        <!--打开延迟加载开关-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--积极加载转为消极加载,即按需加载-->
        <setting name="aggressiveLazyLoading" value="false"/>
        <!--开启二级缓存 -->
        <setting name="cacheEnabled" value="true"/>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <typeAliases>
     <!--别名,com.zx.User可写成user-->
        <package name="com.zx.domain"/>
    </typeAliases>

    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${database.driver}"/>
                <property name="url" value="${database.url}"/>
                <property name="username" value="${database.username}"/>
                <property name="password" value="${database.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="com.zx.dao"/>
    </mappers>
</configuration>

Mybatis 有两种事务管理类型:
JDBC - 这个类型直接全部使用 JDBC 的提交和回滚功能。它依靠使用连 接的数据源来管理事务的作用域。
MANAGED - 这个类型什么不做 , 它从不提交 、 回滚和关闭连接 。 而是让窗口来管理事务的全部生命周期 。(比如说 Spring 或者 JAVAEE 服务器)
数据源类型有三种: UNPOOLED , POOLED , JNDI 。
UNPOOLED - 这个数据源实现只是在每次请求的时候简单的打开和关闭一个连接。虽然这有点慢,但作为一些不需要性能和立即响应的简 单应用来说 , 不失为一种好选择 。
POOLED - 这个数据源缓存 JDBC 连接对象用于避免每次都要连接和生成连接实例而需要的验证时间 。对于并发 WEB 应用,这种方式非常流行因为它有最快的响应时间。
JNDI - 这个数据源实现是为了准备和 Spring 或应用服务一起使用 ,可以在外部也可以在内部配置这个数据源,然后在 JNDI 上下文中引用它。
在这里插入图片描述
在这里插入图片描述
可以配置多个environment
在这里插入图片描述
4、创建mapper.xml映射文件,配置增、删、改、查的SQL语句。src/main/resources/mapper/xxx.xml

先根据表结构,创建一个实体类User.java

public class User implements Serializable {
    private Integer id;
    private String name;
    private String password;

    public User() {
    }

    public User(Integer id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

mapper模板

<?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="">
   
</mapper>

在这里插入图片描述
在这里插入图片描述
5、创建SqlSessionFactory,根据全局配置文件创建工厂
6、创建SqlSession,是一个接口,执行数据库操作
7、释放资源
src/test/java/TestUser.java

public class TestUser {
    @Test
    public void testInsert() throws IOException {
        //将一个资源转换成流
        InputStream is= Resources.getResourceAsStream("Mybatis-config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);
        //打开跟数据库的会话
        SqlSession sqlSession=sqlSessionFactory.openSession();
        User user=new User();
        user.setName("tom");
        user.setPassword("tom");
        //调用映射文件的那个方法 namespace 的值 +id 的值 , 数据在哪里
        int row=sqlSession.insert("user.insert",user);
      /*  List<User> userlist=sqlSession.selectList("user.selectAll",user);
        for(User u:userlist){
            System.out.println(u.getName()+u.getId());
        }*/
        sqlSession.commit();
        if(row>0){
            System.out.println("添加成功");
        }else{
            System.out.println("error");
        }
        sqlSession.close();
    }

}

单元测试运行结果
在这里插入图片描述
项目路径
在这里插入图片描述

PS

settings.xml文件
.m2下的settings.xml文件 是局部文件,修改该文件,只影响当前用户
maven安装路径下的conf/settings.xml文件 是全局文件 修改该文件,影响这台机器的所有用户

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值