Mybatis:CRUD操作
提示:
Mapper配置文件的命名空间为对应接口包名+接口名字,这个经常会忘记和搞错的!!
select标签
在接口中编写三个查询方法
//获取全部用户
List<User> selectUser(); //根据id查询用户
User getUserByID(int id); //根据一个对象查询
User getUserByUser(User user);
标签信息
<select id="" parameterType="" resultType="" resultMap="">
-- sql语句 (#{name}--这个格式能获取方法参数与sql语句整合)
</select>
id:对应接口对应方法名字
parameterType:为参数类型
resultType:查询结果返回类型
resultMap:手动映射查询结果(之后随笔会介绍)
UserMapper.xml中select语句:
<select id="selectUser" resultType="com.ttt.pojo.User" >
select * from mybatis.user
</select> <select id="getUserByID" parameterType="int" resultType="com.ttt.pojo.User">
select * from mybatis.user where id=#{id}
</select> <select id="getUserByUser" parameterType="com.ttt.pojo.User" resultType="com.ttt.pojo.User">
select * from mybatis.user where name=#{name}
</select>
1、若返回结果为一个集合,那么返回类型就填返回集合里对象类型。
2、在接口方法的参数前加 @Param属性 ,Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型
例如:
//通过密码和名字查询用户
User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);
/*
<select id="selectUserByNP" resultType="com.ttt.pojo.User">
select * from user where name = #{username} and pwd = #{pwd}
</select>
*/
测试语句:
@Test
public void test01(){
SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users1 = userMapper.selectUser();
User user2 = userMapper.getUserByID(1);
User user3 = userMapper.getUserByUser(new User(1, "黑子", "123456")); System.out.println("selectUser方法结果:");
for (User user : users1) {
System.out.println(user);
} System.out.println("getUserByID方法结果:");
System.out.println(user2); System.out.println("getUserByUser方法结果:");
System.out.println(user3); sqlSession.close();
}
test
insert标签:
1、在接口添加方法
//insert一个用户
int addUser(User user);
2、UserMapper.xml中insert语句
<insert id="addUser" parameterType="com.ttt.pojo.User">
insert into user(id, name, pwd) values (#{id}, #{name}, #{pwd})
</insert>
3、测试
@Test
public void test04(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.addUser(new User(4,"demo", "1234" ));
sqlSession.commit(); sqlSession.close();
}
test
update标签
1、接口添加方法
//修改用户
int updateUser(User user);
2、UserMapper.xml中update语句
<update id="updateUser" parameterType="com.ttt.pojo.User">
update user set name = #{name}, pwd=#{pwd} where id=#{id} </update>
注:update语句没有返回标签
3、测试
@Test
public void test05(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.updateUser(new User(4, "绿员君", "123456"));
sqlSession.commit(); sqlSession.close();
}
test
delete标签
1、接口中添加方法
//删除一个用户
int deleteUser(int id);
2、UserMapper.xml中delete语句
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id=#{id};
</delete>
3、测试
@Test
public void test06(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.deleteUser(4);
sqlSession.commit(); sqlSession.close();
}
test
传参技巧--万能map
- 在接口方法中,参数直接传递Map
User selectUserByNP2(Map<String,Object> map);
编写sql语句的时候,需要传递参数类型,参数类型为map
<select id="selectUserByNP2" parameterType="map" resultType="com.ttt.pojo.User">
select * from user where name = #{username} and pwd = #{pwd}
</select>
在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!
Map<String, Object> map = new HashMap<String, Object>();
map.put("username","小明");
map.put("pwd","123456");
User user = mapper.selectUserByNP2(map);
如果参数太多,我们可以使用map实现,而参数太少了,就直接传递参数即可。
小结:
- 所有的增删改操作都需要提交事务!
- 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
- 有时候根据业务的需求,可以考虑使用map传递参数!
- 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!
Mybatis:CRUD操作的更多相关文章
- MyBatis crud操作
Test2.java package com.mycom.mybatis_1.crud; import java.util.List; import org.apache.ibatis.session ...
- 使用MyBatis对表执行CRUD操作
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...
- mybatis(二)执行CRUD操作的两种方式配置和注解
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...
- MyBatis学习总结_02_使用MyBatis对表执行CRUD操作
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...
- 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
[转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...
- Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】
一.使用Mybatis对表进行CRUD操作------基于XML的实现 1.定义SQL的映射文件 2.在conf.xml中进行注册. 2.创建测试类 [具体过程参考:Mybatis的学习总结一] 二. ...
随机推荐
- Thinkphp5.0第四篇
删除数据 当前模型删除 $user=UserModel::get(1); if($user->delete()){return '删除成功';} else{return '删除失败';} 根据主 ...
- Python3 学习笔记之 变量/字符串/if/while/逻辑运算符/模块引用
变量/if/while/逻辑运算符/模块引用: 变量: 使用变量前必须先赋值. 大小写区分. Python创建字符串,在字符串两边可以加上单引号或者双引号. 打印单引号或双引号,使用转移\ 使用\进行 ...
- Laravel 5 中文文档 CHM 版
使用 Microsoft HTML Help Workshop 做了一个 Laravel 5.4 中文文档的 CHM 版本. 百度网盘下载地址:http://pan.baidu.com/s/1dFN2 ...
- 针对于ECMA5Script 、ECMAScript6、TypeScript的认识
什么是ECMAScript.什么又是ECMA? Ecma国际(Ecma International)是一家国际性会员制度的信息和电信标准组织.1994年之前,名为欧洲计算机制造商协会(European ...
- Lab_0操作系统实验准备(全)
一.实验介绍 实验目的: 知识储备: 二.相关下载 1.下载镜像文件 这个镜像文件是vdi类型的,只能用visualbox下载 链接:https://pan.baidu.com/s/1L7WX6ju4 ...
- ionic3 浏览器端返回
首屏component.ts文件中使用setupBrowserBackButtonBehavior() { // Register browser back button action(s) wind ...
- XSS Payload深入分析整理
几种加载XSS Payload的不常见标签 众所周知,一种调用JavaScript的方法就是在元素类型上使用事件处理器(Event Handler),通常的一种方法类似: <img src=x ...
- procdump64+mimikatz获取win用户hash密码
1.导出lsass.exe procdump64.exe -accepteula -ma lsass.exe lsass.dmp 2.执行mimikatz mimikatz.exe "sek ...
- Fibonacci 数列和 Lucas 数列的性质、推论及其证明
Fibonacci 数列 设f(x)=1,x∈{1,2}=f(x−1)+f(x−2),x∈[3,∞)\begin{aligned}f(x)&=1,\quad\quad\quad\quad\qu ...
- 概念理解-Libevent
可移植性: 使用 LibEvent 编写的程序应该在 LibEvent 支持跨越的所有平台上工作,即使没有更好的方法来处理. 非阻塞式IO:LibEvent也应该支持一般的方法使程序可以运行在某些限制 ...