完成CRUD操作

我们在上一篇中已经简单知道了Mybatis是怎么使用的以及工作流程了,这次我们使用Mybatis来完成CRUD的操作,再次巩固Mybatis的开发步骤以及一些细节

包与类之间的结构

增加学生

配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <!-- 加载类路径下的属性文件 -->
  6. <properties resource="db.properties"/>
  7. <!-- 设置一个默认的连接环境信息 -->
  8. <environments default="mysql_developer">
  9. <!-- 连接环境信息,取一个任意唯一的名字 -->
  10. <environment id="mysql_developer">
  11. <!-- mybatis使用jdbc事务管理方式 -->
  12. <transactionManager type="jdbc"/>
  13. <!-- mybatis使用连接池方式来获取连接 -->
  14. <dataSource type="pooled">
  15. <!-- 配置与数据库交互的4个必要属性 -->
  16. <property name="driver" value="${mysql.driver}"/>
  17. <property name="url" value="${mysql.url}"/>
  18. <property name="username" value="${mysql.username}"/>
  19. <property name="password" value="${mysql.password}"/>
  20. </dataSource>
  21. </environment>
  22. <!-- 连接环境信息,取一个任意唯一的名字 -->
  23. <environment id="oracle_developer">
  24. <!-- mybatis使用jdbc事务管理方式 -->
  25. <transactionManager type="jdbc"/>
  26. <!-- mybatis使用连接池方式来获取连接 -->
  27. <dataSource type="pooled">
  28. <!-- 配置与数据库交互的4个必要属性 -->
  29. <property name="driver" value="${oracle.driver}"/>
  30. <property name="url" value="${oracle.url}"/>
  31. <property name="username" value="${oracle.username}"/>
  32. <property name="password" value="${oracle.password}"/>
  33. </dataSource>
  34. </environment>
  35. </environments>
  36. <mappers>
  37. <mapper resource="zhongfucheng/StudentMapper.xml"/>
  38. </mappers>
  39. </configuration>

映射文件

  1. <!-- namespace属性是名称空间,必须唯一 -->
  2. <mapper namespace="StudentID">
  3. <!-- resultMap标签:映射实体与表
  4. type属性:表示实体全路径名
  5. id属性:为实体与表的映射取一个任意的唯一的名字
  6. -->
  7. <resultMap type="zhongfucheng.Student" id="studentMap">
  8. <!-- id标签:映射主键属性
  9. result标签:映射非主键属性
  10. property属性:实体的属性名
  11. column属性:表的字段名
  12. -->
  13. <id property="id" column="id"/>
  14. <result property="name" column="name"/>
  15. <result property="sal" column="sal"/>
  16. </resultMap>
  17. <insert id="add" parameterType="zhongfucheng.Student">
  18. INSERT INTO ZHONGFUCHENG.STUDENTS (ID, NAME, SAL) VALUES (#{id},#{name},#{sal});
  19. </insert>
  20. </mapper>

插入数据


  1. public class StudentDao {
  2. public void add(Student student) throws Exception {
  3. //得到连接对象
  4. SqlSession sqlSession = MybatisUtil.getSqlSession();
  5. try{
  6. //映射文件的命名空间.SQL片段的ID,就可以调用对应的映射文件中的SQL
  7. sqlSession.insert("StudentID.add", student);
  8. sqlSession.commit();
  9. }catch(Exception e){
  10. e.printStackTrace();
  11. sqlSession.rollback();
  12. throw e;
  13. }finally{
  14. MybatisUtil.closeSqlSession();
  15. }
  16. }
  17. public static void main(String[] args) throws Exception {
  18. StudentDao studentDao = new StudentDao();
  19. Student student = new Student(3, "zhong3", 10000D);
  20. studentDao.add(student);
  21. }
  22. }

根据ID查询数据

增加select标签


  1. <!--
  2. 查询根据id
  3. resultMap这个属性代表是返回值类型,返回值的类型是Student,就是上面实体类型
  4. -->
  5. <select id="findById" parameterType="int" resultMap="studentMap">
  6. SELECT * FROM STUDENTS WHERE id = #{id};
  7. </select>

查询出来的结果是一个Student对象,我们调用SelectOne方法


  1. public Student findById(int id) throws Exception {
  2. //得到连接对象
  3. SqlSession sqlSession = MybatisUtil.getSqlSession();
  4. try{
  5. //映射文件的命名空间.SQL片段的ID,就可以调用对应的映射文件中的SQL
  6. return sqlSession.selectOne("StudentID.findById",id);
  7. }catch(Exception e){
  8. e.printStackTrace();
  9. sqlSession.rollback();
  10. throw e;
  11. }finally{
  12. MybatisUtil.closeSqlSession();
  13. }
  14. }
  15. public static void main(String[] args) throws Exception {
  16. StudentDao studentDao = new StudentDao();
  17. Student student = studentDao.findById(1);
  18. System.out.println(student.getName());
  19. }

查询所有数据


  1. <!--
  2. 查询所有数据
  3. 返回值类型讲道理是List<Student>的,但我们只要写集合中的类型就行了
  4. -->
  5. <select id="findAll" resultMap="studentMap">
  6. SELECT * FROM STUDENTS;
  7. </select>

我们查询出来的结果不单单只有一个对象了,因此我们使用的是SelectList这个方法

  1. public List<Student> findAll() throws Exception {
  2. //得到连接对象
  3. SqlSession sqlSession = MybatisUtil.getSqlSession();
  4. try{
  5. //映射文件的命名空间.SQL片段的ID,就可以调用对应的映射文件中的SQL
  6. return sqlSession.selectList("StudentID.findAll");
  7. }catch(Exception e){
  8. e.printStackTrace();
  9. sqlSession.rollback();
  10. throw e;
  11. }finally{
  12. MybatisUtil.closeSqlSession();
  13. }
  14. }
  15. public static void main(String[] args) throws Exception {
  16. StudentDao studentDao = new StudentDao();
  17. List<Student> students = studentDao.findAll();
  18. System.out.println(students.size());
  19. }

根据id删除


  1. <!--根据id删除-->
  2. <delete id="delete" parameterType="int">
  3. DELETE FROM STUDENTS WHERE id=#{id};
  4. </delete>

调用delete方法删除

  1. public void delete(int id ) throws Exception {
  2. //得到连接对象
  3. SqlSession sqlSession = MybatisUtil.getSqlSession();
  4. try{
  5. //映射文件的命名空间.SQL片段的ID,就可以调用对应的映射文件中的SQL
  6. sqlSession.delete("StudentID.delete", id);
  7. sqlSession.commit();
  8. }catch(Exception e){
  9. e.printStackTrace();
  10. sqlSession.rollback();
  11. throw e;
  12. }finally{
  13. MybatisUtil.closeSqlSession();
  14. }
  15. }
  16. public static void main(String[] args) throws Exception {
  17. StudentDao studentDao = new StudentDao();
  18. studentDao.delete(1);
  19. }

修改


  1. <!--更新-->
  2. <update id="update" parameterType="zhongfucheng.Student">
  3. update students set name=#{name},sal=#{sal} where id=#{id};
  4. </update>

查询出对应的对象,对其进行修改

  1. public void update(Student student ) throws Exception {
  2. //得到连接对象
  3. SqlSession sqlSession = MybatisUtil.getSqlSession();
  4. try{
  5. //映射文件的命名空间.SQL片段的ID,就可以调用对应的映射文件中的SQL
  6. sqlSession.update("StudentID.update", student);
  7. sqlSession.commit();
  8. }catch(Exception e){
  9. e.printStackTrace();
  10. sqlSession.rollback();
  11. throw e;
  12. }finally{
  13. MybatisUtil.closeSqlSession();
  14. }
  15. }
  16. public static void main(String[] args) throws Exception {
  17. StudentDao studentDao = new StudentDao();
  18. Student student = studentDao.findById(2);
  19. student.setName("fucheng");
  20. student.setSal(2000D);
  21. studentDao.update(student);
  22. }

小细节


  1. <!--
  2. 注意:这个insert/update/delete标签只是一个模板,在做操作时,其实是以SQL语句为核心的
  3. 即在做增/删/时,insert/update/delete标签可通用,
  4. 但做查询时只能用select标签
  5. 我们提倡什么操作就用什么标签
  6. -->

Mybatis分页

分页是一个非常实用的技术点,我们也来学习一下使用Mybatis是怎么分页的…

我们的分页是需要多个参数的,并不是像我们之前的例子中只有一个参数。当需要接收多个参数的时候,我们使用Map集合来装载


  1. public List<Student> pagination(int start ,int end) throws Exception {
  2. //得到连接对象
  3. SqlSession sqlSession = MybatisUtil.getSqlSession();
  4. try{
  5. //映射文件的命名空间.SQL片段的ID,就可以调用对应的映射文件中的SQL
  6. /**
  7. * 由于我们的参数超过了两个,而方法中只有一个Object参数收集
  8. * 因此我们使用Map集合来装载我们的参数
  9. */
  10. Map<String, Object> map = new HashMap();
  11. map.put("start", start);
  12. map.put("end", end);
  13. return sqlSession.selectList("StudentID.pagination", map);
  14. }catch(Exception e){
  15. e.printStackTrace();
  16. sqlSession.rollback();
  17. throw e;
  18. }finally{
  19. MybatisUtil.closeSqlSession();
  20. }
  21. }
  22. public static void main(String[] args) throws Exception {
  23. StudentDao studentDao = new StudentDao();
  24. List<Student> students = studentDao.pagination(0, 3);
  25. for (Student student : students) {
  26. System.out.println(student.getId());
  27. }
  28. }

那么在实体与表映射文件中,我们接收的参数就是map集合

  1. <!--分页查询-->
  2. <select id="pagination" parameterType="map" resultMap="studentMap">
  3. /*根据key自动找到对应Map集合的value*/
  4. select * from students limit #{start},#{end};
  5. </select>

Mybatis第二篇【CRUD、分页】的更多相关文章

  1. mybatis第二篇—参数绑定

    不管我们在做数据库作业或者任务还是当时的仅靠jdbc来写一个管理系统的时候,sql语句需要一些参数,从而来实现模糊查询,精确查询,插入数据,更新数据和删除数据.这些参数,在mybatis里面,又该如何 ...

  2. 持久层之 MyBatis: 第二篇 :动态SQL And多表查询

    MyBatis入门到精通 完整CRUD UserDaoImpl 编写UserDao对应的UserDaoMapper.xml 添加UserDao的测试用例 编写UserDao的测试用例 解决数据库字段名 ...

  3. ElasticSearch入门 第二篇:集群配置

    这是ElasticSearch 2.4 版本系列的第二篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  4. Mybatis入门篇之结果映射,你射准了吗?

    目录 前言 什么是结果映射? 如何映射? 别名映射 驼峰映射 配置文件开启驼峰映射 配置类中开启驼峰映射 resultMap映射 总结 高级结果映射 关联(association) 例子 关联的嵌套 ...

  5. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  6. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  7. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  8. PHP 性能分析第二篇: Xhgui In-Depth

    [前言]这是国外知名博主 Davey Shafik 撰写的 PHP 应用性能分析系列的第二篇,第一篇介绍 Xhprof/Xhgui,第三篇则关注于性能调优实践. 在第一篇中,我们初步介绍了 xhpro ...

  9. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

随机推荐

  1. XP和win7的软件崩溃提示

    运行在XP上的应用软件崩溃时总提示:应用程序错误,xxxxx地址不能写... 现在win7上提示的就只有关闭和调试程序,没有这些详细信息.其实win7下面也记录了相关的信息. 位置在:“控制面板” - ...

  2. webpack入门篇--1.简单介绍

    简单介绍: webpack是一个模块打包工具,给js准备的打包工具,可以把很多的模块打包成很少的文件 目标: 1.切分依赖数,分到不同代码块里,按需加载,懒加 载 2.任何静态资源都可以被视为一个模块 ...

  3. 最短路 - floyd算法

    floyd算法是多源最短路算法 也就是说,floyd可以一次跑出所以点两两之间的最短路 floyd类似动态规划 如下图: 用橙色表示边权,蓝色表示最短路 求最短路的流程是这样的: 先把点1到其他点的最 ...

  4. koa2 controller中实现类似sleep的延迟功能

    今天有同事问我如何在koa2中的controller中使用延迟执行的功能,他直接在controller中使用setTimeout,但是没效果. 错误的代码类似下面这样: // 错误的方法 export ...

  5. 【Spring】web开发 javaConfig方式 图解

    spring3.2之后开始支持java配置方式开发web项目,不使用web.xml,但需要在servlet3.0环境,一般tomcat7会支持,6不行 下图中:MyAppInitializer和Spr ...

  6. Linux 常用性能工具简介

    一.wget 文件下载 使用wget下载单个文件:wget URL 下载并以不同的文件名保存:wget -O wordpress.zip URL wget限速下载:wget --limit-rate= ...

  7. CSS-三栏响应式布局(左右固宽,中间自适应)的五种方法

    代码: <!-- 1 float --> <h3 class="block">第一种方法-float</h3> <div class=&q ...

  8. ln命令详解

    ln命令 (全称:link) ln命令用来为文件创建一个连接,类似于Windows的快捷方式,连接类型分为硬连接和软连接(符号连接)两种,默认的连接类型是硬连接.如果要创建符号连接必须使用" ...

  9. C# 文件的操作

    C#对文件的操作相当方便,主要涉及到四个类:File.FileInfo.Directory.DirectoryInfo,前两个提供了针对文件的操作,后两个提供了针对目录的操作,类图关系如上图所示; 下 ...

  10. 个人作业2 — 英语学习APP的案例分析

    一.调研准备:   1.软件:必应词典   2.平台:安卓   3.bug定义:(引用自<构建之法>13.1节)    Bug:软件的缺陷    Bug可以分解为:症状(Symptom). ...