MyBatis02:CRUD操作
CRUD操作
namespace
这个是命名空间,不可缺少,更不能写错
配置文件中namespace中的名称为对应Mapper接口或者Dao接口的全限定类名,完整包名,必须一致!
Select(用于查询的标签)
根据id查询用户
1、 在UserMapper中添加对应方法
public interface UserMapper { //查询全部用户 List<User> selectUser(); //根据id查询用户 User selectUserById(int id); }
2、在UserMapper.xml中添加Select语句
<select id="selectUserById" resultType="com.pp.pojo.User"> select * from user where id = #{id} </select>
3、在测试类中测试
@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(); }
根据密码 和 名字 查询用户
- 直接在方法中传递参数
1、在接口方法的参数前加上@Param属性
2、SQL语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型
//通过密码和名字查询用户 User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);
2.使用Map
1、在接口方法中,参数直接传递Map
User selectUserByNP2(Map<String,Object> map);
2、编写SQL语句的时候,需要传递阐述类型,参数类型为map
<select id="selectUserByNP2" parameterType="map" resultType="com.kuang.pojo.User"> select * from user where name = #{username} and pwd = #{pwd} </select>
3、测试的时候,Map的K为sql中取的值即可,没有任何顺序要求
Map<String, Object> map = new HashMap<String, Object>(); map.put("username","盼盼"); map.put("pwd","123456"); User user = mapper.selectUserByNP2(map);
像上面这种采取Map传参的适用于参数过多的情况,如果参数比较少,推荐采用直接传递参数
Insert(用于插入数据)
给数据库增加一个用户
1、在UserMapper接口中添加对应的方法
int addUser(User user);
2、在UserMapper.xml中编写insert语句
<insert id="addUser" parameterType="com.pp.pojo.User"> insert into user (id,name,pwd) values (#{id},#{name},#{pwd}) </insert>
3、编写测试类
@Test public void testAddUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(5,"王五","zxcvbn"); int i = mapper.addUser(user); System.out.println(i); session.commit(); //提交事务,重点!不写的话不会提交到数据库 //这里可以通过在创建工厂时,将open选项设为true即可实现自动提交事务 session.close(); }
update(用于更新数据)
修改用户的信息
1、在UserMapper中编写接口方法
//修改一个用户 int updateUser(User user);
2、在UserMapper.xml中编写对应的sql
<update id="updateUser" parameterType="com.kuang.pojo.User"> update user set name=#{name},pwd=#{pwd} where id = #{id} </update>
3、测试
@Test public void testUpdateUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserById(1); user.setPwd("asdfgh"); int i = mapper.updateUser(user); System.out.println(i); session.commit(); //提交事务,重点!不写的话不会提交到数据库 session.close(); }
delete(用于删除数据)
根据id删除一个用户
1、添加接口方法
//根据id删除用户 int deleteUser(int id);
2、在xml文件中编写sql
<delete id="deleteUser" parameterType="int"> delete from user where id = #{id} </delete>
3、测试
@Test public void testDeleteUser() { SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); int i = mapper.deleteUser(5); System.out.println(i); session.commit(); //提交事务,重点!不写的话不会提交到数据库 session.close(); }
总结
- 所有的增加、删除、修改操作,都需要提交事务,否则数据库的数据不会更新
- 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时
- 参数过多时,可以考虑使用map来进行传参
- 为了规范,在xml文件中编写sql时,我们尽量将Parameter参数和resultType都写上
模糊查询
1、在Java代码中添加sql通配符
string wildcardname = “%smi%”; list<name> names = mapper.selectlike(wildcardname); <select id=”selectlike”> select * from foo where bar like #{value} </select>
2、在sql语句中拼接通配符,sql注入风险
string wildcardname = “smi”; list<name> names = mapper.selectlike(wildcardname); <select id=”selectlike”> select * from foo where bar like "%"#{value}"%" </select>
posted on 2021-04-12 21:49 JavaCoderPan 阅读(12) 评论(0) 编辑 收藏 举报 来源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南