3、mybatis的使用

【目的】

我不是为了了解其中实现的细节而去学这个ssm框架的,虽然现在企业用的很多都是ssm框架,但是我暂时不需要找工作,我的目的很明确,为了搭建一个web框架,供我临时使用

1、准备工作

1.1 编译环境:IDEA+mysql-server+Navicat Premium

其中Navicat Premium是mysql的一个可视化界面,我电脑上没有按照mysql的全套exe执行文件去自动安装的,我只是安装了一个数据库,单纯的数据库,没有可视化界面等等一系列东西。

具体安装的方法可以参考博客

https://www.cnblogs.com/reyinever/p/8551977.html

http://www.runoob.com/mysql/mysql-install.html

我不建议安装整套的,因为太大了,而且mysql自带的workbench不是很好用,这个我之前一直用的是这个。

后来发现mysql-server+Navicat Premium就很好用了

1.2 数据表的准备

插入数据sql语句

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','女','北京修正');

2、使用mybatis

忽略我左边的项目,直接右边点击create new project

填写项目名称

不选择模板

next

启用自动导包

2.1 添加pom.xml坐标

<packaging>jar</packaging>
<dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j</artifactId><version>2.10.0</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency>
</dependencies>

2.2 创建User.java实体类

将User.java中的属性,对应User表中的属性

生成getter 和setter方法

2.3 创建IUserDao.java接口

这个文件和User.java放在同一级别的目录下,但是不同的包中。

2.4 在IUserDao中编写接口方法

2.5 编写SqlConfigMap.xml配置文件

这里是配置数据库连接的一些信息,我们选择最简单的在这个文件中配置,其实也可以将数据库连接信息独立出来,但是为了方便使用,直接在这里写了。

这是这个文件的所有代码

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--配置环境--><environments default="mysql"><environment id="mysql"><!--配置事务的类型--><transactionManager type="JDBC"></transactionManager><!--配置数据源,(连接池)--><dataSource type="POOLED"><!--配置连接数据库的4个基本信息--><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment>
</environments></configuration>

2.6 创建IUserDao.xml文件

这里的IUserDao.xml文件放在com.huiyu.dao文件夹下面,但是在resources这个文件下不能直接创建三级目录,这里要分三次,每次创建一个文件夹,如先创建com.再创建huiyu.再创建dao文件夹,最后创建IUserDao.xml文件。不然这里会出问题。

在这个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.huiyu.dao.IUserDao"><!-- 配置查询所有操作 --><select id="findAll" resultType="com.huiyu.domain.User">   select * from user  </select></mapper>

这个就对应在IUserDao.java中接口中编写的接口的实现。

我们写完这个就不需要再编写实现类了,相当于findAll接口的实现类已经写完了。

需要注意的是:这里的select中的id就是我们接口中的接口方法,两者需要同名。


而这里相当于调用这个查询语句,每次我们系统调用IUserDao.java中的接口时,系统会先在这里找到相应的xml实现,为了能够找到这个,我们需要在 的namespace写出我们的接口所在的包,这样系统就知道我们这个xml是和接口方法相对应的,select对应接口方法,用这条语句查询到的数据将映射到我们的结果集中。

所以这个resultType需要定义返回对象需要封装在什么类中。也就是我们之前编写的User.java类,这就是为什么这个类中的所有属性都需要和数据库中的属性名对应的原因了。因为这个select语句查询到的数据是数据库中的数据,需要封装在对应的java类中才能在java语言中遍历打印(这样解释应该能理解了)

这样我们就相当于全部写完了方法,然后为了能够让mybaitis能够找到这个实现方法,我们需要在SqlConfigMap.xml中添加mapper

所有方法就差不多实现了,其实大部分是mybatis自动实现,我们开始编写测试类。

2.7 编写测试类

测试类的代码大部分细节是不需要知道的。只需要将代码贴上:

package com.huiyu.test;import com.huiyu.dao.IUserDao;
import com.huiyu.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** @Auther: huiyu* @Date: 2019/4/19* @Description: com.huiyu.test*/
public class UserTest {private InputStream in;private SqlSession session;private IUserDao userDao;@Beforepublic void init() throws IOException {//1.读取配置文件in = Resources.getResourceAsStream("SqlMapConfig.xml");// 2.创建 SqlSessionFactory 的构建者对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// 3.使用构建者创建工厂对象 SqlSessionFactorySqlSessionFactory factory = builder.build(in);//4.使用 SqlSessionFactory 生产 SqlSession 对象session = factory.openSession();//5.使用 SqlSession 创建 dao 接口的代理对象userDao = session.getMapper(IUserDao.class);}@Afterpublic void destory() throws IOException {session.commit();//7.释放资源session.close();in.close();}/*** 查找所有入门案例* @param*/@Testpublic void findAllTest(){//6.使用代理对象执行查询所有方法List<User> users = userDao.findAll();for(User user : users){System.out.println(user);}}}

在finAllTest()方法上右键,选择运行。便可以查询到我们需要的结果。

再最后看一下项目的结构:

这里的log4j只需要复制进去即可:

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

3、总结一下

按顺序我们做的工作是

  • 创建数据表
  • 创建表对应的实体类,生成getter和setter方法,生成toString方法
  • 创建对应的IUserDao.java接口类,编写查询接口方法
  • 创建SqlConfigMap.xml,将配置信息复制进去
  • 创建IUserDao.xml文件,编写select查询语句,将结果集映射到java实体中
  • 在SqlConfigMap.xml添加这里映射到我们新编写的IUserDao.xml文件
  • 编写测试类,运行

说明:只要熟悉这个过程之后,其他的增删改查等一系列操作都是按照这个流程来的,至于其中的很多代码,比如测试类中:

个人学习框架的方法

我们不需要知道这些代码的实际含义,只需要在我们的测试方法中调用dao中的接口即可。

等到熟悉了所有的流程后,我们便可以再回头去学习这些代码的具体含义,比如我们在IUserDao.xml中,可以添加where标签,可以添加别名,可以建立多表查询,但是这些复杂的查询,都是在这个简单的基础上进行扩展的,而我们学习的时候,要把最基本的框架熟练掌握。

然后在此框架上进行衍生一些其他复杂的操作,而复杂的操作也不过就是在这框架上多加了一点东西,这个时候多加这些东西,我们便可以查找相关的文档,比如IUserDao.xml文件中,我们可以查找文档,学到还有很多标签等。

所以学习需要有方法,抓总体,再回头细看局部。

【新征程-ssm】3、mybatis的使用相关推荐

  1. 华为、百度、小米踏上造车新征程,软件如何吞噬汽车?

    [编者按]在全行业线上化的今天,新一轮的技术变革从根本上动摇了传统汽车行业的百年游戏规则,并出现了以特斯拉.蔚来.小鹏等为代表的造车新势力,和以英伟达.百度.华为等为代表的技术赋能者.传统汽车企业如何 ...

  2. 陆奇“入驻” YC,开启新征程

     作者 | 阿司匹林.Just 出品 | AI 科技大本营 陆奇的新征程开始了. 8 月 15 日,据腾讯一线消息,Y Combinator(以下简称 YC)宣布中国作为美国市场外展开业务的首个国家 ...

  3. 地平线新征程!官网焕然一新,二代自动驾驶芯片势已蓄,只待发

    雷刚 发自 凹非寺  量子位 报道 | 公众号 QbitAI 沉寂已久,地平线将要带来大招. 一切还没有官宣,也无从探知具体信息,但地平线官网已焕然一新: 8月30日,新征程. 对于这家AI芯片独角兽 ...

  4. Bit-Z生态联盟正式上线 开启全球加密货币市场新征程

    据Bit-Z官方公告,Bit-Z集团今日宣布正式开启生态联盟业务线,开启全球加密货币市场新征程.据悉,Bit-Z生态联盟,隶属于集团生态分支,旨在通过区块链底层技术共赢机制打通Bit-Z全球数字货币价 ...

  5. 奥运年08/07/19我正式加入博客园,开始.net的新征程^-^

    今天,我正式加入博客园,开始.net的新征程,希望在此与各路高手学习交流,共同进步! 转载于:https://www.cnblogs.com/qjjnet/archive/2008/07/19/124 ...

  6. 阿里云数据库2020技术年报新鲜出炉,全力开启牛年新征程!

    简介:阿里云数据库2020技术年报 祝大家元宵节快乐 心圆梦圆,阖家团圆 牛年"犇"向新征程! 原文链接:https://developer.aliyun.com/article/ ...

  7. MIPS投RISC-V是龙芯新征程的开始

    日前,外媒报道MIPS Technologies宣布将放弃继续设计MIPS处理器,转向了RISC-V.在MIPS加盟RISC-V阵营后,有人鼓吹龙芯要完,但事实上,这完全是不了解龙芯具体情况的臆测.特 ...

  8. 云+X案例展 | 民生类:云途腾助力城建开启智慧城轨新征程

    本案例是由云途腾投递并参与评选,CSDN云计算独家全网首发:更多关于[云+X 案例征集]的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,推动整个"云+行业" ...

  9. 大数据每日哔哔、新征程

    精选30+云产品,助力企业轻松上云!>>> 新征程 为什么要写这个号.目前从事大数据开发,积极探索.相关领域知识.之前从事金融领域的开发,也会分享理财常识. 一来,这里只能自己发帖, ...

最新文章

  1. [转] mongoose学习笔记(超详细)
  2. linux iptables详解
  3. iOS-消除CocoaPods内容警告
  4. linux平台下rpm方式和源码包方式安装mysql5.7
  5. Network 之四 常用 Linux 网络命令及网络调试工具介绍
  6. hell 12 21 filename重定向的含义和区别
  7. html中讲关键字加粗体,关键字(词)加粗 SEO
  8. mongoDB非关系型数据库
  9. 上位机通过串口获取单片机数据
  10. 破解文件系统telnet密码【ZT】
  11. 平安夜、圣诞节设计素材和灵感|撒糖(PNG免扣素材)
  12. cba篮球暂停次数和时间_CBA一场比赛每支球队可以叫多少次暂停
  13. Good Bye 2016 //智商再次下线,边界爆炸.....
  14. jQuery图片轮播插件 jQuery Cycle Plugin
  15. 解决 xshell 上面 zsh 的 home end 无效问题
  16. JAVA回合制pk游戏
  17. 通过R访问世界银行数据(World Bank Data)分析经济
  18. 使用阿里云安装基础软件
  19. Python序列 数据类型 创建方式 Tuple元组 Str字符串 List列表 dict字典 Set集合 range,zip,map,enumerate
  20. python 获取csv的列数_Python读取excel的两种方法

热门文章

  1. JavaWeb项目的jsp文件获取不到图片是什么原因?
  2. fillna填充某一列_python dataframe向下向上填充,fillna和ffill的方法
  3. 【简洁明了MySQL】MySQL基础操作之连接,创建和删除数据库
  4. OLED取字模软件设置
  5. MySQL联合索引生效规则
  6. 机械键盘 程序员_适用于程序员和游戏玩家的机械键盘
  7. MFC小程序之画三角形并填充
  8. Photoshop2023常用快捷键和使用技巧(作为备忘)
  9. Ubuntu UFW 防火墙配置
  10. 【八天学好Linux】第七天 Linux的磁盘管理