MyBatis-CRUD操作

基于MAVEN创建MyBatis项目的方法参考:MyBatis初识+创建项目

CRUD操作

crud是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。

CRUD

注意几点:🔻

  1. SQL语句返回值类型。【完整的类名或者别名】
  2. 传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】
  3. 命名空间中唯一的标识符
  4. 接口中的方法名与映射文件中的SQL语句ID 一一对应
  5. id 就是对应namespace中的方法名
  6. parameterType 参数类型
  7. resultType sql语句执行的返回值类型
  8. 增删改都需要提交事务

Select

信息全查

在映射器接口中添加对应的方法:

public List<Student> GetAll();

在xml映射器中绑定该方法,添加sql语句:

<select id="GetAll" resultType="Student">
    select * from student
</select>

测试:

@Test
public void GetAll(){
    SqlSession sqlSession = MyBatisUtils.GetSqlSession();
    StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    List<Student> list = studentMapper.GetAll();
    for (Student student : list){
        System.out.println(student);
    }
    sqlSession.close();
}

根据ID查学生

在映射器接口中添加对应的方法:

public Student GetId(int id);

在xml映射器中绑定该方法,添加sql语句:

<select id="GetId" resultType="Student" parameterType="int">
    select * from student where stu_id= #{stu_id}
</select>

测试:

@Test
public void GetId(){
    SqlSession sqlSession = MyBatisUtils.GetSqlSession();
    StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    Student student = studentMapper.GetId(9);
    System.out.println(student);
    sqlSession.close();
}

根据Name模糊查询

在映射器接口中添加对应的方法:

public List<Student> GetName(String stu_username);

在xml映射器中绑定该方法,添加sql语句:

<select id="GetName" resultType="Student">
    select * from student where stu_username like #{stu_username}
</select>

测试:

@Test
public void GetName(){
    SqlSession sqlSession = MyBatisUtils.GetSqlSession();
    StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    List<Student> list = studentMapper.GetName("%阿亚%");
    for (Student student : list){
        System.out.println(student);
    }
    sqlSession.close();
}

⚠️:如果在sql语句中拼接通配符,会引起sql注入!

根据Name和Password查询(@Param方法)

在接口中定义方法时就传递参数:

  1. 在接口方法的参数前添加@Param属性
  2. SQL语句编写时,直接去@Param中设置的值,且不需要在设置参数类型
public Student getIdName(@Param("id") int id,@Param("name") String name);
<select id="getIdName" resultType="com.eneity.Student">
    select * from Student where id=#{id} and name=#{name}
</select>

根据Name和Password查询(Map方法)

在映射器接口中添加对应的方法,参数直接传递Map:

public List<Student> GetNamePass(Map<String,Object> map);

在xml映射器中绑定该方法,添加sql语句,参数类型为map:

<select id="GetNamePass" resultType="Student" parameterType="map">
    select * from student where stu_username= #{stu_username} and stu_password = #{stu_password}
</select>

测试,在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!:

@Test
public void GetNamePass(){
    SqlSession sqlSession = MyBatisUtils.GetSqlSession();
    StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    Map<String, Object> map = new HashMap<>();
    map.put("stu_username","张三");
    map.put("stu_password","123");
    List<Student> list = studentMapper.GetNamePass(map);
    for (Student student : list){
        System.out.println(student);
    }
    sqlSession.close();
}

Map传递参数,直接在sql中取出key即可![ parameterType=“map”]

对象传递参数,直接在sql中取出对象即可![ parameterType=“Object”]

⚠️: 只有一个基本类型参数的情况下,可以直接在sql中取到!

🌈: 如果参数过多,我们可以考虑直接使用Map实现,如果参数比较少,直接传递参数即可

Insert

插入学生

在映射器接口中添加对应的方法:

public int Insert(Student student);

在xml映射器中绑定该方法,添加sql语句:

<insert id="Insert" parameterType="Student">
    insert into student(stu_username, stu_password) values (#{stu_username},#{stu_password})
</insert>

测试:

@Test
public void Insert(){
    SqlSession sqlSession = MyBatisUtils.GetSqlSession();
    StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    Student student = new Student("张三","123");
    int i = studentMapper.Insert(student);
    System.out.println(i);
    sqlSession.commit();
    sqlSession.close();
}

Update

修改学生信息

在映射器接口中添加对应的方法:

public int Update(Student student);

在xml映射器中绑定该方法,添加sql语句:

<update id="Update" parameterType="Student">
    update student set stu_username = #{stu_username} , stu_password = #{stu_password} where stu_id = #{stu_id}
</update>

测试:

@Test
public void Update(){
    SqlSession sqlSession = MyBatisUtils.GetSqlSession();
    StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    Student student = new Student("39","李四","321");
    int i = studentMapper.Update(student);
    System.out.println(i);
    sqlSession.commit();
    sqlSession.close();
}

Delete

根据ID删除学生

在映射器接口中添加对应的方法:

public int Delete(int id);

在xml映射器中绑定该方法,添加sql语句:

<delete id="Delete" parameterType="int">
    delete from student where stu_id = #{stu_id}
</delete>

测试:

@Test
public void Delete(){
    SqlSession sqlSession = MyBatisUtils.GetSqlSession();
    StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    int i = studentMapper.Delete(9);
    System.out.println(1);
    sqlSession.commit();
    sqlSession.close();
}

写在最后

需要注意几点:

  • 所有的增删改操作都需要提交事务!
  • 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
  • 有时候根据业务的需求,可以考虑使用map传递参数!
  • 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!

常见错误:

  • 标签不能匹配错
  • resource绑定mapper,需要使用路径
  • 程序配置文件必须符合规范
  • NullPointerException,没有注册到资源
  • 输出的xml文件中存在中文乱码问题
  • maven资源没有导出问题

 


❤️ END ❤️
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JOEL-T99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值