目录
一.Mybatis特性
二.常见持久层技术的比较
三.搭建Mybaits环境
四.使用Mybatis
五.通过Mybatis实现增删改
六.实现数据库的查询操作
定制化SQL:MyBatis允许开发人员编写、优化和管理自定义的SQL语句,可以满足复杂查询和存储过程等高级操作的需求。
避免JDBC代码:MyBatis抽象了JDBC底层的繁琐操作,开发人员无需手动设置参数和获取结果集,通过配置文件或注解即可完成数据库操作。
灵活的映射配置:MyBatis通过简单的XML配置文件或者注解来实现对象与数据库记录之间的映射关系,将接口和Java的POJO对象映射到数据库表中的记录。
高度可定制:MyBatis提供了丰富的配置选项和插件机制,可以按照项目需求进行灵活的定制和扩展。开发人员可以根据具体情况选择合适的配置方式。
JDBC:
Hibernate和JPA:
MyBatis:
使用工具Maven idea Mysql
1.配置
在maven的pom.xml中需要配置三个模块,mysql-connect-java、mabatis、junit
配置如下:
mysql
mysql-connector-java
8.0.33
org.mybatis
mybatis
3.5.7
junit
junit
RELEASE
test
2.构建连接数据库的xml
在resources中(如果没有resource则创建一个)创建名称为mybatis-config.xml的配置文件
配置内容如下
1.创建实体类
在完成了搭建环境后,在Java下的com下创建目录pojo,创建一个需要与数据库映射对应的类,比如创建一个用户类
创建好后设置好构造函数、getter、toString,如下
package com.alphamilk.mybatis.pojo;
public class User {
// 设置名字
private String name;
// 设置年龄
private int age;
// 设置邮箱地址
private String email;
// 设置身份id
private int id;
public User(String name, int age, String email, int id) {
this.name = name;
this.age = age;
this.email = email;
this.id = id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getEmail() {
return email;
}
public int getId() {
return id;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
", id=" + id +
'}';
}
}
2.在数据库中创建同样创建一样的表
Sql语言如下:
create table table_user
(
name varchar(10) null,
age int null,
email varchar(20) null,
id int null
);
3.创建业务接口类
首先在com下创建一个mapper包,里面再创建一个接口 创建映射接口(User对应的就是UserMapper)
4.创建接口实现映射
创建接口后,为了实现接口的功能,又需要实现java与sql的分离,则需要用xml配置实现,在resource包下创建一个mappers包,写一个对应的xml
insert into table_user value ('何生',20,'[email protected]',001)
5.实现接口映射后,就需要将映射的xml导入到mybatis-config.xml中
5.最后创建测试类,测试Mybatis是否能够正常运行
创建MybatisTest类
内容如下:
package com.alphamilk.mybatis;
import com.alphamilk.mybatis.mapper.UserMapper;
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;
public class MybatisTest {
@Test
public void Test() throws IOException {
// 创建核心输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// 获取Session会话对象,会话对象用以提供
SqlSession sqlSession = sqlSessionFactory.openSession();
// 创建动态代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 通过代理对象调用方法insertUser
int result = mapper.insertUser();
// 执行完后需要记得提交事务,才会保留内容到数据库
sqlSession.commit();
// 执行完后关闭会话对象
System.out.println(result);
sqlSession.close();
}
}
注意用的Resource是包org.aphache.ibatis.io
执行后可以在数据库中查看表
可以看到正常插入进去了
增删查改,除了查,其他操作跟上述一样。
这里展示其源码
由于Test测试类中有太复杂的操作,所以在com目录下创建了一个util工具类,类中实现一个方法就是给我们返回SqlSession操作数据库对象。
代码如下
package com.alphamilk.mybatis.util;
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.InputStream;
public class MybatisUtil {
public static SqlSession getSession(){
SqlSession sqlSession =null;
try {
// 配置核心配置输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
// 获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// 获取sqlSession对象
sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}catch (Exception e){
e.printStackTrace();
}
return sqlSession;
}
}
由于需要实现删该的方法,所以在接口中需要实现方法增加
package com.alphamilk.mybatis.mapper;
public interface UserMapper {
// 实现用户插入
public int insertUser();
// 实现用户信息修改
public int UpdateUser();
// 实现用户信息消除
public int DeleteUser();
}
对应的映射也需要增加
insert into table_user value ('何生',20,'[email protected]',001)
update table_user set name ='黄小龙'where id=1
delete from table_user where name='黄小龙'
最后测试类实现
package com.alphamilk.mybatis;
import com.alphamilk.mybatis.mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class MybatisTest {
@Test
public void Test(){
SqlSession sqlSession = null;
sqlSession = com.alphamilk.mybatis.util.MybatisUtil.getSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 执行insert方法
// mapper.insertUser();
// 执行修改方法
mapper.UpdateUser();
// 执行删除方法
// mapper.DeleteUser();
}
}
实现数据修改效果
实现数据删除效果
由于数据库查询的操作需要返回的是数据的结果
在设置xml时候,需要而外设置参数resultType 或者 resultMap
测试类内容
package com.alphamilk.mybatis;
import com.alphamilk.mybatis.mapper.UserMapper;
import com.alphamilk.mybatis.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class MybatisTest {
@Test
public void Test(){
SqlSession sqlSession = null;
sqlSession = com.alphamilk.mybatis.util.MybatisUtil.getSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 执行insert方法
// mapper.insertUser();
// 执行修改方法
// mapper.UpdateUser();
// 执行删除方法
// mapper.DeleteUser();
// 执行通过id查询
User user = mapper.getUserById();
System.out.println(user);
sqlSession.commit();
sqlSession.close();
}
}
如果有多个结果则返回时候需要用集合接收
当前xml配置
insert into table_user value ('何生',20,'[email protected]',001)
update table_user set name ='黄小龙'where id=1
delete from table_user where name='黄小龙'
测试类内容
package com.alphamilk.mybatis;
import com.alphamilk.mybatis.mapper.UserMapper;
import com.alphamilk.mybatis.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.Iterator;
import java.util.List;
public class MybatisTest {
@Test
public void Test(){
SqlSession sqlSession = null;
sqlSession = com.alphamilk.mybatis.util.MybatisUtil.getSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 执行insert方法
// mapper.insertUser();
// 执行修改方法
// mapper.UpdateUser();
// 执行删除方法
// mapper.DeleteUser();
// 执行通过id查询
// User user = mapper.getUserById();
// System.out.println(user);
// 查询所有用户的信息
List list = mapper.getUserAll();
Iterator iterator = list.listIterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
sqlSession.commit();
sqlSession.close();
}
}
深度了解Mybatis的核心配置
Mybatis的核心配置_Alphamilk的博客-CSDN博客