上一篇讲述了MyBatis的快速入门,下面在此基础上进行增删改查的操作:

首先定义dao层的接口:

package com.zy.dao;

import com.zy.domain.User;

import java.util.List;

public interface UserDao {
/**
* 根据id查询用户信息
*/
public User getUserById(int id); /**
* 查询所有用户信息
*/
public List<User> getUserList(); /**
* 添加用户信息
*/
public void addUser(User user); /**
* 修改用户信息
*/
public void updateUser(User user); /**
* 根据id删除用户信息
*/
public void deleteUser(int id);
}

然后编写UserMapper中的sql语句:

<?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">
<!--
定义所有用到的sql语句 和 映射关系
namespace : 当前这个配置文件的唯一标识, 自定义, 但是不能和其他配置文件namespace重复
-->
<mapper namespace="userMapper">
<!--
定义一条sql语句, 其实就是一个 statement
select 代表是查询语句, 与其类似的还有 insert, update, delete等
id : 这条sql语句的唯一标识,自定义,但是不能和其他sql语句重复
parameterType: sql语句需要的参数类型, 需要写 类的全路径
resultType: sql语句返回的结果类型
-->
<select id="getUserById" parameterType="int" resultType="com.zy.domain.User">
<!--这里写具体的sql语句, #{}是占位符, 编译时会被替换成?, 然后注入真实参数-->
select * from user where id=#{id}
</select>
<!--查询所有用户信息-->
<select id="getUserList" resultType="com.zy.domain.User">
select * from user
</select>
<!--添加用户信息-->
<insert id="addUser" parameterType="com.zy.domain.User">
insert into user (id,name,age) values (null,#{name},#{age})
</insert>
<!--修改用户信息-->
<update id="updateUser" parameterType="com.zy.domain.User">
update user set name=#{name}, age=#{age} where id=#{id}
</update>
<!--删除用户信息-->
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
</mapper>

说一下新增User返回id的写法:

    <!--
useGeneratedKeys : 是否开启自增主键的回显功能
keyProperty: 对应javabean的属性名
keyColumn : 对应数据库的列名
-->
<insert id="addUser" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into users values(null,#{username},#{age})
</insert>

最后编写接口实现类:

package com.zy.dao;

import com.zy.domain.User;
import org.apache.ibatis.session.SqlSession; import java.util.List; public class UserDaoImpl implements UserDao { private SqlSession sqlSession; //构造函数内传进来一个sqlsession
public UserDaoImpl(SqlSession sqlSession) {
this.sqlSession = sqlSession;
} @Override
public User getUserById(int id) {
return sqlSession.selectOne("userMapper.getUserById", id);
} @Override
public List<User> getUserList() {
return sqlSession.selectList("userMapper.getUserList");
} @Override
public void addUser(User user) {
sqlSession.insert("userMapper.addUser", user);
} @Override
public void updateUser(User user) {
sqlSession.update("userMapper.updateUser", user);
} @Override
public void deleteUser(int id) {
sqlSession.delete("userMapper.deleteUser", id);
}
}

生成UserDao接口的单元测试:

package com.zy.dao;

import com.zy.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import java.io.InputStream;
import java.util.List; import static org.junit.Assert.*; public class UserDaoTest {
UserDao dao; @Before
public void setUp() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = UserDaoTest.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
dao = new UserDaoImpl(sqlSession);
} @Test
public void getUserById() throws Exception {
User user = dao.getUserById(1);
System.out.println(user);
} @Test
public void getUserList() throws Exception {
List<User> list = dao.getUserList();
for (User user : list) {
System.out.println(user);
}
} @Test
public void addUser() throws Exception {
User user = new User();
user.setName("张学友");
user.setAge(18);
dao.addUser(user);
} @Test
public void updateUser() throws Exception {
//先查
User user = dao.getUserById(2);
//后改
user.setName("刘德华");
user.setAge(17);
dao.updateUser(user);
} @Test
public void deleteUser() throws Exception {
dao.deleteUser(1);
} }

然后运行单元测试即可。

附上最终的项目结构图:

MyBatis总结二:增删改查的更多相关文章

  1. mybatis入门(二):增删改查

    mybatis的原理: 1.mybatis是一个持久层框架,是apache下的顶级项目 mybatis托管到googlecode下,目前托管到了github下面 2.mybatis可以将向prepar ...

  2. mybatis入门二-----增删改查

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  3. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  4. MyBatis简单的增删改查以及简单的分页查询实现

    MyBatis简单的增删改查以及简单的分页查询实现 <? xml version="1.0" encoding="UTF-8"? > <!DO ...

  5. Mybatis入门之增删改查

    Mybatis入门之增删改查 Mybatis如果操作成功,但是数据库没有更新那就是得添加事务了.(增删改都要添加)----- 浪费了我40多分钟怀疑人生后来去百度... 导入包: 引入配置文件: sq ...

  6. MyBatis -- 对表进行增删改查(基于注解的实现)

    1.MyBatis对数据库表进行增/删/改/查 前一篇使用基于XML的方式实现对数据库的增/删/改/查 以下我们来看怎么使用注解的方式实现对数据库表的增/删/改/查 1.1  首先须要定义映射sql的 ...

  7. Spring Boot 使用Mybatis注解开发增删改查

    使用逆向工程是遇到的错误 错误描述 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): c ...

  8. Mybatis实现简单增删改查

    Mybatis的简单应用 学习内容: 需求 环境准备 代码 总结: 学习内容: 需求 使用Mybatis实现简单增删改查(以下是在IDEA中实现的,其他开发工具中,代码一样) jar 包下载:http ...

  9. SpringMVC,MyBatis商品的增删改查

    一.需求 商品的增删改查 二.工程结构 三.代码 1.Mapper层 (1) ItemsMapperCustom.java package com.tony.ssm.mapper; import ja ...

  10. mybatis中的增删改查操作

    在这一个部分,主要进行增删改查的示例书写. 增删改查可以基于xml的,也可以基于注解的方式. 一:对单条数据的查询 1.目录结构 这个使得目录更加清晰 2.User.java 这个使用以前的user表 ...

随机推荐

  1. WPF中的事件及冒泡事件和隧道事件(预览事件)的区别

    WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别   WPF快速指导10:WPF中的事件及冒泡事件和隧道事件(预览事件)的区别 本文摘要: 1:什么是路由事件: 2:中断事件路 ...

  2. jsonp 解决跨域传输

    JSONP是JSON with Padding的略称.它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅 ...

  3. web测试中的测试点和测试方法总结

    测试是一种思维,包括情感思维和智力思维,情感思维主要体现在一句俗语:思想决定行动上(要怀疑一切),智力思维主要体现在测试用例的设计上.具有了这样的思想,就会找出更多的bug.   一.输入框 1.字符 ...

  4. 【ORM】关于Dapper的一些常见用法

    引言 Dapper是.Net平台下一款小巧玲珑的开源Orm框架,简单实用的同时保持高性能,非常适合我这种喜欢手写SQL的人使用,下面介绍一下如何使用Dapper. 相关资料 Dapper的GitHub ...

  5. hdu-3068-最长回文(manacher算法模板)

    题目链接 /* Name:hdu-3068-最长回文 Copyright: Author: Date: 2018/4/24 16:12:45 Description: manacher算法模板 */ ...

  6. 寻找节点d=n的节点算法

    这里的算法是毕设过程中,自己想到的,也不知道有不有人提出过.这里就记录下发现的过程的具体的算法,以后会用到 背景描述 毕设做的是「社交网络中病毒传播的预测」,前期过程主要是模拟几个网络的数据,然后从一 ...

  7. AJAX的最小单元

    $(function(){ $('#send').click(function(){ $.ajax({ type: "GET", url: "test.json" ...

  8. poj2411 Mondriaan's Dream[简单状压dp]

    $11*11$格子板上铺$1*2$地砖方案.以前做过?权当复习算了,毕竟以前学都是浅尝辄止的..常规题,注意两个条件:上一行铺竖着的则这一行同一位一定要铺上竖的,这一行单独铺横的要求枚举集合中出现连续 ...

  9. javascript之面试题精讲

    from:http://blog.csdn.net/q121516340/article/details/51332454 1,检测数组的几种方式: Array.isArray(); es5 toSt ...

  10. nginx与二级域名的绑定 nginx安装

    nginx中文文档 http://www.nginx.cn/doc/ nginx 查看配置文件地址 http://blog.csdn.net/ljfrocky/article/details/5052 ...