MyBatis(二):基础CRUD
2024-09-07 10:04:51
本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出1便就懂!b站搜索狂神说即可
https://space.bilibili.com/95256449?spm_id_from=333.788.b_765f7570696e666f.2
MyBatis中的基本CRUD
接上一篇博客:https://www.cnblogs.com/renzhongpei/p/12559788.html
修改图中的类
Mapper接口
package com.rzp.dao;
import com.rzp.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> getUserList();
//根据ID查询用户
User getUserById (int id);
//insert 一个用户
void addUser(User user);
//update 一个用户
void updateUser(User user);
//delete 一个用户
void deleteUser(int id);
}
Mapper.xml
<?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.rzp.dao.UserMapper">
<select id="getUserList" resultType="com.rzp.pojo.User">
select * from mybatis.user
</select>
<!--id是对应的方法名字,parameterType是输入参数的类型-->
<select id="getUserById" resultType="com.rzp.pojo.User" parameterType="int">
<!-- #{id}是实体类的属性,只要属性名字一样就能完成-->
select * from mybatis.user t where t.id = #{id}
</select>
<insert id="addUser" parameterType="com.rzp.pojo.User" >
insert into mybatis.user (id,name,pwd) value (#{id},#{name},#{pwd});
</insert>
<update id="updateUser" parameterType="com.rzp.pojo.User">
update mybatis.user set name = #{name}, pwd = #{pwd} where id = #{id};
</update>
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id = #{id};
</delete>
</mapper>
测试程序UserDaoTest
按方法测试即可
//按ID查询
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
}catch (Exception e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
//增删改需要提交事务
//增加
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(6,"rzp3","312");
mapper.addUser(user);
int x = 1/0;
//提交事务
sqlSession.commit();
}catch (Exception e){
e.printStackTrace();
//错误则回滚,其实不需要,程序已经封装好会回滚
sqlSession.rollback();
}finally {
sqlSession.close();
}
}
//更新
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(3,"cys","31112");
mapper.updateUser(user);
//提交事务
sqlSession.commit();
}catch (Exception e){
e.printStackTrace();
//错误则回滚,其实不需要,程序已经封装好会回滚
sqlSession.rollback();
}finally {
sqlSession.close();
}
}
//删除
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(5);
//提交事务
sqlSession.commit();
}catch (Exception e){
e.printStackTrace();
//错误则回滚,其实不需要,程序已经封装好会回滚
sqlSession.rollback();
}finally {
sqlSession.close();
}
}
注意:Mapper.xml配置错误(比如类名、方法名写错了)也会导致sqlSession生成的时候就报错!这个时候IDEA提示的错误会链接向sqlSession生成那一行。
使用Map来简化传参的操作
数据库字段多的时候,如果只是修改其中一个两个字段,但是如果用上文的UPDATE,就要new一个实体类,操作比较麻烦。这时候可以使用map。
UserMapper接口
//万能的map
void addUser2(Map<String,Object> map);
UserMapper.xml
<insert id="addUser2" parameterType="map" >
<!--传入参数是map,用#{}取参数的时候就是按照map的key值来获取-->
insert into mybatis.user (id,name,pwd) value (#{userid},#{username},#{password});
</insert>
测试类
//更新
@Test
public void updateUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
try{
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map map = new HashMap();
map.put("userid",5);
map.put("username","cyy2");
map.put("password","3212");
mapper.addUser2(map);
sqlSession.commit();
}catch (Exception e){
}finally {
sqlSession.close();
}
}
这里虽然使用insert作为例子,而且传了所有参数,但是显然改成update并且只传ID和要修改的参数也是可以的。
同理,也可以用在select中,传多个参数查询
Mybatis中的Like查询
模糊查询的两种写法
在执行的时候传递通配符
User user = mapper.getUserById("%1%");
在xml文件中使用通配符
select * from mybatis.user t where t.id like "%"#{id}"%"
最新文章
- js判断用户是否正在滚动滚动条,滚动条滚动是否停止
- mysql 有报错 ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
- ubuntu 终端快捷键
- PHP 生成随机字符串与唯一字符串
- 开机一会,出现长时间闪屏,并且跳出SendRpt error
- Android实例-使用电话拨号器在移动设备上(官方)(XE8+小米2)
- Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式
- vs2008生成的各种文件
- 【转】深入理解篇UIScrollerView
- Unity-资源
- 【2016北京集训测试赛(十)】 Azelso (期望DP)
- You And Me 不见不散!
- MySQL 是如何解决幻读的
- C++实验三
- Java反射操作成员变量 Class can not access a member with modifiers ";*";
- 自己实现ArrayList
- CF 633 E. Binary Table
- [Python] 01 - Number
- SNP问题大集锦
- PHP自定义函数&;数组
热门文章
- Redis使用指南
- C++ 动态链接库 dll的加载
- this.current = params.page || 1 (前提是params对象一定要存在)
- MySQL笔记(4)-- 索引优化
- 手动实现AJAX
- cmdb客户端采集数据的完善
- u库前戏
- SpringMVC最详细笔记partⅠ
- Codeforces Round #567 (Div. 2) B. Split a Number
- Mybatis详解系列(一)--持久层框架解决了什么及如何使用Mybatis