MyBatis是另外一款优秀的ORM框架,前身为iBATIS。凡事预则立,不预则废。鉴于以后的项目可能会用到它,因此决定提前学习。本着分享和督促自己学习的目的,笔者将陆续把学习笔记贴出,希望对朋友们有所帮助。如前述博文所述,笔者将使用ant来管理工程。对ant不熟悉的朋友,请参考笔者的两篇预备篇博文:《ant的下载与安装——mybatis学习笔记之预备篇(一)》《ant入门示例——mybatis学习笔记之预备篇(二)》

本学习笔记以模拟学生选课管理为背景,以MySQL5.5作为数据库。创建数据库、用户、表以及用户授权的SQL脚本(courseman.sql)如下(在本文下方可下载附件,含本示例全部代码。):


  1. /*数据库编码UTF8,以下命令是为了在脚本和

  2. 命令行中支持中文*/

  3. set names gbk;

  4. /*创建courseman数据库*/

  5. dropdatabase if exists courseman;

  6. createdatabase courseman;

  7. /*切换到courseman数据库*/

  8. use courseman;

  9. /*创建学生表*/

  10. CREATETABLE student(

  11. id intNOTNULL AUTO_INCREMENT primarykey,

  12. namevarchar(10) NOTNULL,/*姓名*/

  13. gender char(1) NOTNULL,/*性别*/

  14. major varchar(20) NOTNULL,/*专业*/

  15. grade char(4) NOTNULL/*年级*/

  16. );

  17. /*授予courseman用户访问courseman数据库的全部权限。

  18. 为方便起见,用户名与数据库同名。该用户若不存在则被

  19. 创建,密码为abc123*/

  20. grantallprivilegeson courseman.* to courseman@'%'

  21. identified by'abc123';

  22. flush privileges;

  23. /*添加第一条记录*/

  24. insertinto student(name, gender, major, grade)

  25. values('李林','男','计算机科学与技术','2011');

在命令行下以root用户登录(mysql –uroot -p),用source命令运行此脚本(假如此脚本在D盘下,即d:\courseman.sql,则运行命令:source d:/courseman.sql。注意,这里是“/”,而不是“\”)。

本示例的任务是根据学生的ID读取学生信息。

笔者在自己机器上的E:\DemoPrograms目录下新建目录MyBatis01,用来存放本示例的工程。按照ant工程常见的组织形式,生成文件build.xml存放在此目录下,另外建立两个目录:src(存放源代码和配置文件)lib(存放jar包),而classes目录让ant帮我们创建。将本次要用到的jar包复制到lib目录下(分别为mybatis的mybatis-3.0.6.jar和MySQL的JDBC驱动包mysql-connector-java-5.1.20-bin.jar)。

在src目录下新建resources目录,用来保存相关的配置文件。之后,我们将要求ant把此目录复制到classes目录下。由于classes目录会被ant添加到类路径中,因此MyBatis可以访问到这些配置文件。其中核心配置文件configuration.xml(当然也可以取其他名字)的内容如下:


  1. <?xmlversion="1.0"encoding="UTF-8"?>

  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

  3. <configuration>

  4. <!--表明重用预编译的SQL语句-->

  5. <settings>

  6. <settingname="defaultExecutorType"value="REUSE"/>

  7. </settings>

  8. <!--类型别名定义。今后可只用Student来代替它冗长的

  9. 全限定名-->

  10. <typeAliases>

  11. <typeAliasalias="Student"type="com.abc.domain.Student"/>

  12. </typeAliases>

  13. <!--environments可包含多个environment元素。

  14. 每个environment配置与数据库交互的细节,这里

  15. 只需要配置一个。default属性是指在创建SqlSessionFactory

  16. 时,若没有明确指定要用哪个environment,则使用此

  17. 属性指定的-->

  18. <environmentsdefault="development">

  19. <environmentid="development">

  20. <transactionManagertype="jdbc"/>

  21. <!--使用连接池的数据源配置-->

  22. <dataSourcetype="POOLED">

  23. <propertyname="driver"value="com.mysql.jdbc.Driver"/>

  24. <propertyname="url"

  25. value="jdbc:mysql://localhost/courseman"/>

  26. <propertyname="username"value="courseman"/>

  27. <propertyname="password"value="abc123"/>

  28. </dataSource>

  29. </environment>

  30. </environments>

  31. <!--指定要用到的mapper文件。以下的resource属性告诉

  32. MyBatis要在类路径下的resources目录下找StudentMapper.xml文件。我们将把mapper文件存放在src目录下的resources目录中,并让ant把resources目录拷贝到classes中,而classes目录会被ant添加到类路径中。-->

  33. <mappers>

  34. <mapperresource="resources/StudentMapper.xml"/>

  35. </mappers>

  36. </configuration>

(注:我在configuartion.xml和下面的StudentMapper.xml中添加中文注释后报“Invalid byte 1 of 1-byte UTF-8 sequence.”错误,不知为何。有知道的朋友望告知。因此需要本示例代码的朋友不要复制这两个文件的代码,在本文下方下载附件即可。附件可直接运行。)

此配置文件很简单,这也体现了笔者一向的原则:从最简单的开始。其实有部分知识不太理解也属正常,慢慢用多了自然就理解了,熟悉了,这符合一般的学习规律。相信包括笔者在内的学习者,都是这种情况。

接着编写学生类,这是一个普通的java bean。代码如下:


  1. package com.abc.domain;

  2. publicclass Student {

  3. privateint id;

  4. private String name;   //姓名

  5. private String gender; //性别

  6. private String major;  //专业

  7. private String grade;  //年级

  8. publicint getId() {

  9. return id;

  10. }

  11. publicvoid setId(int id) {

  12. this.id = id;

  13. }

  14. public String getName() {

  15. return name;

  16. }

  17. publicvoid setName(String name) {

  18. this.name = name;

  19. }

  20. public String getGender() {

  21. return gender;

  22. }

  23. publicvoid setGender(String gender) {

  24. this.gender = gender;

  25. }

  26. public String getMajor() {

  27. return major;

  28. }

  29. publicvoid setMajor(String major) {

  30. this.major = major;

  31. }

  32. public String getGrade() {

  33. return grade;

  34. }

  35. publicvoid setGrade(String grade) {

  36. this.grade = grade;

  37. }

  38. }

按照包的层次结构,在src目录下建立子目录层次com\abc\domain,然后把Student.java存放于此。

MyBatis需要我们提供一个接口,在接口中声明访问数据库的方法。因此,编写接口StudentMapper.java如下:


  1. package com.abc.mapper;

  2. import com.abc.domain.Student;

  3. publicinterface StudentMapper {

  4. //根据学生ID查询学生实体

  5. public Student getById(int id);

  6. }

类似地,将此文件放置在src目录下的com\abc\mapper目录下。

现在编写上面提到的mapper文件StudentMapper.xml。在此文件里,我们写好查询的SQL语句,并配置好映射关系。内容如下:


  1. <?xmlversion="1.0"encoding="UTF-8"?>

  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  3. <!--namespace该是StudentMapper的完整限定名-->

  4. <mappernamespace="com.abc.mapper.StudentMapper">

  5. <!--定义java bean的属性与数据库表的列之间的映射。type="Student"用到了configuration.xml中定义的别名-->

  6. <resultMapid="studentResultMap"type="Student">

  7. <!--id映射-->

  8. <idproperty="id"column="id"/>

  9. <!--普通属性映射-->

  10. <resultproperty="name"column="name"/>

  11. <resultproperty="gender"column="gender"/>

  12. <resultproperty="major"column="major"/>

  13. <resultproperty="grade"column="grade"/>

  14. </resultMap>

  15. <!--与StudentMapper接口中的getById方法对应,包括

  16. 方法名和参数类型。SQL语句中以“#{}”的形式引用参数-->

  17. <selectid="getById"parameterType="int"resultMap="studentResultMap">

  18. SELECT *

  19. FROM student  WHERE id = #{id}

  20. </select>

  21. </mapper>

MyBatis将根据此文件帮我们实现StudentMapper接口。下面编写TestMyBatis.java,实现我们的功能。代码如下:


  1. package com.test;

  2. import java.io.IOException;

  3. import java.io.Reader;

  4. import org.apache.ibatis.io.Resources;

  5. import org.apache.ibatis.session.SqlSessionFactory;

  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;

  7. import org.apache.ibatis.session.SqlSession;

  8. import org.apache.ibatis.session.SqlSessionFactory;

  9. import com.abc.mapper.StudentMapper;

  10. import com.abc.domain.Student;

  11. publicclass TestMyBatis

  12. {

  13. publicstaticvoid main(String[] args)

  14. {

  15. //与configuration.xml中的mapper配置类似,告诉MyBatis

  16. //应读取的核心配置文件

  17. String resource = "resources/configuration.xml";

  18. Reader reader = null;

  19. try{

  20. reader = Resources.getResourceAsReader(resource);

  21. }catch(IOException e)

  22. {

  23. e.printStackTrace();

  24. }

  25. //创建SqlSessionFactory实例。没有指定要用到的

  26. //environment,则使用默认的environment

  27. SqlSessionFactory sqlSessionFactory

  28. = new SqlSessionFactoryBuilder().build(reader);

  29. SqlSession sqlSession = sqlSessionFactory.openSession();

  30. try{

  31. StudentMapper mapper =

  32. sqlSession.getMapper(StudentMapper.class);

  33. Student student = mapper.getById(1);

  34. if(student != null)

  35. {

  36. System.out.println("姓名: "+student.getName()

  37. +"\n专业: "+student.getMajor());

  38. }

  39. else

  40. {

  41. System.out.println("没有找到。");

  42. }

  43. }

  44. finally

  45. {

  46. sqlSession.close();

  47. }

  48. }

  49. }

在命令窗口进入E:\DemoPrograms\MyBatis01目录,运行命令:ant run。则运行结果如下:


【MyBatis学习笔记】系列之预备篇一:ant的下载与安装

【MyBatis学习笔记】系列之预备篇二:ant入门示例

【MyBatis学习笔记】系列之一:MyBatis入门示例

【MyBatis学习笔记】系列之二:MyBatis增删改示例

【MyBatis学习笔记】系列之三:MyBatis的association示例

【MyBatis学习笔记】系列之四:MyBatis association的两种形式

【MyBatis学习笔记】系列之五:MyBatis与Spring集成示例

【MyBatis学习笔记】系列之六:MyBatis与Spring集成示例续

【MyBatis学习笔记】系列之七:MyBatis一对多双向关联

【MyBatis学习笔记】系列之八:MyBatis MapperScannerConfigurer配置

【MyBatis学习笔记】系列之九:MyBatis collection的两种形式

【MyBatis学习笔记】系列之十:MyBatis日志之Log4j示例

【MyBatis学习笔记】系列之十一:MyBatis多参数传递之注解方式示例

【MyBatis学习笔记】系列之十二:MyBatis多参数传递之默认命名方式示例

【MyBatis学习笔记】系列之十三:MyBatis多参数传递之Map方式示例

【MyBatis学习笔记】系列之十四:MyBatis中的N+1问题

【MyBatis学习笔记】系列之十五:MyBatis多参数传递之混合方式

【MyBatis学习笔记】系列之十六:Spring声明式事务管理示例

【MyBatis学习笔记】系列之十七:MyBatis多对多保存示例

本文出自 “肖凡的专栏” 博客,请务必保留此出处http://legend2011.blog.51cto.com/3018495/908956

MyBatis入门示例——MyBatis学习笔记之一的更多相关文章

  1. 第一个Mybatis程序示例 Mybatis简介(一)

    在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于“internet”和“aba ...

  2. 0063 MyBatis入门示例

    MyBatis是一个"半自动化"的ORM框架,ORM即Object/Relation Mapping,对象关系映射,是面向对象编程语言跟关系型数据库的桥梁,将编程语言对Java实体 ...

  3. Mybatis入门之MyBatis基础

    一.MyBatis概述 1.ORM模型简介 ORM:对象关系映射(Object Relation Mapping) 1)传统JDBC程序的设计缺陷(实际项目不使用) a.大量配置信息硬编码 b.大量的 ...

  4. Dubbo入门到精通学习笔记(八):ActiveMQ的安装与使用(单节点)、Redis的安装与使用(单节点)、FastDFS分布式文件系统的安装与使用(单节点)

    文章目录 ActiveMQ的安装与使用(单节点) 安装(单节点) 使用 目录结构 edu-common-parent edu-demo-mqproducer edu-demo-mqconsumer 测 ...

  5. mybatis入门--初识mybatis

    初识mybatis 今天,一起来说说mybits这个框架吧.这是一个持久层的框架.之前叫做ibatis.所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶.不是写错了,它确实就是这个样子的. ...

  6. Java8——快速入门手册(学习笔记)

    github博文传送门 Java8特性学习笔记 Java8中新增了许多的新特性,在这里本人研究学习了几个较为常用的特性,在这里与大家进行分享.(这里推荐深入理解Java 8用于理解基础知识)本文分为以 ...

  7. React入门基础(学习笔记)

    这篇博客是我通过阅读React官方文档的教程总结的学习笔记,翻译可能存在误差,如有疑问请参见http://reactjs.cn/react/docs/tutorial.html . 一.所需文件 在编 ...

  8. 关于对MyBatis.net框架的学习笔记( MyBatis.net是一款灵活性极大,sql由开发者自行在xml中编写, 轻量的ORM映射框架). 同时避免了sql硬编码到代码中不易维护的问题...

    对于为什么要用ORM,为什么又要选择MyBatis.net,这个问题希望读者自行查找资料.这里直接贴出相关的调试笔记. 步骤1)下载与引用. http://code.google.com/p/myba ...

  9. 学习Vue 入门到实战——学习笔记

    闲聊: 自从进了现在的公司,小颖就再没怎么接触vue了,最近不太忙,所以想再学习下vue,就看了看vue相关视频,顺便做个笔记嘻嘻. 视频地址:Vue 入门到实战1.Vue 入门到实战2 学习内容: ...

  10. mybatis入门(三):mybatis的基础特性

    mybatis的知识点: 1.mybatis和hibernate本质区别和应用场景 hibernate:是一个标准的ORM框架(Ojbect relation mapper对象关系映射).入门门槛较高 ...

随机推荐

  1. Docker 优化NUXT镜像体积

    FROM node:xxx-alpine # 环境变量赋值 ENV 参数名 参数值 RUN mkdir -p /app COPY ./app/package.json /app/package.jso ...

  2. 有哪些让你「 爽到爆炸 」的 Windows 软件?

    前言 本文源于知乎的一个提问,如标题所示:有哪些让你「 爽到爆炸 」的 Windows 软件?今天大姚给大家分享6款C#/.NET开源且免费的Windows软件,希望可以帮助大家提高学习.开发.办公效 ...

  3. 安装Kubernetes(k8s)保姆级教程---无坑版

    一.安装环境说明 硬件要求 内存:2GB或更多RAM CPU: 2核CPU或更多CPU 硬盘: 30GB或更多 本次环境说明: 操作系统:CentOS 7.9 内核版本:3.10.0-1160 mas ...

  4. 爬虫案例2-爬取视频的三种方式之一:requests篇(1)

    @ 目录 前言 爬虫步骤 确定网址,发送请求 获取响应数据 对响应数据进行解析 保存数据 完整源码 共勉 博客 前言 本文写了一个爬取视频的案例,使用requests库爬取了好看视频的视频,并进行保存 ...

  5. 合合信息亮相新加坡科技周——Big Data & AI World Expo展示AI驱动文档数字化的前沿能力

    合合信息亮相新加坡科技周--Big Data & AI World Expo展示AI驱动文档数字化的前沿能力   展会规模背景: 2023年10月11日-12日,合合信息在TECH WEEK ...

  6. 携手华为云WeLink,合合信息旗下名片全能王推动人脉管理数智化升级

    名片是商务场景中信息传递的重要载体.在无纸化办公日益兴盛的当下,数字名片逐渐被广大职场人士接受,成为商务交流的新方式.近期,合合信息旗下名片全能王与华为云WeLink联合研发,升级数字名片" ...

  7. ASP.NET Core – MVC

    前言 在 ASP.NET Core – MVC vs Razor Page 里有提到 MVC. 它算是 WebAPI 的抽象. 但是通常 MVC 指的是比较传统的 Website, WebAPI 则是 ...

  8. JAVA与.NET DES加密解密

    项目需要在两个系统间采用DES加密,一个系统为JAVA开发的,另外一个.Net开发的 在网上找了很多写法但加密出的数据两个系统都无法匹配, 在做了小修改以后终于可以用了,已经测试过 JAVA版本 im ...

  9. Java SE 23 新增特性

    Java SE 23 新增特性 作者:Grey 原文地址: 博客园:Java SE 23 新增特性 CSDN:Java SE 23 新增特性 源码 源仓库: Github:java_new_featu ...

  10. Session——基本使用

    Session    Session 原理 Session 使用细节