zoukankan      html  css  js  c++  java
  • MyBatis(1)优点&介绍&工程

    本次全部学习内容:MyBatisLearning

    一:jabc的相关说明:

    jdbc编程步骤:

    1. 加载数据库驱动
    2. 创建并获取数据库链接
    3. 创建jdbc statement对象
    4. 设置sql语句
    5. 设置sql语句中的参数(使用preparedStatement)
    6. 通过statement执行sql并获取结果
    7. 对sql执行结果进行解析处理
    8. 释放资源(resultSet、preparedstatement、connection)
     
    jdbc的问题:
        1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。
            设想:使用数据库连接池管理数据库连接。
        2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
            设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译
       3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
            设想:将sql语句及占位符号和参数全部配置在xml中。
        4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
            设想:将查询的结果集,自动映射成java对象。
     
     
    二:MyBatis:
    介绍:
        MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行        一些改进。
        MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、        创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
        Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行        映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
        mybatis是一个持久层的框架,是apache下的顶级项目。
        mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。
        mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。
        mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)
     
    mybatis架构:
    1. mybatis配置
        SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
        mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
    1. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
    2. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
    3. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是
      是基本执行器、一个是缓存执行器。
    4. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
    5. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
    6. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc
      编程中对结果的解析处理过程。
     三:工程搭建
     
    环境:
    jdk:java version "1.8.0_101"
    myeclipse:Version: 2017 CI 10
    mysql:5.7
    mybatis的运行环境:mybatis-3.4.1
    mysql的驱动包
     
    数据库的建立:
    CREATE TABLE `items` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(32) NOT NULL COMMENT '商品名称',
      `price` float(10,1) NOT NULL COMMENT '商品定价',
      `detail` text COMMENT '商品描述',
      `pic` varchar(64) DEFAULT NULL COMMENT '商品图片',
      `createtime` datetime NOT NULL COMMENT '生产日期',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    
    /*Table structure for table `orderdetail` */
    
    CREATE TABLE `orderdetail` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `orders_id` int(11) NOT NULL COMMENT '订单id',
      `items_id` int(11) NOT NULL COMMENT '商品id',
      `items_num` int(11) DEFAULT NULL COMMENT '商品购买数量',
      PRIMARY KEY (`id`),
      KEY `FK_orderdetail_1` (`orders_id`),
      KEY `FK_orderdetail_2` (`items_id`),
      CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
      CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
    
    /*Table structure for table `orders` */
    
    CREATE TABLE `orders` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `user_id` int(11) NOT NULL COMMENT '下单用户id',
      `number` varchar(32) NOT NULL COMMENT '订单号',
      `createtime` datetime NOT NULL COMMENT '创建订单时间',
      `note` varchar(100) DEFAULT NULL COMMENT '备注',
      PRIMARY KEY (`id`),
      KEY `FK_orders_1` (`user_id`),
      CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
    
    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(32) NOT NULL COMMENT '用户名称',
      `birthday` date DEFAULT NULL COMMENT '生日',
      `sex` char(1) DEFAULT NULL COMMENT '性别',
      `address` varchar(256) DEFAULT NULL COMMENT '地址',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
    View Code
    insert  into `items`(`id`,`name`,`price`,`detail`,`pic`,`createtime`) values (1,'台式机',3000.0,'该电脑质量非常好!!!!',NULL,'2015-02-03 13:22:53'),(2,'笔记本',6000.0,'笔记本性能好,质量好!!!!!',NULL,'2015-02-09 13:22:57'),(3,'背包',200.0,'名牌背包,容量大质量好!!!!',NULL,'2015-02-06 13:23:02');
    
    /*Data for the table `orderdetail` */
    
    insert  into `orderdetail`(`id`,`orders_id`,`items_id`,`items_num`) values (1,3,1,1),(2,3,2,3),(3,4,3,4),(4,4,2,3);
    
    /*Data for the table `orders` */
    
    insert  into `orders`(`id`,`user_id`,`number`,`createtime`,`note`) values (3,1,'1000010','2015-02-04 13:22:35',NULL),(4,1,'1000011','2015-02-03 13:22:41',NULL),(5,10,'1000012','2015-02-12 16:13:23',NULL);
    
    /*Data for the table `user` */
    
    insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'王五',NULL,'2',NULL),(10,'张三','2014-07-10','1','北京市'),(16,'张小明',NULL,'1','河南郑州'),(22,'陈小明',NULL,'1','河南郑州'),(24,'张三丰',NULL,'1','河南郑州'),(25,'陈小明',NULL,'1','河南郑州'),(26,'王五',NULL,NULL,NULL);
    View Code

    工程结构:

    SqlMapConfig.xml:
    SqlMapConfig.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>
         <!-- 和spring整合后 environments配置将废除-->
         <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://localhost:3307/shopping" />
                         <property name="username" value="root" />
                         <property name="password" value="1234" />
                    </dataSource>
               </environment>
         </environments>
    </configuration>

    log4j.properties

    主要用于控制台的输出

    #Global logging configuration
    # 在开发环境下日志级别要设成
    log4j.rootLogger = DEBUG, stdout
    # 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

    User.java(toString,getter,setter,构造器)

         //属性名和数据库表字段的名对应
         private int id;
         private String username;
         private Date birthday;
         private int sex;
         private String address;
    映射文件:
    映射文件命名:
    User.xml,,mapper代理开发映射文件的名称叫xxxMapper.xml,映射文件中配置sql语句
    在sqlmap目录下创建User.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">
     
     <!-- namespace命名空间,作用就是对sql进行分类花的管理,理解sql的隔离 -->
     <!-- 注意使用mapper代理方法开发,namespace就有特殊的作用 -->
    <mapper namespace="test">
       
    </mapper>
    SqlMapConfig.xml:
    加载映射文件:
         <!-- 加载 映射文件 -->
         <mappers>
               <mapper resource="sqlmap/User.xml"/>
         </mappers>

    继续更新中......

  • 相关阅读:
    LeetCode 3 Longest Substring Without Repeating Characters
    //……关于前后端分离与不分离
    //……关于HTTP与HTTPS
    //……关于报文
    <node>……express的中间件……//
    <git>……git的基本使用……//
    <mongoose>……find与findOne的区别……//
    //……关于TCP三次握手与四次挥手
    C#文件操作
    梯度下降的简单例子
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/9744522.html
Copyright © 2011-2022 走看看