mybatis-CRUD操作(增删改查
前提
每一个Dao.xml或者说Mapper.xml都要绑定映射在sqlMapConfig.xml的数据库配置文件中
<mappers>
<!-- 使用配置文件(需要自己创建……配置……)-->
<mapper resource="Dao.xml的路径(用/分级"/>
<!-- 使用注解
<mapper class="Dao类的路径(用.分级"/>
-->
</mappers>
Dao.xml文件需要将对应的Dao类绑定在命名空间
<!--命名空间和Dao类绑定-->
<mapper namespace="Dao类的路径(用.分级">
<select id="Dao类中的方法名" resultType="返回的实体类型">
select 查询语句;
</select>
</mapper>
Mybatis工具类
为了调用方便我们准备一个工具类
package com.sjj.utils;
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.InputStream;
public class MybatisUtils {
private static InputStream in;
private static SqlSessionFactory factory;
static {
try {
// 1,读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2,创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 3,获取SqlSession对象
public static SqlSession getSqlSession(){
return factory.openSession();
}
}
查询:SELECT
基本样式
<select id="方法名l" parameterType="参数类型" resultType="返回类型">
select 查询语句;
</select>
实践
实现一个方法:根据性别查找用户
- 在用户持久层接口UserDao中添加方法
// 根据sex查找用户
List<User> findUserBySex(String sex);
- 在UserDao.xml的命名空间中添加一条select语句
<mapper namespace="com.sjj.dao.UserDao">
<select id="findUserBySex" parameterType="String" resultType="com.sjj.domain.User">
SELECT * FROM user WHERE sex = #{sex}
</select>
</mapper>
- 查看数据库配置文件中是否绑定了UserDao.xml文件
<!-- 指定映射文件,dao的配置文件 -->
<mappers>
<!-- 使用配置文件(需要自己创建……配置……)-->
<mapper resource="com/sjj/dao/UserDao.xml"/>
<!-- 使用注解
<mapper class="com.sjj.dao.UserDao"/>
-->
</mappers>
- 编写测方法
@Test
public void testFindUserBYSex(){
// 3,获取SqlSession对象
SqlSession session = MybatisUtils.getSqlSession();
// 4,使用SqlSession创建dao接口的代理对象
UserDao userdao = session.getMapper(UserDao.class);
// 5,使用代理对象执行接口
List<User> users = userdao.findUserBySex("女");
for(User user:users){
System.out.println(user);
}
// 释放资源
session.close();
}
增加:INSERT
基本样式
<insert id="方法名" parameterType="参数类型">
insert into 语句;
</insert>
实践
由于前面已经将UserDao.xml绑定在数据库配置文件中,接下来就不需要重复查看
不过新添加一个xml文件一定要记得绑定哦
实现一个方法:插入一个用户
- 在用户持久层接口UserDao中添加方法
// 添加一个用户
int addUser(User user);
- 在UserDao.xml的命名空间中添加一条insert语句
<insert id="addUser" parameterType="com.sjj.domain.User">
insert into user (id,username,birthday,sex,address) values (#{id},#{username},#{birthday},#{sex},#{address});
</insert>
- 编写测试方法
@Test
public void testAddUser(){
SqlSession session = MybatisUtils.getSqlSession();
UserDao userdao = session.getMapper(UserDao.class);
User user = new User(99, "青眼白龙", new Date(), "女", null);
userdao.addUser(user);
// **注意增删改需要提交事务**
session.commit();
session.close();
}
更新/修改:UPDATE
基本样式
<update id="方法名" parameterType="参数">
update 语句;
</update>
实践
实现一个方法:
- 在用户持久层接口UserDao中添加方法
// 通过id更新用户
int updateUserById(User user);
- 在UserDao.xml的命名空间中添加一条update语句
<update id="updateUsersById" parameterType="com.sjj.domain.User">
update user
set address = #{address},username=#{username},birthday=#{birthday},sex=#{sex}
where id = #{id};
</update>
- 编写测试方法
@Test
public void testUpUserById(){
SqlSession session = MybatisUtils.getSqlSession();
UserDao userdao = session.getMapper(UserDao.class);
User user = new User(99, "青眼白龙", new Date(), "女", "古埃及");
int ans = userdao.updateUserById(user);
if(ans>0)
System.out.println("更新成功!");
// **注意增删改需要提交事务**
session.commit();
session.close();
}
删除:DELETE
基本样式
<delete id="方法名" parameterType="参数类型">
delete 语句;
</delete>
实践
实现一个方法:
- 在用户持久层接口UserDao中添加方法
// 通过id删除用户
int deleteUserById(int id);
- 在UserDao.xml的命名空间中添加一条delete语句
<delete id="deleteUserById" parameterType="int">
delete
from user
where id = #{id};
</delete>
- 编写测试方法
@Test
public void testDeleteUserById(){
SqlSession session = MybatisUtils.getSqlSession();
UserDao userdao = session.getMapper(UserDao.class);
int ans = userdao.deleteUserById(99);
if(ans>0)
System.out.println("删除成功!");
// **注意增删改需要提交事务**
session.commit();
session.close();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术