MyBatis的基本使用

前言

本章我们将开始学习一个非常优秀的ORM(对象关系映射)框架:MyBatis,它是目前企业中使用最多的数据库框架。

MyBatis简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

MyBatis的优点有:

1)代替JDBC完成CRUD,效率高

2)上手容易,配置灵活

3)是目前公司主流的ORM(对象关系映射)框架

MyBatis的基本配置

这里我们使用Maven构建项目,

首先需要导入MyBatis和MySQL驱动的依赖

然后再添加配置文件,MyBatis的配置文件分为两种:

1、MyBatis框架的总体配置文件

2、MyBatis数据库映射文件

MyBatis配置文件

我们可以在项目的resources目录中添加配置文件:mybatis-config.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">

<configuration>

<!--environments 代表配置环境集合,此标签中可以有多个environment,

default属性是选择其中一个环境作为默认的配置环境-->

<environments default="develop">

<environment id="develop">

<!--这里配置事务管理器为JDBC类型-->

<transactionManager type="JDBC"/>

<!--这里配置数据源,POOLED代表连接池类型的数据源-->

<dataSource type="POOLED">

<!--这里是常用的4个数据库配置:驱动、URL、账号、密码-->

<property name="driver" value="com.mysql.cj.jdbc.Driver"/>

<property name="url" value="jdbc:mysql://localhost/java1903?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>

<property name="username" value="root"/>

<property name="password" value="123456"/>

</dataSource>

</environment>

</environments>

<!--这里是配置数据库映射文件的路径,如果有映射文件就配置到这里-->

<mappers>

<mapper resource="mappers/userMapper.xml"/>

</mappers>

</configuration>

映射文件

MyBatis能实现通过Java对象来操作数据库,那么如何通过Java对象的操作来查询和修改数据库的表呢?MyBatis通过映射文件来配置数据的SQL操作,将Java对象的方法映射为具体的SQL语句。

这里我们先编写一个UserDAO接口

package com.qianfeng.mybatis.dao;

public interface UserDAO

{

List<User> selectAll();

void insert(User user);

}

接下来我们来配置映射文件实现User表的查询和插入操作:

在resources下创建mappers目录,然后创建映射文件:userMapper.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配置对应的Java接口 -->

<mapper namespace="com.qianfeng.mybatis.dao.UserDAO">

...

</mapper>

mapper中可以配置四种标签:

1)<insert> 配置insert语句

2)<update> 配置update语句

3)<delete> 配置delete语句

4)<select> 配置select语句

这四种标签的常用属性有:

id 对应DAO接口中的方法名

2)parameterType 对应方法的参数类型

3)returnType

对应方法的返回值类型,如:User(表的字段名和类的属性名一样)

returnMap

对应方法的返回值类型映射,用于表的字段名和类的属性名不一样的情况,实现字段名和属性的映射关系

这里是insert配置示例

<insert id="insert" parameterType="com.qianfeng.mybatis.entity.User">

insert into tb_user(u_name,u_password,u_realname,u_gender,u_age,u_img)

values(#{name},#{password},#{realname},#{gender},#{age},#{img})

</insert>

其中#{...}中包含的是User对象的属性名称

select配置示例

<resultMap id="userMap" type="com.qianfeng.mybatis.entity.User">

<id property="id" column="u_id"></id>

<result property="name" column="u_name"></result>

<result property="password" column="u_password"></result>

<result property="realname" column="u_realname"></result>

<result property="gender" column="u_gender"></result>

<result property="age" column="u_age"></result>

<result property="img" column="u_img"></result>

</resultMap>

<select id="selectAll" resultMap="userMap">

select * from tb_user

</select>

returnMap配置的查询语句返回的对象与数据库表的映射,id是映射名,type是对应的Java类型

其中子标签id是配置表的主键,属性id是Java类的属性名,column是表的字段名,还有javaType和jdbcType属性可以配置Java的类型和Jdbc数据类型,这两个这里可以省略。

result是配置除主键外的一般列

MyBatis的使用方法

主要步骤:

1)读取配置文件,创建SqlSessionFactory

SqlSessionFactory factory =

new SqlSessionFactoryBuilder().build(

Resources.getResourceAsStream("mybatis-config.xml"));

2)打开数据库会话Session

SqlSession sqlSession = factory.openSession();

3)获得DAO接口的代理对象

UserDAO mapper = sqlSession.getMapper(UserDAO.class);

4)执行CRUD

mapper.insert(...);

5) 提交事务

sqlSession.commit();

6) 关闭会话

sqlSession.close();

总结

本章我们学习了MyBatis的基本配置,以及映射文件的写法,也掌握了MyBatis的基本操作方法,MyBatis还有很多强大的特性,我们会在后面学习到。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache...
    day_Sunny阅读 2,638评论 0 6
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,422评论 0 4
  • Mybatis的延迟加载 一、什么是延迟加载 延迟加载:就是在需要用到数据时才进行加载,不需要用到数据时就不加载数...
    一只程序汪阅读 466评论 0 1
  • Spring 技术笔记Day 1 预热知识一、 基本术语Blob类型,二进制对象Object Graph:对象图...
    OchardBird阅读 961评论 0 2
  • 一天,向日葵把脖子伸得长长的,对太阳公公说:“太阳公公,您好!” 太阳公公笑了笑,问:“孩子,你有什么事呀?” 向...
    风铃伴奏声阅读 115评论 0 2