• 01_MyBatis入门


    一.MyBaits介绍

    1、MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。

    2、mybatis是一个java持久层框架,java中操作关系型数据库用的是jdbc,mybatis是对jdbc的一个封装。

    3、MyBatis是一个数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。Mybatis让程序员只关注sql本身,而不需要去关注如连接的创建、statement的创建等操作。

    4、Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

    二.原始JDBC问题总结

    1、数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率

    设想:使用数据库连接池

    2、sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。

    设想:将sql语句 统一配置在文件中(xml),修改sql不需要修改java代码。

    3、通过preparedStatement向占位符设置参数,存在硬编码( 参数位置,参数)问题。系统不易维护。

    设想:将sql中的占位符及对应的参数类型配置在配置文件中(xml),能够自动输入 映射。

    4、遍历查询结果集存在硬编码(列名)。

    设想:自动进行sql查询结果向java对象的映射(入参,输出映射)。

    与传统JDBC比较:

    减少了的代码量

    最简单的持久化框架

    架构级性能增强

    SQL代码从程序代码中彻底分离,可重用(sql代码片段)

    增强了项目中的分工

    增强了移植性

    三.MyBatis优点

    1、简单易学

    mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

    2、灵活

    mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

    3、解除sql与程序代码的耦合

    通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

    4、提供映射标签,支持对象与数据库的orm字段关系映射

    5、提供对象关系映射标签,支持对象关系组建维护

    6、提供xml标签,支持编写动态sql。

    四.MyBatis框架原理

    五.入门程序

    1.需求

    根据用户id(主键)查询用户信息

    根据用户名称模糊查询用户信息

    添加用户

    删除 用户

    更新用户

    2.环境

    jdk1.8、idea2018、MySQL5.1

    mybatis运行环境包:

    https://github.com/mybatis/mybatis-3/releases下载,3.2.7版本

    lib:依赖包、mybatis-3.2.7.jar:核心 包,mysql驱动包

    3.log4j.properties

    4.工程结构

    5.配置sqlMapConfig.xml

    :当spring整合时,sqlMapConfig.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>
        <!--加载属性文件-->
        <properties resource="com/mybatis/config/db.properties"></properties>
        <settings>
            <setting name="logImpl" value="LOG4J"/>
        </settings>
        <!--别名-->
        <typeAliases>
            <!--针对单个别名定义-->
            <!--<typeAlias type="com.mybatis.po.User" alias="user"></typeAlias>-->
            <!--批量别名定义
            mybatis:自动扫描包中的po类,别名就是类名(首字母大写小写都可以)
            -->
            <package name="com.mybatis.po"></package>
    
        </typeAliases>
        <!-- 和spring整合后 environments配置将废除-->
        <environments default="development">
            <environment id="development">
                <!-- 使用jdbc事务管理-->
                <transactionManager type="JDBC" />
                <!-- 数据库连接池,-->
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}" />
                    <property name="url" value="${jdbc.url}" />
                    <property name="username" value="${jdbc.username}" />
                    <property name="password" value="${jdbc.password}" />
                </dataSource>
            </environment>
        </environments>
    <!--加载映射文件-->
        <mappers>
            <mapper resource="com/mybatis/config/sqlMap/UserMapper.xml "/>
            <!--<mapper resource="com/mybatis/config/mapper/UserMapper.xml"></mapper>-->
            <!--<mapper class="com.mybatis.mapper.UserMapper"></mapper>-->
            <!--批量加载mapper映射文件-->
            <package name="com.mybatis.mapper"/>
        </mappers>
    </configuration>
    

    test-1.查询用户信息(主键ID)

    1.创建pojo类

    2.创建映射文件

    注意命名规范:

    原始命名:User.xml(ibatis),使用mapper代理开发时:XXXMapper.xml

    3.在SqlMapConfig.xml中加载映射文件

    4.程序编写

    test-2.模糊查询用户信息(用户名)

    1.映射文件

    使用User.xml,添加根据用户名称模糊查询用户信息的sql语句

    注意:resultType:表示单条记录所映射的java类型 使用${}表示拼接sql串,将接受到的参数不加任何修饰拼接到sql中 使用${}拼接sql,会引起sql注入, ${value}:接受输入参数的内容,如果传入类型是简单类型,${}中只能是value

    2.程序代码

    test-3.添加用户

    1.映射文件

    这里可以根据采用数据库的不同进行不同的配置

    非自增主键的返回

    在 User.xml中配置添加用户的Statement


    ORACLE通过序列生成主键:

    ​
    <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
                SELECT 序列名.nextval()
            </selectKey>
            insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
    ​

    自增主键的返回*

    2.程序代码

    test-3.删除用户

    1.映射文件

    2.程序代码

    test-3.更新用户

    1.映射文件

    2.程序代码

    五.总结

    1. parameterType

      在映射文件中通过parameterType指定输入参数的类型。

    2. resultType

      在映射文件中通过resultType指定输出结果的类型。

    3. ${}和#{}区别

      #{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。

      如果接收简单类型,#{}中可以写成value或其它名称。

      #{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

      ${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。

      ${}接收输入参数,类型可以是简单类型,pojo、hashmap。

      如果接收简单类型,${}中只能写成value。

      ${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

    4. selectOne和selectList

    1. selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。

    2. selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。

    3. 如果使用selectOne报错:

    4. org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4

    5.MyBatis和Hibernate本质区别

    1. hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。对sql语句进行优化、修改比较困难的。

    应用场景:适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。

    1. mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。

    应用场景: 适用与需求变化较多的项目,比如:互联网项目。

    企业进行技术选型,以低成本 高回报作为技术选型的原则,根据项目组的技术力量进行选择。

    持续补充中...

  • 相关阅读:
    VC++以及VS个版本比较 及 C++编译器比较
    这本书的封面
    json_encode(),json_deocde()用法说明
    循环匹配,一般用于多选列表选中状态
    js判断变量是否被定义
    js onload()事件调用方法
    js push使用方法
    iframe去掉边滚动条
    ajax上传文件(使用ajaxfileupload)
    基于url的权限控制
  • 原文地址:https://www.cnblogs.com/jatpeo/p/11767511.html
Copyright © 2020-2023  润新知