Mybatis框架初始化


1、Mybatis框架概述

1.1、简介

1:MyBatis框架、是一个基于Java的[持久层](https://baike.baidu.com/item/持久层/3584971)框架,提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
2.1:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
2.2:MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
2.3:MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java POJO(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

1.1.1、JDBC存在的四个问题

1.数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
MyBatis解决:在MyBatisConfig.xml 中配置数据链接池,使用连接池管理数据库链接。

2.Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大, sql 变动需要改变 java 代码。
MyBatis解决:将Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。

3.向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数一一对应
MyBatis解决:Mybatis 自动将 java 对象映射至 sql 语句,通过 statement 中的 parameterType 定义输入参数的类型并自动完成参数的注入。

4.对结果集解析麻烦, sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo 对象解析比较方便。
MyBatis解决:Mybatis 自动将 sql 执行结果映射至 java 对象,通过 statement 中的 resultType 定义输出结果的类型并自动完成结果集的封装。

1.2、特点

1、简单易学
2、灵活
3、解除sql与程序代码的耦合
	通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
4、提供映射标签
5、提供对象关系映射标签
6、提供xml标签
	支持编写动态sql。

1.3、ORM(对象关系映射)

(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据

1.3.1、应用

实际应用中即在关系型数据库业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了.ORM框架就是用于实现ORM技术的程序。

1.3.2、常见ORM框架

常见的ORM框架有:HibernateTopLink、Castor JDO、Apache OJB. Mybatis等

1.3.3、Java中ORM原理

ORM的实现原理,其实,要实现
JavaBean的属性到数据库表的字段的映射,
任何ORM框架不外乎是读某个配置文件把JavaBean的属性和数据库表的字段自动关联起来,当从数据库Query时,自动把字段的值塞进JavaBean的对应属性里,当做INSERT或UPDATE时,自动把 JavaBean的属性值绑定到SQL语句中。

2、搭建MyBatis的开发环境

2.1、创建Maven项目导入坐标

2.2、在pom.xml文件中添加MyBatis所需要的依赖

所需要的依赖有org.mybatis;mysql;log4j;junit;org.projectlombok

 <!--  添加依赖  -->
    <dependencies>
    <!--   mybatis     -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
    </dependencies>

2.3、创建核心配置文件(公共的配置)和映射文件(SQL语句)

2.3.1、核心配置文件

核心配置文件需要四个字符串,driver;url(数据库地址);username(数据库用户名);password(数据库密码)

还需要在中加载映射配置文件,用文件扫描,或者包扫描映射配置文件

<?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="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://123.57.221.17:3306/smbms"/>
                <property name="username" value="root"/>
                <property name="password" value="Xzx0120."/>
            </dataSource>
        </environment>
    </environments>
	<!-- 加载映射配置文件 -->
    <mappers>
        <!-- 文件扫描映射配置文件 -->
        <mapper resource="cn/kgc/dao/role/RoleMapper.xml"/>
        <!-- 包扫描映射配置文件 扫描指定文件夹下的所有xml映射配置文件-->
        <!-- <package name="cn/kgc/tangcco/mapper"/> -->
    </mappers>
</configuration>

2.3.2、当映射配置文件不在resources文件夹下

当映射配置文件不在resources文件夹下,需要在pom.xml文件通过标签指定映射配置文件位置

<build>
    <resources>
        <resource>
            <!--扫描指定目录下的文件-->
            <directory>src/main/java/</directory>
            <includes>
                <!--映射配置文件-->
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

2.3.3、映射配置文件(sql)

<?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">
<!--当前映射配置文件对应java中Mapper接口的路径-->
<mapper namespace="cn.kgc.dao.role.RoleDao">
<!--  查询所有角色  -->
    <!--id sql的标识,对应Mapper接口中方法,resultType接收到数据库返回的类型-->
    <select id="getAllRole" resultType="cn.kgc.pojo.Role">
        select * from  smbms_role
    </select>
</mapper>

3、测试

31、直接连接映射配置文件

测试时候直接连接映射配置文件

/**
     * 直接连接映射配置文件
     * @throws IOException
     */
@Test
public void getAllRole() throws IOException {
    //定义核心配置文件
    String config = "mybatis-config.xml";
    //获取SqlSessionFactory对象
    InputStream inputStream = Resources.getResourceAsStream(config);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    //根据sqlSessionFactory获取SqlSession
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //aa对应的是映射配置文件中mapper的namespace    bb对应的是mapper标签里的sql的id
    List<Role> roleList = sqlSession.selectList("aa.bb");
    System.out.println(roleList);
}

3.2、调用java中接口

需要使用代理模式先把映射配置文件对应的mapper文件,再通过代理调用mapper接口中的方法,实现调用映射配置文件中sql

/**
     * 使用dao层
     * @throws IOException
     */
@Test
public void getAllRole1() throws IOException {
    //定义核心配置文件
    String config = "mybatis-config.xml";
    //获取SqlSessionFactory对象
    InputStream inputStream = Resources.getResourceAsStream(config);
    //工厂模式
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    //根据sqlSessionFactory获取SqlSession
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //代理模式
    RoleDao mapper = sqlSession.getMapper(RoleDao.class);
    List<Role> roleList = mapper.getAllRole();
    System.out.println(roleList);
}

3.2.1、使用到的设计模式

创建工厂:构建者
创建SqlSession对象:工厂
获取接口对象:代理

4、优化

4.1.因为基于SqlSession实例执行sql语句存在写死字符串,所以用基于接口的方式,但是要注意命名空间和标签的id
4.2 因为resultType写全限定名太长了,所以我们起了别名
在核心配置中添加了
4.3 因为核心配置文件中的连接数据库的四个字符串写在了配置文件中
所以把四个字符串写到database.properties文件中
然后在核心配置文件中使用标签引入,然后用 键 S e s s i o n 实 例 执 行 s q l 语 句 存 在 写 死 字 符 串 , 所 以 用 基 于 接 口 的 方 式 , 但 是 要 注 意 命 名 空 间 和 标 签 的 i d 4.2 因 为 r e s u l t T y p e 写 全 限 定 名 太 长 了 , 所 以 我 们 起 了 别 名 在 核 心 配 置 中 添 加 了 < t y p e A l i a s e s > 4.3 因 为 核 心 配 置 文 件 中 的 连 接 数 据 库 的 四 个 字 符 串 写 在 了 配 置 文 件 中 所 以 把 四 个 字 符 串 写 到 d a t a b a s e . p r o p e r t i e s 文 件 中 然 后 在 核 心 配 置 文 件 中 使 用 < p r o p e r t i e s > 标 签 引 入 , 然 后 用 {键} Session实例执行sql语句存在写死字符串,所以用基于接口的方式,但是要注意命名空间和标签的id 4.2 因为resultType写全限定名太长了,所以我们起了别名 在核心配置中添加了<typeAliases> 4.3 因为核心配置文件中的连接数据库的四个字符串写在了配置文件中 所以把四个字符串写到database.properties文件中 然后在核心配置文件中使用<properties>标签引入,然后用 Sessionsql,id4.2resultType,<typeAliases>4.3database.properties使<properties>,{键}
读取文件内容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值