Spring Boot专栏六:在Dao.xml文件中写Mybatis语句
本节专栏我们来介绍如何在Dao.xml文件中写Mybatis语句
什么是JDBC
在介绍Mybatis之前,首先简单说一下JDBC. 如果想完整充分学习JDBC,可以参考大佬们的博客,比如:学JDBC,这一篇就够了
我在这里拾人牙慧,冒昧地援引一下:
JDBC 规范定义接口,具体的实现由各大数据库厂商来实现。
JDBC 是 Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个
数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即可,数据库驱动由数据库厂商提供。
使用 JDBC 的好处:
- 程序员如果要开发访问数据库的程序,只需要会调用 JDBC 接口中的方法即可,不用关注类是如何实现的。
- 使用同一套 Java 代码,进行少量的修改就可以访问其他 JDBC 支持的数据库
简单来说,JDBC的全称是Java Database connectivity,也就是Java访问、使用数据库的一个接口(连接的口,不是interface那个接口),我们只需要按照sql语言的规则写出来,数据库,比如mysql,就会自动替我们去执行操作。
但是,JDBC是要用Java语言写的,是在java文件中使用的。我们现在在xml文件中,怎么访问数据库,怎么让java使用xml文件去告知数据库进行什么操作?这就要用到Mybatis.
什么是Mybatis
根据Mybatis的百度百科的说法:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
由此可见,Mybatis就是解决我们上述问题的解。它简单易学,灵活方便,提供xml标签,支持编写动态sql,很方便我们在项目中部署和维护。接下来我们看看如何使用Mybatis来写Dao.xml文件。
xxxDao.xml的内容怎么写
专栏第四节粗略地讲了xml文件的内容怎么写,本节具体地来介绍一下。
xml头部的内容
在专栏第四节中,我们提到了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" >
这个是固定死的,除非xml或者mybatis等的版本变化了,否则我们就是这么写。以后我们写其他的xxxDao.xml文件,只要复制这段话就行了。
mapper对的内容
在专栏第四节中,xml文件的主要内容包括在一个mapper对<mapper> </mapper>中:
<mapper namespace="com.example.demo.dao.UserDao">
<select id="show_user_all" resultType="com.example.demo.entity.User">
select *
from user__
</select>
<select id="show_user_by_user_name" parameterType="String" resultType="com.example.demo.entity.User">
select user_name, user_password, register_time, login_time
from user__
where user_name=#{user_name}
</select>
</mapper>
其中,mapper对有个参数namespace,它代表该xml文件对应哪个Dao.java文件吗。第四节中也提到了,这句话是找到对应Dao的关键。
其他的两个select对,就是和JDBC有关了,我们看下一节
基于Mybatis,写sql语句
下面我们来讲解如何写sql语句,这里我们只讲增删查改四类语句,不涉及add, alert, drop等语句(本小节的内容基于大家有基本的sql语句基础)。
增insert
增 insert,首先我们要在xml的语句对的开头写<insert …>,在对结束的时候写</insert>.
在<insert …>中,有这么几个重要的参数:
- id:这个参数不止是insert有,其他的删改查也都有,是用来对应Dao.java文件中的方法名称——所以这部分一定要注意,如果对不上,就会报错——这也是Mybatis高明的地方,提供了一个映射;
- useGeneratedKeys:是否自动生成主键。这个地方挺坑的,我研究了挺久。
先说一下这个参数怎么用:当它的值为"true"时,数据库默认将数据表中的第一列、第一个属性当作主键,进行自增;如果不想默认的话,可以通过修改keyProperty和keyColumn这两个