zoukankan      html  css  js  c++  java
  • MyBatis框架

    • ORM框架:应用程序中的POJO对象数据库表相互映射的框架称为对象关系映射框架(Object Relational Mapping),Hibernate与Mybatis都可以称为ORM框架,只是Hibernate的设计理念是完全面向POJO的(全映射框架),而MyBatis则不是(半映射框架)。
    • Hibernate
      • Hibernate在需要存储过程与复杂SQL时,映射关系使用不上,需要自己用代码处理,没办法完全的掌控数据库的SQL
      • 优化SQL是高并发,高响应系统中必然的要求,这种不能完全掌控SQL的持久层框架只适用与企业管理系统,不适用与电商类应用
      • 映射规则可以通过XML以及注解实现,类似如下:
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC
     3         '-//Hibernate/Hibernate Mapping DTD 3.0//EN'
     4         'http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd'>
     5 <hibernate-mapping>
     6     
     7    <class name="com.pojo.user" table="tb_user">
     8            <!-- id为主键的配置:
     9            id-name:实体类中的属性名
    10            column-name:数据库表中主键名
    11            generator-class:主键生成策略 -->
    12            <id name="id" >
    13                <!-- 数据库表中主键字段名与实体类的属性名相同时,column可以省略不写 -->
    14                <!-- <column name="id"></column> -->
    15                <generator class="native"></generator>
    16            </id>
    17            
    18            <!-- property:非主键属性的配置
    19            property-name:实体类中属性名
    20            column-name:实体类中属性对应的数据库表中字段名
    21             -->
    22            <!-- 数据库表中主键字段名与实体类的属性名相同时,column可以省略不写 -->
    23            <!-- <property name="username">
    24                <column name="username"/>
    25            </property> -->
    26            <property name="username"/>
    27            <property name="pwd"/>
    28            <property name="name"/>
    29    </class>
    30 </hibernate-mapping>
    View Code
      • Hibernate会根据映射关系来生成对应的SQL,通过操作POJO来操作数据库中的表
    • MyBatis:相对于Hibernate而言,持久层框架MyBatis需要编写SQL,而且也提供映射规则,它的动态SQL自动映射接口编程等功能使它简单易用,本身支持SQL优化,使它满足高并发场景的应用条件,当下最为流行。
      • 优势在于灵活,提供了接口编程(数据库访问层DAO层是不需要实现类的,只提供一个接口即可)
      • MyBatis提供自动映射,动态SQL,级联,缓存,注解,代码和SQL分离等特性
      • MyBatis映射规则可以通过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="cn.dao.UserMapper">
     6     <!-- 查询对应页码页数记录的所有相关信息 -->
     7     <select id="getLikeUsers" parameterType="map" resultType="user">
     8         SELECT id,username,password,type from user 
     9         WHERE username LIKE CONCAT('%',#{user.username},'%') 
    10         LIMIT ${pageSize *(pageNum - 1)} , ${pageSize}
    11     </select>
    12     <!-- 查询总记录条数 -->
    13     <select id="getLikeUsersCount" parameterType="map" resultType="java.lang.Integer">
    14         SELECT COUNT(1) FROM user WHERE username LIKE concat('%',#{user.username},'%')
    15     </select>
    16     <!-- 添加 -->
    17     <insert id="addUser" parameterType="user">
    18         insert into user (username,password,type) values (#{username},#{password},#{type})
    19     </insert>
    20     <!-- 删除 -->
    21     <delete id="delUser" parameterType="user">
    22         delete from user where id=#{id}
    23     </delete>
    24     <!-- 获取单行记录(查) -->
    25     <select id="findUser" parameterType="user" resultType="user">
    26         SELECT id,username,password,type from user 
    27         WHERE id=#{id}
    28     </select>
    29     <!-- 修改 -->
    30     <update id="updateUser" parameterType="user">
    31         update user set username=#{username},password=#{password}
    32         where id=#{id}
    33     </update>
    34 </mapper>
    View Code
      • MyBatis需要提供接口以及对应SQL的XML文件,自定义SQL意味着工作量增加,但是这也是它优于Hibernate的地方,自定义SQL意味着可以SQL调优,提高系统性能。
  • 相关阅读:
    我的公众号:WebHub
    The Qt Resource System
    Node.js Streams:你需要知道的一切
    2019春招前端面试预测题!
    BeamNG.drive物理引擎评鉴
    EcmaScript对象克隆之谜
    死锁与囚徒困境的辩证关系
    停止学习框架
    qt5android
    opencvKmeans图像分割根据颜色
  • 原文地址:https://www.cnblogs.com/LJing21/p/10508229.html
Copyright © 2011-2022 走看看