Mybatis增删改查基本操作

一、XML实现方式

1、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.xml中出现重复的id -->
<mapper namespace="com.mybatis.mapper.UserMapper">
<!-- 新增用户数据 -->
<insert id="insertUser" parameterType="com.mybatis.model.User">
<!-- #{name}相当于jdbc中的的?号,name值与Bean字段对应,可自动获取 -->
insert into users values(#{id}, #{username}, #{password}, #{email}, #{age})
</insert> <!-- 查找用户数据 -->
<select id="selectUser" resultType="com.mybatis.model.User" parameterType="int">
select * from users where id = #{id}
</select> <!-- 查找用户数据集合 -->
<!-- 基本数据类型可以不用写完整类名 -->
<select id="selectUsers" resultType="com.mybatis.model.User" parameterType="int">
select * from users t where t.age = #{age}
</select> <!-- 更新用户数据 -->
<update id="updateUser" parameterType="com.mybatis.model.User">
update users set age = #{age} where id = #{id}
</update> <!-- 删除用户数据 -->
<delete id="deleteUser" parameterType="int">
delete from users where id = #{id}
</delete>
</mapper>
2、单元测试代码
/**
* 使用XML配置实现CRUD操作
*/
public class DbTest2 { private SqlSessionFactory sqlSessionFactory;
/**
* 初始化工作
*/
@Before
public void init() throws IOException {
//通过mybatis提供的资源加载类加载配置文件
Reader reader = Resources.getResourceAsReader("Configuration.xml");
//获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactroyBuilder = new SqlSessionFactoryBuilder();
//根据XML配置文件构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactroyBuilder.build(reader);
this.sqlSessionFactory = sqlSessionFactory;
} //新增操作
@Test
public void insertUser() {
//Mybatis默认情况下不会commit,即默认connection.setAutoCommit(false);
//传入true代表自动提交
SqlSession session = sqlSessionFactory.openSession(true);
try {
User user = new User();
user.setId("1");
user.setUsername("zhangsan");
user.setPassword("123456");
user.setAge("18");
user.setEmail("zhangsan@163.com");
session.insert("com.mybatis.mapper.UserMapper.insertUser", user);
} finally {
session.close();
}
} //查询操作
@Test
public void queryUser() {
SqlSession session = sqlSessionFactory.openSession(true);
try {
User user = session.selectOne("com.mybatis.mapper.UserMapper.selectUser", 1);
System.out.println(user);
} finally {
session.close();
}
} //查询多条操作
@Test
public void queryUsers() {
SqlSession session = sqlSessionFactory.openSession(true);
try {
List<User> userList = session.selectList("com.mybatis.mapper.UserMapper.selectUsers", 18);
System.out.println(userList.size());
} finally {
session.close();
}
} //更新操作
@Test
public void updateUser() {
SqlSession session = sqlSessionFactory.openSession(true);
try {
User user = new User();
user.setId("1");
user.setAge("25");
int num = session.update("com.mybatis.mapper.UserMapper.updateUser", user);
System.out.println(num);
} finally {
session.close();
}
} //删除操作
@Test
public void deleteUser() {
SqlSession session = sqlSessionFactory.openSession(true);
try {
int num = session.delete("com.mybatis.mapper.UserMapper.deleteUser", 1);
System.out.println(num);
} finally {
session.close();
}
}
}

二、注解实现

1、编写Mapper接口
* 使用注解的方式配置SQL映射关系
* 需要注意的事此接口不用具体编写实现代码,而将由Mybatis动态的帮我们构建
* 这样的代码由于避免了强制类型转换和参数不匹配的问题,因此更加安全
*/
public interface UserMapperI {
@Insert("insert into users values(#{id}, #{username}, #{password}, #{email}, #{age})")
int insertUser(User user); @Select("select * from users where id = #{id}")
User selectUser(String id); @Select("select * from users t where t.age = #{age}")
List<User> selectUsers(String age); @Update("update users set age = #{age} where id = #{id}")
int updateUser(User user); @Delete("delete from users where id = #{id}")
int deleteUser(String id);
}
2、注册接口
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="database.properties"></properties> <environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 注册sql映射文件 --> <mappers>
<!-- 注册UserMapper.xml文件 -->
<mapper resource="com/mybatis/mapper/UserMapper.xml"/>
<!-- 注册UserMapperI接口 -->
<mapper class="com.mybatis.mapper.UserMapperI"/>
</mappers>
</configuration>
3、单元测试代码
/**
* 使用注解实现CRUD操作
*/
public class DbTest3 {
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws IOException {
//通过mybatis提供的资源加载类加载配置文件
Reader reader = Resources.getResourceAsReader("Configuration.xml");
//获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactroyBuilder = new SqlSessionFactoryBuilder();
//根据XML配置文件构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactroyBuilder.build(reader);
this.sqlSessionFactory = sqlSessionFactory;
} //新增操作
@Test
public void insertUser() {
SqlSession session = sqlSessionFactory.openSession(true);
try {
UserMapperI mapper = session.getMapper(UserMapperI.class);
User user = new User();
user.setId("1");
user.setUsername("zhangsan");
user.setPassword("123456");
user.setAge("18");
user.setEmail("zhangsan@163.com");
int num = mapper.insertUser(user);
System.out.println(num);
} finally {
session.close();
}
} //查询操作
@Test
public void queryUser() {
SqlSession session = sqlSessionFactory.openSession(true);
try {
UserMapperI mapper = session.getMapper(UserMapperI.class);
User user = mapper.selectUser("1");
System.out.println(user);
} finally {
session.close();
}
} //查询多条操作
@Test
public void queryUsers() {
SqlSession session = sqlSessionFactory.openSession(true);
try {
UserMapperI mapper = session.getMapper(UserMapperI.class);
List<User> userList = mapper.selectUsers("18");
System.out.println(userList.size());
} finally {
session.close();
}
} //更新操作
@Test
public void updateUser() {
SqlSession session = sqlSessionFactory.openSession(true);
try {
UserMapperI mapper = session.getMapper(UserMapperI.class);
User user = new User();
user.setId("1");
user.setAge("25");
int num = mapper.updateUser(user);
System.out.println(num);
} finally {
session.close();
}
} //删除操作
@Test
public void deleteUser() {
SqlSession session = sqlSessionFactory.openSession(true);
try {
UserMapperI mapper = session.getMapper(UserMapperI.class);
int num = mapper.deleteUser("1");
System.out.println(num);
} finally {
session.close();
}
}
}

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

  4. MyBatis入门2_增删改查+数据库字段和实体字段不一致情况

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 当数据库字段和实体bean中属性不一致时 之前数据库P ...

  5. MyBatis入门案例 增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

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

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

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

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

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

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

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

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

  10. Mybatis实现简单增删改查

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

随机推荐

  1. 曹工说Spring Boot源码(30)-- ConfigurationClassPostProcessor 实在太硬核了,为了了解它,我可能debug了快一天

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  2. Js数组对象的属性值升序排序,并指定数组中的某个对象移动到数组的最前面

    需求整理: 本篇文章主要实现的是将一个数组的中对象的属性值通过升序的方式排序,然后能够让程序可以指定对应的数组对象移动到程序的最前面. 数组如下所示: var arrayData= [{name: & ...

  3. defineProperty 和Proxy双向绑定演示,你还不知道么?

    双向绑定,也就是说js中的数据传到页面,页面中的内容到js,实现同步更新,简单的演示可以直接复制下放HTML代码运行. 在这个例子中,我们使用defineProperty ,Object.define ...

  4. python学习笔记1 -- 函数式编程之高阶函数 map 和reduce

    我用我自己,就是高阶函数,直接表现就是函数可以作为另一个函数的参数,也可以作为返回值 首先一个知识点是 函数的表现形式,印象中的是def  fw(参数)这种方式定义一个函数 python有很多的内置函 ...

  5. 一些Tips

    https://www.cnblogs.com/yeungchie/ 1. 快捷键e,有个EnableDimming选项,勾选后只会高亮你所选中的器件连线等等,其他器件亮度会下降,和mark不同,有利 ...

  6. windows:shellcode 代码远程APC注入和加载

    https://www.cnblogs.com/theseventhson/p/13197776.html  上一章介绍了通用的shellcode加载器,这个加载器自己调用virtualAlloc分配 ...

  7. react - 多层级嵌套路由支持

    routerCofing配置 { path: '/route1/someModel', children: [ { path: '/route2', component: RouteBase.Cps1 ...

  8. RNN神经网络产生梯度消失和梯度爆炸的原因及解决方案

    1.RNN模型结构 循环神经网络RNN(Recurrent Neural Network)会记忆之前的信息,并利用之前的信息影响后面结点的输出.也就是说,循环神经网络的隐藏层之间的结点是有连接的,隐藏 ...

  9. 自定制格式化方式format

    自定制格式化方式format # x='{0}{0}{0}'.format('dog') # # print(x) # class Date: # def __init__(self,year,mon ...

  10. Python基础教程(第2版)简介及PDF下载地址!

    内容简介 · · · · · · 本书是经典教程的全新改版,作者根据Python 3.0版本的种种变化,全面改写了书中内容,做到既能“瞻前”也能“顾后”.本书层次鲜明.结构严谨.内容翔实,特别是在最后 ...