一、Mybatis简介
1.1 什么时Mybatis
- Mybatis是一个优秀的基于java的持久层框架。
- Mybatis通过xml或注解的方式将要执行的各种statement配置起来。
- Mybatis采用ORM(Object Relational Mapping)对象关系映射思想解决了实体和数据库映射的问题。
- Mybatis框架执行sql并将结果映射为java对象并返回。
二、Mybatis的快速入门
2.1 Mybatis开发步骤:
①:添加MyBatis和mysql的坐标
②:创建user数据表
③:编写User实体类
④:编写映射文件UserMapper.xml
⑤:编写核心文件SqlMapConfig.xml
⑥:编写测试类
①:添加MyBatis和mysql的坐标
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
②:创建user数据表
--创建表
create table user(
id int NOT NUll auto_increment,
username varchar(50),
password varchar(50),
primary key (id)
)engine=InnoDB;
--插入测试数据
insert into user(username, password) values("张三", "123"),
("李四", "456"),
("王五", "789");
③:编写User实体类
package domain;
public class User {
private Integer id;
private String username;
private String password;
//get和set方法省略。。。
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
④:编写映射文件UserMapper.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="UserMapper">
<select id="findAll" resultType="domain.User">
select * from user;
</select>
</mapper>
⑤:编写核心文件SqlMapConfig.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
⑥:编写测试类
package test;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* @create 2021-11-06 10:42
*/
public class MyBatisTest {
@Test
public void test1() throws IOException {
//获取核心配置文件
InputStream resource = Resources.getResourceAsStream("sqlMapConfig.xml");
//获取session工厂对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resource);
//获得session会话对象
SqlSession sqlSession = sessionFactory.openSession();
//执行操作 参数 namespace + id
List<Object> userList = sqlSession.selectList("UserMapper.findAll");
//打印数据
System.out.println(userList);
//释放资源
sqlSession.close();
}
}
控制台显示效果:
三、Mybatis的映射文件概述
四、MyBatis的增删改查操作
4.1 insert插入操作
4.1.1 开发步骤:
①:编写映射文件UserMapper.xml
②:测试
①:编写映射文件UserMapper.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="UserMapper">
<!-- 插入语句 -->
<insert id="save" parameterType="domain.User">
insert into user values(#{id}, #{username}, #{password});
</insert>
</mapper>
测试
//插入测试
@Test
public void test2() throws IOException {
//模拟对象
User user = new User();
user.setUsername("赵六");
user.setPassword("987");
//获取核心配置文件
InputStream resource = Resources.getResourceAsStream("sqlMapConfig.xml");
//获取session工厂对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resource);
//获得session会话对象
SqlSession sqlSession = sessionFactory.openSession();
//执行操作 参数 namespace + id
int row = sqlSession.insert("UserMapper.save", user);
//mybatis执行更新操作 提交事务
sqlSession.commit();
System.out.println("受影响的行数:" + row);
//释放资源
sqlSession.close();
}
控制台显示效果:
4.1.2 插入操作总结
- 插入语句使用insert标签
- 在映射文件中使用parameterType属性指定要插入的数据类型
- Sql语句中使用#{实体属性名}方式引用实体中的属性值
- 插入操作使用的API是sqlSession.insert(“命名空间.id”, 实体对象)
- 插入操作涉及数据库数据变化,所以要使用sqlSession对象显式的提交事务,即sqlSession.commit();
4.2 update更新操作
4.2.1 开发步骤:
①:编写映射文件UserMapper.xml
②:编写测试代码
①:编写映射文件UserMapper.xml
<mapper namespace="UserMapper">
<!-- 修改操作 -->
<update id="update" parameterType="domain.User">
update user set username=#{username}, password=#{password} where id=#{id}
</update>
</mapper>
②:编写测试代码
//修改操作
@Test
public void test3() throws IOException {
User user = new User();
user.setId(1);
user.setUsername("张三");
user.setPassword("abc");
//获取核心配置文件
InputStream stream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作 参数namespace + id
int roms = sqlSession.update("UserMapper.update", user);
//mybatis执行更新操作 提交事务
sqlSession.commit();
System.out.println("受影响的行数:" + roms);
//释放资源
sqlSession.close();
}
4.2.2 修改操作总结
- 修改语句使用update标签
- 修改操作使用的API是sqlSession.update(“命名空间+id”, 实体对象);
- 需要使用sqlSession.commit()手动提交事务
4.3 delete删除操作
4.3.1 开发步骤:
①:编写映射文件UserMapper.xml
②:编写测试代码
①:编写映射文件UserMapper.xml
<mapper namespace="UserMapper">
<!-- 删除操作 -->
<delete id="delete" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
</mapper>
②:编写测试代码:
//删除操作
@Test
public void test4() throws IOException {
Integer id = 15;
//获取核心配置文件
InputStream stream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获取session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作 参数namespace + id
int rows = sqlSession.delete("UserMapper.delete", id);
//mybatis执行更新操作 提交事务
sqlSession.commit();
System.out.println("受影响的行数:" + rows);
//释放资源
sqlSession.close();
}
4.3.2 删除操作总结
- 删除语句使用delete标签
- Sql语句中如果是单个where筛选条件使用#{任意字符串}方式引用传递的单个参数
- Sql语句中如果是多个where筛选条件使用#{实体属性名}方式引用传递的单个参数
- 删除操作语句中如果是单个where筛选条件使用API是sqlSession.delete(“命名空间+id”, Object);
- 删除操作语句中如果是多个where筛选条件使用API是sqlSession.delete(“命名空间+id”, 实体对象);