该系列为imooc Java数据库开发与实战应用中MyBatis课程笔记,跟随课程加入自己见解,同时也为项目中碰到一些问题做了解答
本章会通过案例讲解以下配置及操作
基础操作—主配置解析
- properties配置加载
- environments环境配置
- settings参数设置配置
- typeAliases别名设置
- mapper映射加载
基础操作—查询数据
- 映射配置:sql片段
- 映射配置:select配置
- 特殊配置:字段和属性不一致时resultMap配置
步骤
步骤一:完善第三章项目案例的pom.xml文件
引入mybatis、mysql数据库连接驱动构件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.damu.mybatis</groupId>
<artifactId>mybatispro</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
</dependencies>
</project>
步骤二:在resources下新建mybatis配置文件(主配置解析)
- resources>新建 mybatis-config.xml,配置文件的信息从官方文档中获取,然后再根据项目完善(mybatis3.4.3文档连接)
- 复制进mybatis-config.xml
小心坑 http://mybatis.org/dtd/mybatis-3-config.dtd可能会报错
IDEA中xml文件头报错:URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)解决办法
- mybatis配置文件,我们在该文件中是可以直接完善配置信息,但是当该配置文件需要配置的信息比较多的时候,修改里面的信息就比较困难了,所以可以把配置信息再单独放入资源文件中。
resources>新建db.properties,在资源文件中,信息是以键值对的信息存在
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
username=root
password=123456
- 在mybatis-config.xml中引入db.properties资源文件(properties配置)
properties配置,用于加载外部的properties资源文件
<properties resource="db.properties"></properties>
将该代码放入mybatis-config.xml中,resource就是资源文件的名称
<?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>
<!--
properties配置,用于加载外部的properties资源文件
-->
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
- 配置多个数据源,(environments配置、mapper配置)
- environments配置,用于进行多个数据源的配置管理类,environments标签下存在多个environment,一个environment标签可配置一个具体数据源
- 在environments标签中通过default属性指定单前项目运行过程中使用哪个数据源,填入environment标签id
- environment,用于配置一个具体的数据源,id属性用于给当前数据源定义一个名称,方便我们的项目指定
- transactionManager用于配置事物管理,默认情况下使用的是JDBC
- dataSource是配置数据源的链接信息,type属性用于指定是否使用连接池(POOLED代表是使用连接池)
- mappers用于配置外部的映射配置文件,让mybatis识别到映射文件
- mapper配置引入一个具体的映射文件,resource进行路径方式引入
<?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>
<!--
properties配置,用于加载外部的properties资源文件
-->
<properties resource="db.properties"></properties>
<!--
- environments配置,用于进行多个数据源的配置管理类,environments标签下存在多个environment,一个environment标签可配置一个具体数据源
- 在environments标签中通过default属性指定单前项目运行过程中使用哪个数据源,填入environment标签id
-->
<environments default="development">
<!--
environment,用于配置一个具体的数据源
id属性用于给当前数据源定义一个名称,方便我们的项目指定
-->
<environment id="development">
<!--
transactionManager用于配置事物管理,默认情况下使用的是JDBC
-->
<transactionManager type="JDBC"/>
<!--
dataSource是配置数据源的链接信息,type属性用于指定是否使用连接池(POOLED代表是使用连接池)
-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="product">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--
mappers用于配置外部的映射配置文件,让mybatis识别到映射文件
-->
<mappers>
<!--
mapper配置引入一个具体的映射文件,resource进行路径方式引入
-->
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
- resources>新建mapper文件夹>新建usesMapper.xml映射文件配置文件的信息从官方文档中获取,然后再根据项目完善(mybatis3.4.3文档连接)
复制进usesMapper.xml
- mapper 用于定义一个映射配置文件的根节点
- namespace属性是用来配置命名空间,主要进行session级别的缓存管理,命名空间默认情况下,使用我们当前操作的实体类的全路径
<?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">
<!--
mapper 用于定义一个映射配置文件的根节点
namespace属性是用来配置命名空间,主要进行session级别的缓存管理
命名空间默认情况下,使用我们当前操作的实体类的全路径
-->
<mapper namespace="org.mybatis.example.BlogMapper">
</mapper>
由于我们现在还没有实体类,所以映射文件暂不完善
- 新建实体类,java>新建包com.damu.entity>新建Users实体类
package com.damu.entity;
import java.util.Date;
public class Users {
private Integer id; // 用户编号
private String username; // 登录账号
private String name; // 登录账号
private String userpass; // 登录密码
private String nickname; // 用户昵称
private Integer age; // 用户年龄
private String gender; // 用户性别
private String email; // 用户邮箱
private String phone; // 联系方式
private Date createTime; // 创建时间
private Date updateTime; // 账号最后修改时间
private Date lastLogin; // 用户最后登录时间
private Integer userStatus; // 用户账号状态 0 正常 1 锁定 2 删除
private String remark; // 用户备注信息
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUserpass() {
return userpass;
}
public void setUserpass(String userpass) {
this.userpass = userpass;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Date getLastLogin() {
return lastLogin;
}
public void setLastLogin(Date lastLogin) {
this.lastLogin = lastLogin;
}
public Integer getUserStatus() {
return userStatus;
}
public void setUserStatus(Integer userStatus) {
this.userStatus = userStatus;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
- 完善mybatis-config.xml配置文件中的mapper标签
<mapper resource="mapper/usersMapper.xml"/>
- 完善usesMapper.xml映射文件中的namespace属性
<mapper namespace="com.damu.entity.Users">
</mapper>