前面的小节我们已经讲到用接口的方式编程。使用这种方式,需要注意的一个地方就是,在User.xml 配置文件中,mapper namespace="com.yiibai.mybatis.inter.IUser" ,命名空间对应非常重要,名称不能有错,必须与我们定义的 package 和 接口一致。如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下操作:

  1. 使用 mybatis 查询用户数据(读取用户列表)
  2. 使用 mybatis 增加用户数据
  3. 使用 mybatis 更新用户数据
  4. 使用 mybatis 删除用户数据

查询数据,前面已经讲过简单的查询单个用户数据,在这里将查询出用户列表,
要查询出列表,也就是返回 List, 在我们这个例子中也就是List<User> , 要以这种方式返回数据,需要在User.xml里面配置返回的类型 resultMap, 注意不是 resultType而这个resultMap 所对应的应该是我们自己配置。

在此示例中,我们需要使用到以下表:

  1. 接下我们创建一个表:user,并插入一条记录信息,其结构如下所示:
  2. CREATE TABLE `user` (
  3. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  4. `name` varchar(64) NOT NULL DEFAULT '',
  5. `dept` varchar(254) NOT NULL DEFAULT '',
  6. `website` varchar(254) DEFAULT '',
  7. `phone` varchar(16) NOT NULL DEFAULT '',
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
  10. -- ----------------------------
  11. -- Records of user
  12. -- ----------------------------
  13. INSERT INTO `user` VALUES ('1', 'yiibai', 'Tech', 'http://www.yiibai.com', '13800009988');
SQL

1、创建工程并配置所需环境

我们首先来创建一个工程:mybatis-curd-03,与第一节中介绍的环境配置一样,加入所需的 jar 包:mysql-connector 和 mybatis3.jar。配置 src/config/Configure.xml,其文件内容如下:

  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. <typeAliases>
  6. <typeAlias alias="User" type="com.yiibai.mybatis.models.User" />
  7. </typeAliases>
  8. <environments default="development">
  9. <environment id="development">
  10. <transactionManager type="JDBC" />
  11. <dataSource type="POOLED">
  12. <property name="driver" value="com.mysql.jdbc.Driver" />
  13. <property name="url" value="jdbc:mysql://127.0.0.1:3306/testdb" />
  14. <property name="username" value="root" />
  15. <property name="password" value="123456" />
  16. </dataSource>
  17. </environment>
  18. </environments>
  19. <mappers>
  20. <!-- // power by http://www.yiibai.com -->
  21. <mapper resource="com/yiibai/mybatis/models/User.xml" />
  22. </mappers>
  23. </configuration>
XML

2、创建 Java 类和接口

在这里需要创建一个类和一个接口:User.java类和IUser.java接口,User.java类位于包 com.yiibai.mybatis.models 下,User.java类代码内容如下:

  1. package com.yiibai.mybatis.models;
  2. public class User {
  3. private int id;
  4. private String name;
  5. private String dept;
  6. private String phone;
  7. private String website;
  8. public String getWebsite() {
  9. return website;
  10. }
  11. public void setWebsite(String website) {
  12. this.website = website;
  13. }
  14. public int getId() {
  15. return id;
  16. }
  17. public void setId(int id) {
  18. this.id = id;
  19. }
  20. public String getName() {
  21. return name;
  22. }
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26. public String getDept() {
  27. return dept;
  28. }
  29. public void setDept(String dept) {
  30. this.dept = dept;
  31. }
  32. public String getPhone() {
  33. return phone;
  34. }
  35. public void setPhone(String phone) {
  36. this.phone = phone;
  37. }
  38. }
Java

IUser.java接口位于包com.yiibai.mybatis.dao 下,IUser.java接口代码内容如下:

  1. package com.yiibai.mybatis.dao;
  2. import java.util.List;
  3. import org.apache.ibatis.annotations.Select;
  4. import com.yiibai.mybatis.models.User;
  5. /**
  6. *
  7. * @author yiibai
  8. *
  9. */
  10. public interface IUser {
  11. //@Select("select * from user where id= #{id}")
  12. //public User getUserByID(int id);
  13. public List<User> getUserList();
  14. public void insertUser(User user);
  15. public void updateUser(User user);
  16. public void deleteUser(int userId);
  17. public User getUser(int id);
  18. }
Java

这里还需要一个XML文件,与前一小节中一样,使用的是 User.xml,在这我们分别对应了增删改查的操作(每一个操作的 ID 对应于IUser接口的方法),其内容如下:

User.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.yiibai.mybatis.dao.IUser">
  5. <select id="getUser" parameterType="int"
  6. resultType="com.yiibai.mybatis.models.User">
  7. SELECT *
  8. FROM USER
  9. WHERE id = #{userId}
  10. </select>
  11. <insert id="insertUser" parameterType="User">
  12. INSERT INTO USER(name,
  13. dept, website,phone)
  14. VALUES(#{name}, #{dept}, #{website}, #{phone})
  15. </insert>
  16. <select id="getUserList" resultType="com.yiibai.mybatis.models.User">
  17. SELECT * FROM USER
  18. </select>
  19. <update id="updateUser" parameterType="User">
  20. UPDATE USER
  21. SET
  22. name=
  23. #{name},
  24. dept = #{dept},
  25. website = #{website},
  26. phone = #{phone}
  27. WHERE
  28. id =
  29. #{id}
  30. </update>
  31. <delete id="deleteUser" parameterType="int">
  32. DELETE FROM USER WHERE id = #{id}
  33. </delete>
  34. </mapper>
XML

测试程序主类:

  1. import java.io.Reader;
  2. import java.text.MessageFormat;
  3. import java.util.List;
  4. import org.apache.ibatis.io.Resources;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. import com.yiibai.mybatis.dao.IUser;
  9. import com.yiibai.mybatis.models.User;
  10. public class Main {
  11. private static SqlSessionFactory sqlSessionFactory;
  12. private static Reader reader;
  13. static {
  14. try {
  15. reader = Resources.getResourceAsReader("config/Configure.xml");
  16. sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. public static SqlSessionFactory getSession() {
  22. return sqlSessionFactory;
  23. }
  24. /**
  25. * @param args
  26. */
  27. public static void main(String[] args) {
  28. // TODO Auto-generated method stub
  29. SqlSession session = sqlSessionFactory.openSession();
  30. try {
  31. //sqlSessionFactory.getConfiguration().addMapper(IUser.class);
  32. //User user = (User) session.selectOne( "com.yiibai.mybatis.models.UserMapper.getUserByID", 1);
  33. // 用户数据列表
  34. getUserList();
  35. // 插入数据
  36. // testInsert();
  37. // 更新用户
  38. //testUpdate();
  39. // 删除数据
  40. //testDelete();
  41. } finally {
  42. session.close();
  43. }
  44. }
  45. //
  46. public static void testInsert()
  47. {
  48. try
  49. {
  50. // 获取Session连接
  51. SqlSession session = sqlSessionFactory.openSession();
  52. // 获取Mapper
  53. IUser userMapper = session.getMapper(IUser.class);
  54. System.out.println("Test insert start...");
  55. // 执行插入
  56. User user = new User();
  57. user.setId(0);
  58. user.setName("Google");
  59. user.setDept("Tech");
  60. user.setWebsite("http://www.google.com");
  61. user.setPhone("120");
  62. userMapper.insertUser(user);
  63. // 提交事务
  64. session.commit();
  65. // 显示插入之后User信息
  66. System.out.println("After insert");
  67. getUserList();
  68. System.out.println("Test insert finished...");
  69. }
  70. catch (Exception e)
  71. {
  72. e.printStackTrace();
  73. }
  74. }
  75. // 获取用户列表
  76. public static void getUserList() {
  77. try {
  78. SqlSession session = sqlSessionFactory.openSession();
  79. IUser iuser = session.getMapper(IUser.class);
  80. // 显示User信息
  81. System.out.println("Test Get start...");
  82. printUsers(iuser.getUserList());
  83. System.out.println("Test Get finished...");
  84. } catch (Exception e) {
  85. e.printStackTrace();
  86. }
  87. }
  88. public static void testUpdate()
  89. {
  90. try
  91. {
  92. SqlSession session = sqlSessionFactory.openSession();
  93. IUser iuser = session.getMapper(IUser.class);
  94. System.out.println("Test update start...");
  95. printUsers(iuser.getUserList());
  96. // 执行更新
  97. User user = iuser.getUser(1);
  98. user.setName("New name");
  99. iuser.updateUser(user);
  100. // 提交事务
  101. session.commit();
  102. // 显示更新之后User信息
  103. System.out.println("After update");
  104. printUsers(iuser.getUserList());
  105. System.out.println("Test update finished...");
  106. }catch (Exception e)
  107. {
  108. e.printStackTrace();
  109. }
  110. }
  111. // 删除用户信息
  112. public static void testDelete()
  113. {
  114. try
  115. {
  116. SqlSession session = sqlSessionFactory.openSession();
  117. IUser iuser = session.getMapper(IUser.class);
  118. System.out.println("Test delete start...");
  119. // 显示删除之前User信息
  120. System.out.println("Before delete");
  121. printUsers(iuser.getUserList());
  122. // 执行删除
  123. iuser.deleteUser(2);
  124. // 提交事务
  125. session.commit();
  126. // 显示删除之后User信息
  127. System.out.println("After delete");
  128. printUsers(iuser.getUserList());
  129. System.out.println("Test delete finished...");
  130. }catch (Exception e)
  131. {
  132. e.printStackTrace();
  133. }
  134. }
  135. /**
  136. *
  137. * 打印用户信息到控制台
  138. *
  139. * @param users
  140. */
  141. private static void printUsers(final List<User> users) {
  142. int count = 0;
  143. for (User user : users) {
  144. System.out.println(MessageFormat.format(
  145. "============= User[{0}]=================", ++count));
  146. System.out.println("User Id: " + user.getId());
  147. System.out.println("User Name: " + user.getName());
  148. System.out.println("User Dept: " + user.getDept());
  149. System.out.println("User Website: " + user.getWebsite());
  150. }
  151. }
  152. }
Java

测试运行

执行以上程序,如果没有问题,应该能正确输出。那么这里所有增删改查都完成了,需要注意的是在增加,更改,删除的时候需要调用 session.commit() 来提交事务,这样才会真正对数据库进行操作提交保存,否则操作没有提交到数据中。
到此为止,简单的单表操作已经完成了,接下来在下一节中将会讲解多表联合查询,以及结果集的选取。 如遇到不明白的问题,请留言评论。

最后,附上项目结构图,如下:

Mybatis增删改查(CURD)的更多相关文章

  1. MyBatis增删改查

    MyBatis的简介: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...

  2. 【Mybatis】简单的mybatis增删改查模板

    简单的mybatis增删改查模板: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE map ...

  3. vue实现对数据的增删改查(CURD)

    vue实现对数据的增删改查(CURD) 导语: 网上看到一个写的比较好的学习文章,转载分享一下 在管理员的一些后台页面里,个人中心里的数据列表里,都会有对这些数据进行增删改查的操作.比如在管理员后台的 ...

  4. MyBatis增删改查模板

    1. 首先,和Spring整合一下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...

  5. 最简单的mybatis增删改查样例

    最简单的mybatis增删改查样例 Book.java package com.bookstore.app; import java.io.Serializable; public class Boo ...

  6. Mybatis增删改查,Demo整合

    第一步:MyBatis的Jar包引入mybatis-3.2.7.jarmysql-connector-java-5.1.8.jar MyBatis的pom.xml依赖 <dependencies ...

  7. springboot整合mybatis增删改查(四):完善增删改查及整合swgger2

    接下来就是完成增删改查的功能了,首先在config包下配置Druid数据连接池,在配置之前先把相关配置在application.preperties中完善 application.preperties ...

  8. SpringBoot+Mybatis增删改查实战

    简介 SpringBoot和Mybatis是啥请自行百度,作者这里也是花了几天时间入门了这个框架用来完成任务,并且也算符合要求的完成了任务,期间也各种百度但是没找到自己想要的那种简单易懂的教程,所以踩 ...

  9. springboot&mybatis 增删改查系列(二)

    数据库篇 我的数据库名为data0525,数据表名为user,其中有五列uid,uname,upass,usex,umessage.uid为主键并且自动生成,由于是练习表,所以并没有考虑设计的合理性. ...

随机推荐

  1. Java 必须掌握的 12 种 Spring 常用注解!

    1.声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller ...

  2. [Windows Azure] How to Create and Deploy a Cloud Service?

    The Windows Azure Management Portal provides two ways for you to create and deploy a cloud service: ...

  3. python--使用MySQL数据库

    1.安装mysqlsudo apt-get install mysql-server Sudo apt-get install mysql-client 2.安装MySQL-python驱动sudo ...

  4. linux命令(43):awk的使用技巧

    AWK是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Fam ...

  5. 记录-UEFI启动的预装WIN8的笔记本里引导linux双系统

    新买了个联想笔记本,预装了WIN8,引导方式不再是几年前的MBR-BOIS引导了,是UEFI引导,所以,之前的grub4dos引导双系统方式都没用了. 现在把我装linux的关键过程记录下来,以备忘. ...

  6. Git修改已经提交的注释或日志

    对于已经修改提交过的注释,如果需要修改,可以借助 git commit --amend 来进行.(注意:修改日志的功能在svn中需要server支持,在git中可以独立修改) 注意:必须是最近提交,还 ...

  7. Java自动创建多层文件目录

    // 创建文件上传路径 public static void mkdir(String path) { File fd = null; try { fd = new File(path); if (! ...

  8. Ubuntu常用安装源

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份 sudo vim /etc/apt/sources.list #修改 sudo ...

  9. 解决maven项目 maven install失败 错误 Failed to execute goal org.apache.maven.plugins

    1.Maven构建失败 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin: 2.3.4 :compile ( ...

  10. jQuery弹性展开收缩菜单插件gooey.js

    分享一款基于jQuery弹性展开收缩菜单插件gooey.js.这是一款基于gooey.js插件实现的弹性菜单特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <hea ...