目录
一. Mybatis介绍
二. Mybatis搭建
1. 导入Mybatis依赖的jar包
2. 创建Mybatis全局配置文件
3. 定义一个接口
4. 创建sql映射文件
5. 测试
* MyBatisX插件安装
三. 数据库连接池
四. 参数传递
1. 将数据封装到对象中
2. 使用@Param注解
五. 数据库事务
六. 单元测试
七. Mybatis基础操作
1. 新增操作
2. 删除操作
3. 修改操作
4. 单表查询
一. Mybatis介绍
▐ Mybatis的历史
• Mybatis原是apache下面的一个开源项目,起初叫ibatis,2010年开发团队转移到谷歌旗下,改名为Mybatis
▐ Mybatis介绍
• Mybatis是一款优秀的持久层框架(dao层)
• Mybatis是对JDBC进行了封装,避免了几乎所有的JDBC代码手动设置参数以及手动获取结果集的操作
• Mybatis将JDBC中的接口进行封装,提供了它自己的类和接口实现
• Mybatis可以使用xml配置和注解的方式,将数据库中的数据自动映射到java对象中,是一种ORM实现(对象关系映射)
• Mybatis还提供了动态sql和数据缓存
二. Mybatis搭建
1. 导入Mybatis依赖的jar包
创建maven项目,并在pom.xml文件中导入Mybatis所依赖的jar包,由于Mybatis是对JDBC代码进行了封装,所以还需要导入mysql数据库驱动包,如图所示:
<dependencies>
<!-- mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
</dependencies>
2. 创建Mybatis全局配置文件
右键resources目录,选择File,创建一个xml文件,此文件用来写Mybatis全局配置相关的代码,如图所示:
创建之后将下面的代码复制粘贴到此配置文件中(mybatis.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>
<settings>
<!-- 日志 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!-- 开启数据库列名与java属性名转换,例如user_name userName -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="com.ffyc.mybatispro.model"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai" />
<property name="username" value="root" />
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 配置sql映射文件-->
<mappers>
</mappers>
</configuration>
➱注意将参数修改为自己的数据库连接信息
代码解读:
3. 定义一个接口
➱ 我们以通过id查询管理员信息为例,数据库表如图所示 :
➱ 表创建代码:
-- 创建一张表(admin) CREATE TABLE admin( id INT PRIMARY KEY AUTO_INCREMENT, account VARCHAR(20) UNIQUE, PASSWORD VARCHAR(50) NOT NULL, gender CHAR(1) )
➱ 当然还需要创建一个实体类:(Admin)
package com.ffyc.mybatispro.model; public class Admin { private int id; private String account; private String password; private String gender; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
4. 创建sql映射文件
与全局配置文件一样,sql映射文件同样在resources目录下创建,同样是xml文件,并且通常写在mappers目录下,如图所示:
<?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="com.ffyc.mybatispro.dao.AdminDao">
<select id="findAdminById" parameterType="int" resultType="Admin">
select * from admin where id = #{id}
</select>
</mapper>
创建完sql映射文件后还需要再全局配置文件中进行配置:
5. 测试
import com.ffyc.mybatispro.dao.AdminDao;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public class Test1 {
public static void main(String[] args) throws IOException {
//1.Mybatis读取配置文件
Reader reader = Resources.getResourceAsReader("mybatis.xml");
//2.创建SqlSessionFactory,负责创建SqlSession(负责连接数据库的会话对象,,类似Connection)
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//3.创建SqlSession
SqlSession sqlSession =sessionFactory.openSession();
//4.创建接口的代理对象
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
adminDao.findAdminById(1);
//提交数据库事务
sqlSession.commit();
//关闭连接
sqlSession.close();
}
}
* MyBatisX插件安装
三. 数据库连接池
连接数据库后,每次访问数据库时都需要创建一个Connection连接对象,并且用完后关闭销毁,若在访问量很大的情况下,这样每次创建新的连接对象是很耗时的,所以可以使用数据库连接池,在池中事先创建一些连接对象(Connection),当用户访问时直接从池中获取一个连接对象,并且用完后不会销毁,而是继续返还到池中,从而减少频繁地创建和销毁连接对象,提高效率!
在Mybatis全局配置文件中对应代码如图:
四. 参数传递
上文中通过id查询管理员信息的案例中,我们只需要传入单个参数(id)即可,属于单个参数的传递,那么要是多个参数该怎么传递呢?
1. 将数据封装到对象中
解决方法1:封装到对象中,通过对象中定义的属性传参
以登录为例:需要传入account和password两个参数
2. 使用@Param注解
解决方法2:使用@Param注解
五. 数据库事务
• 简单讲,事务管理就是一次对数据库操作过程中,执行多条sql的管理。
• 事务只针对新增,修改,删除操作,查询是不需要提交事务的。
• 当执行一系列数据库操作时,JDBC事务管理器会确保要么所有操作都成功提交,要么在出现错误时全部回滚,以保证数据的完整性和一致性。
• 例如生活中的转账操作,要从A账户向B账户转200元,那么就需要向数据库发送2条sql
sql1:A账户 -200 ①
其它代码(可能出现异常) ②
sql2:B账号 +200 ③
当JDBC把sql代码发送给数据库时,此时不会立刻执行,而是把所有操作都成功执行完后再提交事务。
若每执行一条sql就提交一次事务,那么如果①成功执行,②出现异常,导致③没有执行,但由于①成功执行后提交了事务,会出现A账号-200,B账户没有+200的情况!
六. 单元测试
单元测试就是以方法为单位进行测试。
首先需要在maven项目的pom.xml文件中导入junit组件,然后在要测试的方法上添加@Test注解标签即可。
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>provided</scope>
</dependency>
七. Mybatis基础操作
1. 新增操作
添加成功!
<!-- 映射文件新增操作sql语句-->
<insert id="insertAdmin" parameterType="Admin">
insert into admin (account,password,gender)values(#{account},#{password},#{gender})
</insert>
2. 删除操作
<!-- 删除操作-->
<delete id="deleteAdmin" parameterType="int">
delete from admin where id=#{id}
</delete>
3. 修改操作
<!-- 修改操作-->
<update id="updateAdmin" parameterType="Admin">
update admin set account=#{account},password=#{password} where id=#{id}
</update>
4. 单表查询
简单的单表查询在案例中已经给大家演示了,这里不做具体解读了,只分享代码:
//定义接口
Admin findAdminById(int id);
//映射sql
<select id="findAdminById" parameterType="int" resultType="Admin">
select * from admin where id = #{id}
</select>
//测试类
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession =sessionFactory.openSession();
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
adminDao.findAdminById(1); //单个参数传递
//查询操作不需要提交事务
关于多表的关联查询内容涉及较多,会在下一篇文章中详细讲解...
本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见
海漫浩浩,我亦苦作舟!大家一起学习,一起进步! 本人微信:g2279605572(欢迎大家与我交流)