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. 理解async 和 await

    await 后面接的是promise,await语句下面(注意:不是await后面,而是await所在语句的下面,即下行以后)的代码就相当在promise.then()里面执行,有文章说 await后 ...

  2. 肉夹馍(Rougamo)4.0.1 异步方法变量调试修复与IoC系列扩展

    肉夹馍(https://github.com/inversionhourglass/Rougamo),一款编译时AOP组件,无需在应用启动时进行初始化,也无需繁琐的配置:支持所有种类方法(同步和异步. ...

  3. ES7学习笔记(四)字段类型(mapping)

    在上一节中,我们创建了索引,在创建索引的时候,我们指定了mapping属性,mapping属性中规定索引中有哪些字段,字段的类型是什么.在mapping中,我们可以定义如下内容: 类型为String的 ...

  4. 熔断、限流、降级 —— SpringCloud Hystrix

    概述 Hystrix 为 微服务架构提供了一整套服务隔离.服务熔断和服务降级的解决方案.它是熔断器的一种实现,主要用于解决微服务架构的高可用及服务雪崩等问题 Hystrix 的特性如下: 服务熔断:H ...

  5. 生产级Redis 高并发分布式锁实战2:缓存架构设计问题优化

    对于大多数高并发场景,都是读多写少.比如商品信息,医生挂号信息等.提交订单页只有一个操作. 对于一个普通的缓存架构设计,实现商品的增删改查功能,代码如下: Controller 层 @RestCont ...

  6. ST-SSL: 用于交通流量预测的时空自监督学习《Spatio-Temporal Self-Supervised Learning for Traffic Flow Prediction》(交通流量预测、时空异质性、自监督、数据增强)

    2023年10月23日,继续论文,好困,想发疯. 论文:Spatio-Temporal Self-Supervised Learning for Traffic Flow Prediction Git ...

  7. Angular 18+ 高级教程 – Component 组件 の @let Template Local Variables

    前言 Angular 在 v18.1 推出了 Template 新语法 @let. 这个 @let 和上一篇教的 Control Flow @if, @for, @swtich, @defer 语法上 ...

  8. SQL Server – 执行计划和各种 join 方式 (Execution plan & Join Pattern)

    前言 我几乎从来没有遇到过性能问题, 毕竟项目真的太小了. 一般上只要用常识去建 index 就可以了. 但是这并不阻碍我对知识的追求. 这篇是关于一些性能优化和原理的内容. 纯属学习, 希望未来有机 ...

  9. EF Core – Library use EF

    前言 写 Library 有时候会用到 database, 会想用 EF 来维护. 比如 Identity, IdentityServer, OpenIddict, 这些 Library 都有使用到 ...

  10. PasteForm最佳CRUD实践,实际案例PasteTemplate详解(一)

    本文将介绍soft.pastecode.cn出品的PasteForm,PasteForm是贴代码使用Dto思想实现的CRUD的一个组件,或者说输出一个思想! 为啥我觉得是最佳的CRUD呢?先结合你的实 ...