在实现了Mybatis的环境搭建和第一个Mybatis程序之后,这篇博客就是来记录基本的增删改查步骤。关于Mybatis环境搭建,可以参考我的前一篇博客:https://blog.csdn.net/weixin_43923436/article/details/110421441
查找:
select标签是mybatis中最常用的标签之一,就是对应数据库的查找功能:
首先在接口中添加抽象方法,比如按照id查找:
public interface UserMapper {
//根据id查询用户
User selectUserById(int id);
}
在xml中配置时,需要注意namespace,一定要指向你写的接口,id就是你写的查找的抽象方法的方法名,resultType是返回值的类型,Mybatis会自动将查询结果封装成对象返回给你。#{}中是获取传入参数的值,这里是是传入参数的名字,抽象方法中是int id,这里就是id。#{}中也可以是传入对象的属性或者map的key,后文中会详细介绍。
<?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.dao.UserMapper">
<select id="selectUserById" resultType="com.kuang.pojo.User">
select * from user where id = #{id}
</select>
</mapper>
测试:
SqlSession session = MybatisUtils.getSession();是获取数据库连接,session.close();是关闭连接,这两步是固定步骤,UserMapper mapper = session.getMapper(UserMapper.class)是获取你写的接口的实例,然后用这个实例调用你写的查询方法就可以获取查询结果了:User user = mapper.selectUserById(1);
@Test
public void tsetSelectUserById() {
SqlSession session = MybatisUtils.getSession(); //获取SqlSession连接
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(1);
System.out.println(user);
session.close();
}
在数据库中添加:
接口中的抽象方法:
int addUser(User user);
在xml中配置,注意,这里是insert标签,不是select标签了。parameterType是传入参数的类型,这里是user对象。
<insert id="addUser" parameterType="com.kuang.pojo.User">
insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
测试:
注意,除了查询操作,其余的增删改都需要提交事务才是成功:session.commit()。也就是说,测试时,除了创建连接和关闭连接这两步必须操作外,在增删改时,还必须加上提交事务。
@Test
public void testAddUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User(5,"王五","zxcvbn");
session.commit(); //提交事务,重点!不写的话不会提交到数据库
session.close();
}
改:
接口中抽象方法:
//修改一个用户
int updateUser(User user);
xml中配置,update标签,这里的#{}中就是使用的传入参数user对象中的属性,和user对象中属性名相同就能获取相应属性的值。
<update id="updateUser" parameterType="com.kuang.pojo.User">
update user set name=#{name},pwd=#{pwd} where id = #{id}
</update>
删除:
接口中抽象方法:
//根据id删除用户
int deleteUser(int id);
xml中配置,用delect标签:
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
map传参:
基本传参:#{}中直接就是参数的名字。
对象传参:传入的是个对象,#{}中就是对象的属性。
如果对象中属性特别多,可是需要的查询操作却只需要一条属性就够,那样的话,封装一个对象传参的话,封装对象会变得很麻烦,并且对象的大部分属性根本用不到,却还要封装进去,很麻烦,因此。实际工作中,大部分公司会选择用map来进行传参:
封装map对象,只需要封装会用到的属性就行:
Map<String, Object> map = new HashMap<String, Object>();
map.put("username","小明");
map.put("pwd","123456");
接口中的抽象方法:
User selectUser(Map<String,Object> map);
xml中配置:
<select id="selectUser" parameterType="map" resultType="com.User">
select * from user where name = #{username} and pwd = #{pwd}
</select>