在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询。这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了解。环境测试是上一节中的测试环境。在此感谢博主提供的资料。

一、通过MyBatis持久层框架完成对数据库表的增删改查操作——基于XML的实现

1、定义sql文件的映射文件,userMapper文件内容如下:

<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的例如namespace="com.murong.mapping.userMapper"就是com.murong.mapping(包名)+userMapper(userMapper.xml文件去除后缀)-->
<mapper namespace="com.murong.mapping.userMapper"><!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型resultType="com.murong.domain.User"就表示将查询结果封装成一个User类的对象返回User类就是users表所对应的实体类--><!-- 根据id查询得到一个user对象 --><select id="getUser" parameterType="int" resultType="com.murong.domain.User">select * from users where id=#{id}</select><!-- 创建用户(Create) --><insert id="addUser" parameterType="com.murong.domain.User">insert into users(name,age) values(#{name},#{age})</insert><!-- 删除用户(Remove) --><delete id="deleteUser" parameterType="int">delete from users where id=#{id}</delete><!-- 修改用户(Update) --><update id="updateUser" parameterType="com.murong.domain.User">update users set name=#{name},age=#{age} where id=#{id}</update><!-- 查询全部用户--><select id="getAllUsers" resultType="com.murong.domain.User">select * from users</select>
</mapper>

2、测试类内容如下:

package com.murong.client;import java.util.List;import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import com.murong.domain.User;
import com.murong.utils.MyBatisUtil;public class App {@Testpublic void testAdd(){//SqlSession sqlSession = MyBatisUtil.getSqlSession(false);SqlSession sqlSession = MyBatisUtil.getSqlSession(true);/*** 映射sql的标识字符串,* com.murong.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,* addUser是insert标签的id属性值,通过insert标签的id属性值就可以找到要执行的SQL*/String statement = "com.murong.mapping.userMapper.addUser";//映射sql的标识字符串User user = new User();user.setName("久伴");user.setAge(20);//执行插入操作int retResult = sqlSession.insert(statement,user);//手动提交事务//sqlSession.commit();//使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();System.out.println(retResult);}@Testpublic void testUpdate(){SqlSession sqlSession = MyBatisUtil.getSqlSession(true);/*** 映射sql的标识字符串,* com.murong.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,* updateUser是update标签的id属性值,通过update标签的id属性值就可以找到要执行的SQL*/String statement = "com.murong.mapping.userMapper.updateUser";//映射sql的标识字符串User user = new User();user.setId(3);user.setName("久伴");user.setAge(25);//执行修改操作int retResult = sqlSession.update(statement,user);//使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();System.out.println(retResult);}@Testpublic void testDelete(){SqlSession sqlSession = MyBatisUtil.getSqlSession(true);/*** 映射sql的标识字符串,* com.murong.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,* deleteUser是delete标签的id属性值,通过delete标签的id属性值就可以找到要执行的SQL*/String statement = "com.murong.mapping.userMapper.deleteUser";//映射sql的标识字符串//执行删除操作int retResult = sqlSession.delete(statement,2);//使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();System.out.println(retResult);}@Testpublic void testGetAll(){SqlSession sqlSession = MyBatisUtil.getSqlSession();/*** 映射sql的标识字符串,* com.murong.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,* getAllUsers是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL*/String statement = "com.murong.mapping.userMapper.getAllUsers";//映射sql的标识字符串//执行查询操作,将查询结果自动封装成List<User>返回List<User> lstUsers = sqlSession.selectList(statement);//使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();System.out.println(lstUsers);}
}

3、涉及到的工具类内容代码如下:

package com.murong.utils;import java.io.InputStream;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MyBatisUtil {/*** 获取SqlSessionFactory* @return SqlSessionFactory*/public static SqlSessionFactory getSqlSessionFactory() {String resource = "conf.xml";InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);return factory;}/*** 获取SqlSession* @return SqlSession*/public static SqlSession getSqlSession() {return getSqlSessionFactory().openSession();}/*** 获取SqlSession* @param isAutoCommit *         true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务*         false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务* @return SqlSession*/public static SqlSession getSqlSession(boolean isAutoCommit) {return getSqlSessionFactory().openSession(isAutoCommit);}
}

小结:经过本人亲自测试,以上代码都可以得出响应的结果。

二、通过MyBatis持久层框架完成对数据库表的增删改查操作——基于注解的实现

1、定义sql映射的接口 (需要说明的是,我们不需要针对UserMapperI接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。)UserMapperI接口的代码如下:

package com.murong.mapping;import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;import com.murong.domain.User;/*** * @author yzy**/
public interface UserMapperI {//使用@Insert注解指明add方法要执行的SQL@Insert("insert into users(name, age) values(#{name}, #{age})")public int add(User user);//使用@Delete注解指明deleteById方法要执行的SQL@Delete("delete from users where id=#{id}")public int deleteById(int id);//使用@Update注解指明update方法要执行的SQL@Update("update users set name=#{name},age=#{age} where id=#{id}")public int update(User user);//使用@Select注解指明getById方法要执行的SQL@Select("select * from users where id=#{id}")public User getById(int id);//使用@Select注解指明getAll方法要执行的SQL@Select("select * from users")public List<User> getAll();
}

2、在conf.xml文件中注册这个映射接口(功能类似于注册驱动)

<?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><environments default="development"><environment id="development"><transactionManager type="JDBC" /><!-- 配置数据库连接信息 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/mybatis" /><property name="username" value="root" /><property name="password" value="123456" /></dataSource></environment></environments><mappers><!-- 注册userMapper.xml文件, userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml--><mapper resource="com/murong/mapping/userMapper.xml"/><!-- 注册UserMapper映射接口--><mapper class="com.murong.mapping.UserMapperI"/></mappers></configuration>

3、单元测试类的代码如下:

package com.murong.client;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.murong.domain.User;
import com.murong.mapping.UserMapperI;
import com.murong.utils.MyBatisUtil;public class App2 {@Testpublic void testAdd(){SqlSession sqlSession = MyBatisUtil.getSqlSession(true);//得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);User user = new User();user.setName("久伴");user.setAge(20);int add = mapper.add(user);//使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();System.out.println(add);}@Testpublic void testUpdate(){SqlSession sqlSession = MyBatisUtil.getSqlSession(true);//得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);User user = new User();user.setId(3);user.setName("久伴2");user.setAge(26);//执行修改操作int retResult = mapper.update(user);//使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();System.out.println(retResult);}@Testpublic void testDelete(){SqlSession sqlSession = MyBatisUtil.getSqlSession(true);//得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);//执行删除操作int retResult = mapper.deleteById(7);//使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();System.out.println(retResult);}@Testpublic void testGetUser(){SqlSession sqlSession = MyBatisUtil.getSqlSession();//得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);//执行查询操作,将查询结果自动封装成User返回User user = mapper.getById(8);//使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();System.out.println(user);}@Testpublic void testGetAll(){SqlSession sqlSession = MyBatisUtil.getSqlSession();//得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);//执行查询操作,将查询结果自动封装成List<User>返回List<User> lstUsers = mapper.getAll();//使用SqlSession执行完SQL之后需要关闭SqlSession
        sqlSession.close();System.out.println(lstUsers);}
}

4、以上测试全部通过。

转载于:https://www.cnblogs.com/yuanchaoyong/p/5647296.html

MyBatis入门学习(二)相关推荐

  1. MyBatis入门学习教程

    MyBatis入门学习教程 1. MyBatis 原生使用入门篇 1.1 什么是MyBatis? 1.2 原生使用安装方法 1.3 使用示例 1.3.1 创建一个学习项目 1.3.1 添加依赖 1.3 ...

  2. hadoop hive hbase 入门学习 (二)

    hadoop 自学系列                hadoop hive hbase 入门学习 (一) hadoop安装.hdfs学习及mapreduce学习 hadoop 软件下载 (hadoo ...

  3. JBox2d入门学习二 -----我的小鸟

    入门学习一当中我学会了如何定义并且创建一个世界,在世界当中定义并且创建一个刚体,并尝试给刚体一个力.最近比较忙..现在抽空实现了一个类似于愤怒小鸟的例子,先看看图吧.   贴代码,注解写的比较详细了, ...

  4. OpenGL入门学习[二] 绘制简单的几何图形

    OpenGL入门学习[二] 本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形 我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念 ...

  5. Mybatis入门(二)

    Mybatis入门(二) 一.利用resultMap 复杂类型映射 1.一对一 2.一对多 3.多对多 二.动态sql构建 三. 延迟加载 四.缓存技术 五.mybatis的反向工程 六.#{}和${ ...

  6. MyBatis入门(二)---一对一,一对多

    一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...

  7. mybatis入门学习之环境的搭建——helloworld

    Mybatis框架环境的搭建 首先,我是一名走java后端的大二菜鸟,我写博客一方面是用来记录我学习中遇到的问题,另一方面是希望和更多的人分享经验.如果我写的内容有不严谨的地方,还请大佬们纠正一下. ...

  8. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisS ...

  9. 【入门学习二】基于 FPGA 使用 Verilog 实现蜂鸣器响动的代码及原理讲解

    目录 一.知识了解 二.模块设计 三.程序实现 四.管脚配置及结果展示 五.写给小白看的 上一篇博文:[入门学习一]基于 FPGA 使用 Verilog 实现按键点灯代码及原理讲解 功能描述:通过前面 ...

最新文章

  1. 如何更改jupyter notebook默认存储路径
  2. 算法笔记_156:算法提高 6-17复数四则运算(Java)
  3. linux nginx 安装stream,Centos7-64bit-编译安装配置Nginx stream四层负载均衡 动态加载
  4. 微型计算机上的南桥芯片功能,微型计算机及接口技术2012年1月真题试题(04732)...
  5. OllyDbg笔记-软件逆向调试技巧
  6. sqlite3用python家外键_Django/Sqlite3为带有外键的模型添加一行
  7. 为什么[]比list()更快?
  8. Python中使用tarfile压缩、解压tar归档文件
  9. linux常见权限相关错误及解决
  10. [渝粤教育] 天水师范学院 离散数学 参考 资料
  11. 计算机专业英语词库mdx,Mdict词库合集(22本实用词典)
  12. 【论文翻译】Deep Learning
  13. c盘是不是越大越好_C盘下的pagefile文件是不是越大越好?
  14. HDFS遍历子目录 Hadoop fs -ls -R path
  15. C++图片格式转换:BMP转JPEG
  16. 【css】纯css实现table表格固定表头,表内容滚动
  17. c++面试 掌握的东西总结
  18. iOS App更换图标Logo(本地更换)
  19. shortcut和残差连接
  20. FFMpeg4.0相关结构体和函数

热门文章

  1. ora-00604 ora-02429
  2. block IO层框架分析2
  3. Abaqus中批量对节点施加集中力荷载
  4. c语言编写s11次方,c语言编程练习题.docx
  5. 石家庄神月软件java笔试
  6. 12星座的出生年月日性格_十二个星座的出生年月日
  7. 数据库原理 概念结构设计的方法
  8. MP2456的芯片的学习
  9. CSM3416SF兼容MP2451,MCP16301HT-E,LT1933ES6,AOZ1282CI
  10. jsonp跨域访问servlet接口获取json数组,并且渲染数据,前后端完整