1.关于Mybatis框架
- Mybatis的主要作用是快速实现对关系型数据库中的数据进行访问的框架
- 在原生的Java技术中,需要使用JDBC实现对数据库中的数据访问,执行过程繁琐且 相对固定,使用框架可以
2. 创建Mybatis-Spring工程
- Mybatis可以不依赖于Spring等框架直接使用的,但是,就需要进行大量 的配置,前期配置工作量较大,基于Spring框架目前是业内使用的标准之 一,所以,通常会整合Spring与Mybatis,以减少配置
- 在创建工程时,创建普通的Maven工程即可(不需要选择特定的骨架)
- 在pom.xml中添加几个依赖项
<dependencies>
<!--配置mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<!--mybatis整合spring依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.1</version>
</dependency>
<!--spring-context依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.16</version>
</dependency>
<!--spring -jdbc的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!--mysql/mariadb连接的依赖项-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<!--数据库连接池依赖,当前使用的是commons-dbcp2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope> <--限制使用的位置-->
</dependency>
</dependencies>
3. 配置Mybatis的开发环境
- 登录MySQL控制台,创建名为mall_ams的数据库:
- CREATE DATABASE mall_ams;
- 通过数据库视图的Console面板创建数据表:
create table ams_admin (
id bigint unsigned auto_increment,
username varchar(50) default null unique comment '用户名', password char(64) default null comment ' 密 码 ( 密 文 )', nickname varchar(50) default null comment '昵称',
avatar varchar(255) default null comment ' 头 像 URL', phone varchar(50) default null unique comment '手机号码', email varchar(50) default null unique comment '电子邮箱', description varchar(255) default null comment '描述',
is_enable tinyint unsigned default 0 comment '是否启用,1=启用,0=未启用', last_login_ip varchar(50) default null comment '最后登录IP地址(冗余)', login_count int unsigned default 0 comment ' 累 计 登 录 次 数 ( 冗 余 )', gmt_last_login datetime default null comment ' 最 后 登 录 时 间 ( 冗 余 )', gmt_create datetime default null comment '数据创建时间',
gmt_modified datetime default null comment '数据最后修改时间', primary key (id)
) comment '管理员' charset utf8mb4;
- 在src/main/resources下创建datasource.properties配置文件,用于配 置连接数据库的参数,例如:
datasource.url=jdbc:mysql://localhost:3306/mall_ams?useUnicode=true&ch aracterEncoding=UTF-8&serverTimezone=Asia/Shanghai
datasource.driver=com.mysql.cj.jdbc.Driver datasource.username=root datasource.password=root
* 提示:以上配置中的属性名称应该添加前缀,避免与系统环境变量冲突, 例如在Windows操作系统中,username则表示登录系统的用户名
- 在cn.tedu.mybatis包下(不存在,则创建)创建SpringConfig类,读取 以上配置文件:
@Configuration
@PropertySource("classpath:datasource.properties")
public class SpringConfig {
}
* 提示:@PropertySource是Spring框架的注解,用于读取properties类 型的配置文件,读取到的值将存入到Spring容器的Environment对象中
4. Mybatis的基本使用
- 当使用Mybatis实现数据访问时,主要:
- 编写数据访问的抽象方法
- 关于抽象方法:
- 必须定义在某个接口中,这样的接口通常使用Mapper作为名称的后缀,例如AdminMapper
- 方法的返回值类型:
- 如果要执行的数据操作是增、删、改类型的,统一使用int作为返回值类型,表示“受影 响的行数”,也可以使用void,但是不推荐
- 如果要执行的是查询操作,返回值类型只需要能够装载所需的数据即可
- 方法的名称:自定义,不要重载,建议风格如下:
- 插入数据使用
insert
作为方法名称中的前缀或关键字 - 删除数据使用
delete
作为方法名称中的前缀或关键字 - 更新数据使用
update
作为方法名称中的前缀或关键字 - 查询数据时:
- 如果是统计,使用
count
作为方法名称中的前缀或关键字 - 如果是单个数据,使用
get
或find
作为方法名称中的前缀或关键字 - 如果是列表,使用
list
作为方法名称中的前缀或关键字 - 如果操作数据时有条件,可在以上前缀或关键字右侧添加
by字段名
,例如deleteById
- 方法的参数列表:取决于需要执行的SQL语句中有哪些参数,如果有多个参数,可将 这些参数封装到同一个类型中,使用封装的类型作为方法的参数类型
- 所有用于Mybatis处理数据的接口都必须被Mybatis识别,有2种做法:
- 在每个接口上添加@Mapper注解
- 【推荐】在配置类上添加@MapperScan注解,指定接口所在的根包
- 接下来,需要配置抽象方法对应的SQL语句,这些SQL语句推荐配置在 XML文件中
- 可以从 http://doc.canglaoshi.org /config /Mapper.xml.zip 下载到XML 文件。在项目的src/main/resources下创建mapper文件夹,并将下载得 到的XML文件复制到此文件夹中,重命名为AdminMapper.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">
<!-- 根节点必须是mapper -->
<!-- 根节点的namespace属性用于配置此XML对应哪个接口 -->
<mapper namespace="cn.tedu.mybatis.mapper.AdminMapper">
<!-- 根据需要执行的SQL语句的种类选择需要配置的节点名称 -->
<!-- 配置SQL的节点的id属性取值为抽象方法名称 -->
<!-- 在节点内部配置SQL语句 -->
<!-- SQL语句中的参数值使用 #{} 格式的占位符表示 -->
<insert id="insert">
insert into ams_admin (username, password, nickname, avatar, phone, email, description, is_enable,last_login_ip, login_count, gmt_last_login, gmt_create, gmt_modified) values (#{username}, #{password}, #{nickname}, #{avatar}, #{phone}, #{email}, #{description}, #{isEnable},
#{lastLoginIp}, #{loginCount}, #{gmtLastLogin}, #{gmtCreate}, #{gmtModified})
</insert>
</mapper>
* 最后,还需要将DataSource配置给Mybatis框架,并且,为Mybatis配置 这些XML文件的路径,这2项配置都将通过配置SqlSessionFactoryBean 来完成
* 先在datasource.properties中补充一条配置:
mybatis.mapper-locations=classpath:mapper/AdminMapper.xml
* 然后在配置类中创建SqlSessionFactoryBean类型的对象:
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource, @Value("${mybatis.mapper-locations}") Resource mapperLocations) {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(mapperLocations);
return sqlSessionFactoryBean;
}
- 获取新增的数据的自动编号的id
- 如果某数据的id是自动编号,当需要获取新增的数据的id时,需要先使得 插入的数据类型中有id对应的属性,则在Admin类中添加id属性:
- 接下来,在节点配置2个属性,分别是useGeneratedKeys和 keyProperty:
<insert id="insert" useGeneratedKeys="true"
原有代码
</insert>
* 当配置完成后,Mybatis执行此插入数据的操作后,会将自动编号的id赋 值到参数Admin admin的id属性中,以上keyProperty指的就是将自动编 号的值放回到参数对象的哪个属性中!