什么是 MyBatis?

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

MyBatis下载:https://github.com/mybatis/mybatis-3/releases

Mybatis实例

对一个User表的CRUD操作:

User表:

  1. -- ----------------------------
  2. -- Table structure for `user`
  3. -- ----------------------------
  4. DROP TABLE IF EXISTS `user`;
  5. CREATE TABLE `user` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT,
  7. `userName` varchar(50) DEFAULT NULL,
  8. `userAge` int(11) DEFAULT NULL,
  9. `userAddress` varchar(200) DEFAULT NULL,
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
  12.  
  13. -- ----------------------------
  14. -- Records of user
  15. -- ----------------------------
  16. INSERT INTO `user` VALUES ('1', 'summer', '30', 'shanghai');
  17. INSERT INTO `user` VALUES ('2', 'test2', '22', 'suzhou');
  18. INSERT INTO `user` VALUES ('3', 'test1', '29', 'some place');
  19. INSERT INTO `user` VALUES ('4', 'lu', '28', 'some place');
  20. INSERT INTO `user` VALUES ('5', 'xiaoxun', '27', 'nanjing');

在Src目录下建一个mybatis的xml配置文件Configuration.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. <!-- mybatis别名定义 -->
  6. <typeAliases>
  7. <typeAlias alias="User" type="com.mybatis.test.User"/>
  8. </typeAliases>
  9.  
  10. <environments default="development">
  11. <environment id="development">
  12. <transactionManager type="JDBC"/>
  13. <dataSource type="POOLED">
  14. <property name="driver" value="com.mysql.jdbc.Driver"/>
  15. <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />
  16. <property name="username" value="root"/>
  17. <property name="password" value="admin"/>
  18. </dataSource>
  19. </environment>
  20. </environments>
  21.  
  22. <!-- mybatis的mapper文件,每个xml配置文件对应一个接口 -->
  23. <mappers>
  24. <mapper resource="com/mybatis/test/User.xml"/>
  25. </mappers>
  26. </configuration>

定义User mappers的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.  
  5. <mapper namespace="com.mybatis.test.IUserOperation">
  6.  
  7. <!-- select语句 -->
  8. <select id="selectUserByID" parameterType="int" resultType="User">
  9. select * from `user` where user.id = #{id}
  10. </select>
  11.  
  12. <!-- 定义的resultMap,可以解决类的属性名和数据库列名不一致的问题-->
  13. <!-- <resultMap type="User" id="userResultMap">
  14. <id property="id" column="user_id" />
  15. <result property="userName" column="user_userName" />
  16. <result property="userAge" column="user_userAge" />
  17. <result property="userAddress" column="user_userAddress" />
  18. </resultMap> -->
  19.  
  20. <!-- 返回list的select语句,注意 resultMap的值是指向前面定义好的 -->
  21. <!-- <select id="selectUsersByName" parameterType="string" resultMap="userResultMap">
  22. select * from user where user.userName = #{userName}
  23. </select> -->
  24.  
  25. <select id="selectUsersByName" parameterType="string" resultType="User">
  26. select * from user where user.userName = #{userName}
  27. </select>
  28.  
  29. <!--执行增加操作的SQL语句。id和parameterType分别与IUserOperation接口中的addUser方法的名字和参数类型一致。
  30. useGeneratedKeys设置为"true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到User的id属性-->
  31. <insert id="addUser" parameterType="User"
  32. useGeneratedKeys="true" keyProperty="id">
  33. insert into user(userName,userAge,userAddress)
  34. values(#{userName},#{userAge},#{userAddress})
  35. </insert>
  36.  
  37. <update id="updateUser" parameterType="User" >
  38. update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}
  39. </update>
  40.  
  41. <delete id="deleteUser" parameterType="int">
  42. delete from user where id=#{id}
  43. </delete>
  44.  
  45. </mapper>

配置文件实现了接口和SQL语句的映射关系。selectUsersByName采用了2种方式实现,注释掉的也是一种实现,采用resultMap可以把属性和数据库列名映射关系定义好,property为类的属性,column是表的列名,也可以是表列名的别名!

User类的定义:

  1. package com.mybatis.test;
  2.  
  3. public class User {
  4.  
  5. private int id;
  6. private String userName;
  7. private int userAge;
  8. private String userAddress;
  9.  
  10. public int getId() {
  11. return id;
  12. }
  13.  
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17.  
  18. public String getUserName() {
  19. return userName;
  20. }
  21.  
  22. public void setUserName(String userName) {
  23. this.userName = userName;
  24. }
  25.  
  26. public int getUserAge() {
  27. return userAge;
  28. }
  29.  
  30. public void setUserAge(int userAge) {
  31. this.userAge = userAge;
  32. }
  33.  
  34. public String getUserAddress() {
  35. return userAddress;
  36. }
  37.  
  38. public void setUserAddress(String userAddress) {
  39. this.userAddress = userAddress;
  40. }
  41.  
  42. @Override
  43. public String toString(){
  44. return this.userName+" "+this.userAge+" "+this.userAddress;
  45. }
  46.  
  47. }

IUserOperaton定义:

  1. package com.mybatis.test;
  2.  
  3. import java.util.List;
  4.  
  5. public interface IUserOperation {
  6.  
  7. public User selectUserByID(int id);
  8.  
  9. public List<User> selectUsersByName(String userName);
  10.  
  11. public void addUser(User user);
  12.  
  13. public void updateUser(User user);
  14.  
  15. public void deleteUser(int id);
  16.  
  17. }

IUserOperation为操作接口,函数名和mybatis的xml配置文件中的操作id名对应。

测试类Test:

  1. package com.mybatis.test;
  2.  
  3. import java.io.Reader;
  4. import java.util.List;
  5.  
  6. import org.apache.ibatis.io.Resources;
  7. import org.apache.ibatis.session.SqlSession;
  8. import org.apache.ibatis.session.SqlSessionFactory;
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  10.  
  11. public class Test {
  12.  
  13. private static SqlSessionFactory sqlSessionFactory;
  14. private static Reader reader;
  15.  
  16. static {
  17. try {
  18. reader = Resources.getResourceAsReader("Configuration.xml");
  19. sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  20. } catch (Exception e) {
  21. e.printStackTrace();
  22. }
  23. }
  24.  
  25. public static SqlSessionFactory getSession() {
  26. return sqlSessionFactory;
  27. }
  28.  
  29. public void getUserByID(int userID) {
  30. SqlSession session = sqlSessionFactory.openSession();
  31. try {
  32. IUserOperation userOperation = session
  33. .getMapper(IUserOperation.class);
  34. User user = userOperation.selectUserByID(userID);
  35. if (user != null) {
  36. System.out.println(user.getId() + ":" + user.getUserName()
  37. + ":" + user.getUserAddress());
  38. }
  39.  
  40. } finally {
  41. session.close();
  42. }
  43. }
  44.  
  45. public void getUserList(String userName) {
  46. SqlSession session = sqlSessionFactory.openSession();
  47. try {
  48. IUserOperation userOperation = session
  49. .getMapper(IUserOperation.class);
  50. List<User> users = userOperation.selectUsersByName(userName);
  51. for (User user : users) {
  52. System.out.println(user.getId() + ":" + user.getUserName()
  53. + ":" + user.getUserAddress());
  54. }
  55.  
  56. } finally {
  57. session.close();
  58. }
  59. }
  60.  
  61. /**
  62. * 增加后要commit
  63. */
  64. public void addUser() {
  65. User user = new User();
  66. user.setUserAddress("place");
  67. user.setUserName("test_add");
  68. user.setUserAge(30);
  69. SqlSession session = sqlSessionFactory.openSession();
  70. try {
  71. IUserOperation userOperation = session
  72. .getMapper(IUserOperation.class);
  73. userOperation.addUser(user);
  74. session.commit();
  75. System.out.println("新增用户ID:" + user.getId());
  76. } finally {
  77. session.close();
  78. }
  79. }
  80.  
  81. /**
  82. * 修改后要commit
  83. */
  84. public void updateUser() {
  85. SqlSession session = sqlSessionFactory.openSession();
  86. try {
  87. IUserOperation userOperation = session
  88. .getMapper(IUserOperation.class);
  89. User user = userOperation.selectUserByID(1);
  90. if (user != null) {
  91. user.setUserAddress("A new place");
  92. userOperation.updateUser(user);
  93. session.commit();
  94. }
  95. } finally {
  96. session.close();
  97. }
  98. }
  99.  
  100. /**
  101. * 删除后要commit.
  102. *
  103. * @param id
  104. */
  105. public void deleteUser(int id) {
  106. SqlSession session = sqlSessionFactory.openSession();
  107. try {
  108. IUserOperation userOperation = session
  109. .getMapper(IUserOperation.class);
  110. userOperation.deleteUser(id);
  111. session.commit();
  112. } finally {
  113. session.close();
  114. }
  115. }
  116.  
  117. public static void main(String[] args) {
  118. try {
  119. Test test = new Test();
  120. // test.getUserByID(1);
  121. // test.getUserList("test1");
  122. // test.addUser();
  123. // test.updateUser();
  124. // test.deleteUser(6);
  125.  
  126. } catch (Exception e) {
  127. System.out.println(e.getMessage());
  128. }
  129. }
  130.  
  131. }

原文相关地址:

代码下载:http://download.csdn.net/detail/luxiaoxun/8056559

Source Code:https://github.com/luxiaoxun/MybatisDemo

参考:

MyBatis-3-User-Guide-zh

http://legend2011.blog.51cto.com/3018495/d-5

http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html

转!!!Mybatis实现数据的增删改查(CRUD)的更多相关文章

  1. Mybatis实现数据的增删改查

    Mybatis实现数据的增删改查 1.项目结构(使用maven创建项目) 2.App.java package com.GetcharZp.MyBatisStudy; import java.io.I ...

  2. idea+spring4+springmvc+mybatis+maven实现简单增删改查CRUD

    在学习spring4+springmvc+mybatis的ssm框架,idea整合简单实现增删改查功能,在这里记录一下. 原文在这里:https://my.oschina.net/finchxu/bl ...

  3. mybatis ---- 实现数据的增删改查

    前面介绍了接口方式的编程,需要注意的是:在book.xml文件中,<mapper namespace="com.mybatis.dao.IBookDao"> ,命名空间 ...

  4. Mybatis实现数据的增删改查(CRUD)

    什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索.MyBat ...

  5. ES 16 - 对Elasticsearch中的索引数据进行增删改查 (CRUD)

    目录 1 创建document 1.1 创建时手动指定id 1.2 创建时自动生成id 2 查看document 2.1 根据id查询文档 2.2 通过_source字段控制查询结果 3 修改docu ...

  6. Mybatis框架基于注解的方式,实对数据现增删改查

    编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...

  7. Mybatis学习总结(二)—使用接口实现数据的增删改查

    在这一篇中,让我们使用接口来实现一个用户数据的增删改查. 完成后的项目结构如下图所示: 在这里,person代表了一个用户的实体类.在该类中,描述了相关的信息,包括id.name.age.id_num ...

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

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

  9. dbutils中实现数据的增删改查的方法,反射常用的方法,绝对路径的写法(杂记)

    jsp的三个指令为:page,include,taglib... 建立一个jsp文件,建立起绝对路径,使用时,其他jsp文件导入即可 导入方法:<%@ include file="/c ...

随机推荐

  1. 关于List.ToArray()方法的效率测试

    之前一直认为因为List内部是数组,ToArray的实现只是将数组返回出去而已. 今天测了一下发现并不是那样 var a = new List<int>(); ; i < ; i++ ...

  2. Uva(10048),最短路Floyd

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  3. 关于MYSQL group by 分组按时间取最大值的实现方法!

    类如 有一个帖子的回复表,posts( id , tid , subject , message , dateline ) , id 为 自动增长字段, tid为该回复的主题帖子的id(外键关联), ...

  4. Json 入门例子 多行数组 【1】

    处理以上数据 <script type="text/javascript"> $(function () { $("#fm").click(func ...

  5. 摩托罗拉SE4500 德州仪器TI Omap37xx/AM3715/DM3730/AM3530 wince6.0/Windows Mobile 6.5平台 二维软解调试记录及相关解释

    现在安卓大行其道,不是高通,就是MTK,甚至于很多人不知道还有德州仪器这个平台了,关于如何在德州仪器Omap37xx平台上调试SE4500,网络上除了针对SE4500的几个pdf文档介绍之外,没有任何 ...

  6. HTTP传送协议

    HTTP传送协议--学习笔记 HTTP数据传输格式 基本格式为: 请求或应答行 请求或应答头部 空行 数据 POST传送格式 底层数据通信: 客户端请求: POST /response.php HTT ...

  7. 【转载】简述Linux的启动过程

    原文:简述Linux的启动过程 本文将简单介绍一下Linux的启动过程,希望对那些安装Linux的过程中遇到了问题的朋友有些帮助 声明:本人没用过UEFI模式和GPT分区格式,所有关于这两部分的内容都 ...

  8. ubuntu Linux 测试PHP却提示下载文件的解决办法

    ubuntu Linux 测试PHP却提示下载文件的解决办法   一般这种情况都是在刚刚开始配置环境时出现的, 输入 sudo a2enmod php5  看提示如果出现“$ This module ...

  9. 1:wamp如何更改网站根目录DocumentRoot 2:php的error_log文件(txt)会每秒几十K增大

    wamp如何更改网站根目录DocumentRoot     想必很多人都使用wamp来开发php的web应用吧,同时某些情况下我们或许需要修改服务器的根目录来方便我们搭建和开发网站,接下里我们将说明如 ...

  10. ggplot2 legend图例的修改

    ggplot2中的legend包括四个部分: legend.tittle, legend.text, legend.key, legend.backgroud.针对每一部分有四种处理方式: eleme ...