Mybatis系列文章
Mybatis | 02 Mybatis环境搭建
1. Mybatis的环境搭建
1.1 Maven依赖
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
- mybatis:实现Mybatis框架核心功能的支持
- mysql-connector-java:提供mysql数据库支持
- log4j:用于解析XML配置文件
- junit:用于进行单元测试
1.2 Mybatis主配置文件
主要任务:在 Configuration标签 中完成以下几部分的配置内容
-
使用 properties标签 配置属性
-
使用 typeAliases标签 配置类的别名
-
使用 environments标签 嵌套 environment标签 的方式配置环境信息
-
使用 mappers标签配置映射文件的位置信息
- 头文件约束
<!--主配置文件的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">
- 配置信息
<!--Mybatis 主配置文件-->
<?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">
<Configruation>
<!--读取配置文件的信息-->
<properties resource="jdbcConfig.properties"></properties>
<!--给User类起别名-->
<typeAliases>
<typeAlias type="org.example.domain.User" alias="user"></typeAlias>
</typeAliases>
<!--配置环境 默认环境设置为mysql-->
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务-->
<transactionManager type="JDBC"></transactionManager>
<!--配置连接数据库的连接池-->
<dataSource type="POOLED">
<!--使用配置文件的参数-->
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
</environment>
</environments>
<!--配置映射文件的位置信息-->
<!--mappers可以包含多个mapper-->
<mappers>
<!--基于XML配置使用resource属性指定映射文件的位置-->
<!--基于注解配置使用class属性指定注解的接口-->
<mapper resource="..."></mapper>
</mappers>
</Configruation>
- 配置文件(jdbcConfig.properties)
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///testdb
jdbc.username=root
jdbc.password=1234
1.2.1 Properties标签的使用
- 第一种配置方式:使用 property标签 直接设置属性值
<properties>
<property name="driver" value="com.mysql.cj.jdbc.driver"></property>
<property name="url" value="mysql:jdbc://localhost:3306/testdb"></property>
<property name="username" value="root"></property>
<property name="password" value="1234"></property>
</properties>
property标签属性:
- name属性用于给属性一个唯一标识,在需要属性值处使用value属性时引用
- value属性用于指定属性的值
- 使用:在配置数据源时在value中引用之前定义的name获得属性值
<dataSource type="POOLED">
<!--使用配置文件的参数-->
<property name="driver" value="driver"></property>
<property name="url" value="url"></property>
<property name="username" value="username"></property>
<property name="password" value="password"></property>
</dataSource>
- 第二种配置方式:使用外部配置文件(jdbcConfig.properties)
<properties resource="jdbcConfig.properties"></properties>
<properties url="file:///../src/main/resources/jdbcConfig.properties"></properties>
properties标签属性:
- resource属性用于指定类路径下的配置文件位置
- url属性使用统一资源定位符指定配置文件的位置
- 使用:在配置数据源时在value中使用EL表达式${ }获取属性值
<dataSource type="POOLED">
<!--使用配置文件的参数-->
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
Tips 1.1 :URL补充
URL:统一资源定位符,可以唯一标识一个资源的位置,相当于一个地址
URI:统一资源标识符,给资源起名来唯一定位资源,相当于一个名字
写法:协议+主机+端口+URI
例:“http://localhost:8080/server/demo1”
注:在本机上的资源使用的是file协议,同样可以使用URL定位资源
例:“file:///D:/desktop/mybatis.md”
1.2.2 typeAliases标签的使用
- 第一种配置方式:使用 typeAlias标签 定义某个实体类的别名
<typeAliases>
<typeAlias type="org.example.domain.User" alias="user"></typeAlias>
</typeAliases>
typeAlias标签属性:
- type属性指定实体类的全限定类名
- alias属性指定实体类的别名
- 第二种配置方式:使用package标签定义包下所有实体类的别名
<typeAliases>
<package name="org.example.domain"></package>
</typeAliases>
package标签属性:
- name属性指定要配置别名的包,包中所有实体类都使用类名作为别名
- 使用别名
注:起别名以后就不再区分大小写
定义别名前(以保存操作为例)
<!--保存操作-->
<insert id="saveUser" parameterType="org.example.domain.User">
insert into user(username,birthday,bonus)
values(#{username},#{birthday},#{bonus});
</insert>
定义别名后
<!--保存操作-->
<insert id="saveUser" parameterType="user/USER">
insert into user(username,birthday,bonus)
values(#{username},#{birthday},#{bonus});
</insert>
1.2.3 mappers标签的使用
- 第一种配置方式:使用 mapper标签 定义某个接口类的映射配置
- 如果是基于XML配置使用 resource属性 或 url属性 指定映射文件的位置
<mapper resource="org/example/dao/IUserDao.xml"></mapper>
<mapper url="file:///../src/main/resource/org/example/dap/IUserDao.xml"></mapper>
- 如果是基于注解配置使用 class属性 指定注解的接口
<mapper class="org.example.dao.IUserDao"></mapper>
- 第二种配置方式:使用 package标签 直接定义包下所有接口类的映射配置
<mappers>
<package name="org.example.dao"></package>
</mappers>
Tips 1.2:两个package
在typeAliases标签和mappers标签都可以使用package指定包来更快的配置
区别:
-
在typeAliases标签中的package指定配置的是包中所有的实体类
-
在mappers标签中的package指定配置的是包中所有的接口
1.3 Mybatis映射文件
主要任务:在 mapper标签 中使用配置的方式实现Dao层接口中CRUD操作的功能
-
使用 namespace属性 指定实现的方法所属的接口
-
使用相应的标签实现CRUD操作(见CRUD操作部分)
- 头文件约束
<!--映射文件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">
- 配置信息
<!--Mybatis 映射文件-->
<?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属性确定方法所属的接口-->
<mapper namespace="org.example.dao.IUserDao">
<!--查询所有方法-->
<!--id属性确定方法名,和namespace一起定位方法-->
<!--resultType属性确定返回值的封装类型如何封装返回的数据-->
<select id="findAll" resultType="org.example.domain.User">
<!--value属性是要执行的SQL语句-->
select * from user;
</select>
<!--保存操作-->
<!--parameterType属性指定插入对象的类型,以便使用表达式进行赋值-->
<!--表达式赋值时使用#{属性}占位符的形式,属性名和插入对象的get/set方法后的名称相同-->
<insert id="saveUser" parameterType="org.example.domain.User">
insert into user(username,birthday,bonus)
values(#{username},#{birthday},#{bonus});
</insert>
</mapper>
Tips 1.3 :映射文件的位置
映射文件的路径必须和对应的接口类路径一致
例如:
- 若Dao层接口的路径为org.example.dao.IDao
- 则映射文件的位置必须为org/example/dao/IDao.xml
Tips 1.4 :映射文件的创建
映射文件创建时只能创建目录而无法创建包
小心别掉坑:目录创建时要一级一级创建否则会视为一级目录
- 对于包而言 org.example.dao 是一个三级目录
- 对于目录而言 org.example.dao 只不过是名称是这样的一级目录