MyBatis之课程介绍及环境搭建(一)

文章目录

(一)框架概述
(二)三层架构和SSM框架的对应关系
(三)JDBC操作数据库的问题分析
(四)MyBatis概述
(五)前期准备工作
(六)MyBatis环境搭建
(七)环境搭建的注意事项

(一)框架概述

  • 什么是框架
    它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题
  • 使用框架的好处
    框架封装了很多的细节,使开发者可以使用极简的方式实现功能,提高开发效率

(二)三层架构和SSM框架的对应关系

  • 三层架构:
    表现层:用来展示数据
    业务层:用来处理业务需求
    持久层:用来与数据交互

    其中MyBatis用于解决持久层的问题,SpringMVC用于解决表现层的问题;而Spring不属于任何一个层(后面再讲)

(三)JDBC操作数据库的问题分析

  • 现有的持久层解决技术:

      JDBC技术:
      		Connection
      		PreparedStatement
      		ResultSet
      Spring的JdbcTemplate:
      		Spring中对JDBC的简单封装
      Apache的DBUtils:
      		它跟Spring的JdbcTemplate很像,也是对JDBC的简单封装
    

    以上这些都不是框架

      JDBC是规范
      Spring的JdbcTemplate和Apache的DBUtils都只是工具类
    
  • JDBC程序的缺点

      1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题
      2. sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大, sql 变动需要改变 java代码
      3. 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护
      4. 对结果集解析存在硬编码(查询列名), sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便
    

(四)MyBatis概述

  • MyBatis的概述
    MyBatis是一个持久层框架,使用java编写的
    它封装了JDBC操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动、创建连接等繁杂过程
    它使用了ORM思想实现了结果集的封装
  • ORM思想的概述
    ORM的全称:Object Relational Mapping 对象关系映射
    简单来说:就是把数据库表和实体类的属性对应起来,让我们通过操作实体类来操作数据库表

我们后期可以实现把以下数据库表单与实体类对应起来:

user				User
id   				userId
user_name           userName

但是现在我们先做到:实体类中的属性和数据库表的字段名保持一致

(五)前期准备工作

我们先创建一个空的Maven项目


导入数据库表单

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime default NULL COMMENT '生日',
  `sex` char(1) default NULL COMMENT '性别',
  `address` varchar(256) default NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');





DROP TABLE IF EXISTS `account`;

CREATE TABLE `account` (
  `ID` int(11) NOT NULL COMMENT '编号',
  `UID` int(11) default NULL COMMENT '用户编号',
  `MONEY` double default NULL COMMENT '金额',
  PRIMARY KEY  (`ID`),
  KEY `FK_Reference_8` (`UID`),
  CONSTRAINT `FK_Reference_8` FOREIGN KEY (`UID`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



insert  into `account`(`ID`,`UID`,`MONEY`) values (1,41,1000),(2,45,1000),(3,41,2000);



DROP TABLE IF EXISTS `role`;

CREATE TABLE `role` (
  `ID` int(11) NOT NULL COMMENT '编号',
  `ROLE_NAME` varchar(30) default NULL COMMENT '角色名称',
  `ROLE_DESC` varchar(60) default NULL COMMENT '角色描述',
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



insert  into `role`(`ID`,`ROLE_NAME`,`ROLE_DESC`) values (1,'院长','管理整个学院'),(2,'总裁','管理整个公司'),(3,'校长','管理整个学校');





DROP TABLE IF EXISTS `user_role`;

CREATE TABLE `user_role` (
  `UID` int(11) NOT NULL COMMENT '用户编号',
  `RID` int(11) NOT NULL COMMENT '角色编号',
  PRIMARY KEY  (`UID`,`RID`),
  KEY `FK_Reference_10` (`RID`),
  CONSTRAINT `FK_Reference_10` FOREIGN KEY (`RID`) REFERENCES `role` (`ID`),
  CONSTRAINT `FK_Reference_9` FOREIGN KEY (`UID`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `user_role`(`UID`,`RID`) values (41,1),(45,1),(41,2);

效果如下:

我们现在主要是作内部调用和测试,所以packaging写jar就可以了
如果后期做项目时需要部署到服务器,可以写war

然后写mybatis的坐标,可以到中央仓库或者mybatis的官网复制

因为我们要操作数据库,所以也要导入数据库驱动的坐标

我们还需要学习打印日志,所以要导入日志包的坐标

把单元测试也导进去

(六)MyBatis环境搭建

按照数据库的字段,名字一一对应,新建一个实体类

然后创建相应的Dao类接口

接下来新建一个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">
<!--mybatis的主配置文件-->
<configuration>
    <!--    配置环境-->
    <environments default="mysql">
        <!--        配置mysql的环境-->
        <environment id="mysql">
            <!--            配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--            配置数据源(连接池)-->
            <dataSource type="POOLED">
                <!--                配置连接数据库的4个基本信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=true&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>

    <!--    指定映射配置文件的位置,映射配置文件指定的是每个dao独立的配置文件-->
    <mappers>
        <mapper resource="com/zzq/dao/IUserDao.xml"/>
    </mappers>
</configuration>

注意
Config的约束为:

<?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">

接下来新建IUserDao.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">
<mapper namespace="com.zzq.dao.IUserDao">

    <!--    配置查询所有-->
    <select id="findAll" resultType="com.zzq.domain.User">
        select * from user
    </select>
</mapper>

注意
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">
  • 总结:
    第一步,创建maven工程并导入坐标
    第二步,创建实体类和dao的接口
    第三步,创建mybatis的主配置文件(SqlMapConfig.xml)
    第四步,创建映射配置文件(IUserDao.xml)

(七)环境搭建的注意事项

  1. 创建 IUserDao.xmlIUserDao.java时,起名为Dao是为了和我们之前的知识保持一致。
    在mybatis中,它把持久层的操作接口名称和映射文件也叫:Mapper
    所以如果看到IUserMapper.java其实跟IUserDao.java是一样的
    xml也同理
  2. 在IDEA中创建目录(directory)的时候,跟包是不一样的
    包在创建时:com.zzq.dao 它是三层结构
    目录在创建时:com.zzq.dao 它是一层结构

    比如我们非要 com.zzq.dao 这样去创建目录,效果如下:

    它会变成一层结构,而非我们预期的三层结构
    所以为了创建出三层结构,我们需要一层一层地去创建,或者com/zzq/dao
  3. mybatis的映射配置文件位置必须和dao接口的包结构相同
    所以我们才需要目录的三层结构
  4. 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
  5. 映射配置文件的操作配置(select xxx),id属性的取值必须是dao接口的方法名

当我们遵循了第三、四、五点之后,我们在开发中就无需再写Dao的实现类

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zheng_zq666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值