前言
在原来上一篇的基础上,我们需要新建一个数据库mybatis,在该数据库下新建一个user表,并插入数据,如下图所示!
还要新建一个实体类User
代码语言:javascript复制package com.mybatisstudy.pojo;
public class User {
private int id;
private String username;
private String sex;
private String address;
public User(String programmer, String man, String shangHai) {
this.username = programmer;
this.sex = man;
this.address = shangHai;
}
public User(int i, String programmer_1, String woman, String shenzhen) {
this.id = i;
this.username = programmer_1;
this.sex = woman;
this.address = shenzhen;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User[ "
"id=" id
", username='" username '''
", sex='" sex '''
", address='" address '''
" ]";
}
}
一、查询所有用户
1. 持久层添加查询所有方法
代码语言:javascript复制// 查询所有用户
List<User> findAll();
2. 在UserMapper.xml映射文件添加查询语句
代码语言:javascript复制<select id="findAll" resultType="com.mybatisstudy.pojo.User">
select * from user
</select>
3. 测试方法
在test包下新建一个测试类TestUserMapper.java,注意测试类需要插入一个Junit依赖
代码语言:javascript复制import com.mybatisstudy.mapper.UserMapper;
import com.mybatisstudy.pojo.User;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class TestUserMapper {
InputStream is = null;
SqlSession session = null;
UserMapper userMapper = null;
//前置方法,不必重复代码
@Before
public void before() throws Exception {
System.out.println("前置方法执行·············");
// (1)读取核心配置文件
is = Resources.getResourceAsStream("SqlMapConfig.xml");
// (2)创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// (3)SqlSessionFactoryBuilder对象获取SqlSessionFactory对象
SqlSessionFactory factory = builder.build(is);
// (4)SqlSessionFactory对象获取SqlSession对象
session = factory.openSession();
// (5)SqlSession对象获取代理对象
userMapper = session.getMapper(UserMapper.class);
}
//后置方法,释放资源
@After
public void after() throws Exception {
System.out.println("后置方法执行·············");
session.close();
is.close();
}
// 测试查询所有用户的方法
@Test
public void testFindAll() throws Exception{
// 代理对象执行方法
List<User> all = userMapper.findAll();
all.forEach(System.out::println);
}
4. 运行结果
OK,下面我们来详细解释一下前置方法,前置方法也是MyBatis核心对象和工作流程
二、MyBatis核心对象及工作流程
1. MyBatis核心对象
SqlSessionFactoryBuilder
SqlSession工厂构建者对象,使用构造者模式创建SqlSession工厂对象。
SqlSessionFactory
SqlSession工厂,使用工厂模式创建SqlSession对象。
SqlSession
该对象可以操作数据库,也可以使用动态代理模式创建持久层接口的代理对象操作数据库。
Mapper
持久层接口的代理对象,他具体实现了持久层接口,用来操作数据库。
2. MyBatis工作流程
创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder对象构建了SqlSessionFactory对象: 构造者模式
SqlSessionFactory对象生产了SqlSession对象:工厂模式
SqlSession对象创建了持久层接口的代理对象:动态代理模式
代理对象操作数据库
3. 使用SqlSession操作数据库
除了代理对象能够操作数据库,SqlSession也能操作数据库。只是这种方式在开发中使用的较少,接下来我们使用SqlSession操作数据库:
代码语言:javascript复制// SqlSession直接操作数据库
List<User> users = session.selectList("com.itbaizhan.mapper.UserMapper.findAll");
users.forEach(System.out::println);
这样也可以的,上面的是我们用的是调用接口方法执行。
三、添加其他常见方法
1. Mybatis新增用户
持久层添加新增用户方法
代码语言:javascript复制// 添加用户
void add(User user);
映射文件新增标签
代码语言:javascript复制 <insert id="add" parameterType="com.mybatisstudy.pojo.User">
insert into user(username,sex,address) values(#{username},#{sex},#{address})
</insert>
在测试类新增方法测试一下
注意:这里一定要执行提交事务方法
代码语言:javascript复制// 测试新增用户方法
@Test
public void testAdd() throws Exception {
User user = new User("programmer","man","ShangHai");
userMapper.add(user);
//提交事务
session.commit();
}
2. Mybatis用户更改
持久层添加用户信息更改方法
代码语言:javascript复制// 更新用户
void update(User user);
映射文件新增标签
代码语言:javascript复制 <update id="update" parameterType="com.mybatisstudy.pojo.User">
update user set
username = #{username},
sex = #{sex},
address = #{address}
where id = #{id}
</update>
在测试类新增方法测试一下
注意:这里一定要执行提交事务方法
代码语言:javascript复制// 测试更新用户方法
@Test
public void testUpdate() throws Exception{
User user = new User(7,"programmer_1","woman","Shenzhen");
userMapper.update(user);
//提交事务
session.commit();
}
3. Mybatis删除用户
持久层添加删除用户方法
代码语言:javascript复制// 删除用户
void delete(int userId);
映射文件新增标签
代码语言:javascript复制 <delete id="delete" parameterType="int">
delete from user where id = #{id}
</delete>
在测试类新增方法测试一下
注意:这里一定要执行提交事务方法
代码语言:javascript复制// 测试删除用户方法
@Test
public void testDelete() throws Exception{
int userId = 7;
userMapper.delete(userId);
// 提交事务
session.commit();
}
4. Mybatis根据用户id查询
持久层添加删除用户方法
代码语言:javascript复制// 根据ID查询用户
User findById(int userId);
映射文件新增标签
代码语言:javascript复制 <select id="findById" parameterType="int" resultType="com.mybatisstudy.pojo.User">
select * from user where id = #{id}
</select>
在测试类新增方法测试一下
注意:这里一定要执行提交事务方法
代码语言:javascript复制// 测试根据用户查询Id
@Test
public void testFindById() throws Exception{
int userId = 1;
User user = userMapper.findById(userId);
System.out.println(user);
}
OK,本次Mybatis入门案例就写到这里了,感谢大家的认真浏览到这里的小伙伴,如果觉得觉得对你有帮助就三连支持一下吧!
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!