一、MyBatis 介绍

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

二、如何使用 MyBatis

我这里使用的 maven,所有目录也是基于 maven 的目录结构来说的。

1. 所需的 JAR 包

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>5.1.38</version>
  5. </dependency>
  6.  
  7. <dependency>
  8. <groupId>org.mybatis</groupId>
  9. <artifactId>mybatis</artifactId>
  10. <version>3.3.0</version>
  11. </dependency>
  12.  
  13. <dependency>
  14. <groupId>log4j</groupId>
  15. <artifactId>log4j</artifactId>
  16. <version>1.2.17</version>
  17. </dependency>

2. 创建数据库表

  1. CREATE TABLE person (
  2. personId int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  3. nickName varchar(200) DEFAULT NULL COMMENT '姓名',
  4. age int(11) DEFAULT NULL COMMENT '年龄',
  5. sex int(11) DEFAULT NULL COMMENT '性别',
  6. birthday timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '出生日期',
  7. PRIMARY KEY (personId)
  8. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

3. 创建一个实体类 Person.java

  1. package com.enh.bean;
  2.  
  3. import java.util.Date;
  4.  
  5. public class PersonBean {
  6.  
  7. private Integer personId;
  8.  
  9. private String nickName;
  10.  
  11. private Integer age;
  12.  
  13. private Integer sex;
  14.  
  15. private Date birthday;
  16.  
  17. public PersonBean() {
  18. }
  19. public PersonBean(String nickName, Integer age,
  20. Integer sex, Date birthday) {
  21. super();
  22. this.nickName = nickName;
  23. this.age = age;
  24. this.sex = sex;
  25. this.birthday = birthday;
  26. }
  27. public Integer getPersonId() {
  28. return personId;
  29. }
  30. public void setPersonId(Integer personId) {
  31. this.personId = personId;
  32. }
  33. ... get() set() 方法
    public Date getBirthday() {
  34. return birthday;
  35. }
  36. public void setBirthday(Date birthday) {
  37. this.birthday = birthday;
  38. }
  39. @Override
  40. public String toString() {
  41. return "PersonBean [personId=" + personId + ", nickName=" + nickName
  42. + ", age=" + age + ", sex=" + sex + ", birthday=" + birthday
  43. + "]";
  44. }
  45. }

4. 创建Dao层接口类 PersonMapper.java

  1. package com.enh.mapper;
  2.  
  3. import com.enh.bean.PersonBean;
  4.  
  5. public interface PersonMapper {
  6.  
  7. /**
  8. * @Description: 新增
  9. * @Author:
  10. * @CreateTime:
  11. * @param personBean
  12. * @return
  13. * @throws Exception
  14. */
  15. public Integer insert(PersonBean personBean) throws Exception;
  16.  
  17. }

5. 在 classpath 下创建 MyBatis 映射文件 com/enh/mapper/PersonMapper.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.enh.mapper.PersonMapper">
  6.  
  7. <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="personBean">
  8. INSERT INTO
  9. person (
  10. nickName,
  11. age,
  12. sex,
  13. birthday
  14. ) VALUES (
  15. #{nickName},
  16. #{age},
  17. #{sex},
  18. #{birthday}
  19. )
  20. </insert>
  21.  
  22. </mapper>

6. 在classpath下创建 MyBatis 配置文件 mybatis-config.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.  
  5. <configuration>
  6.  
  7. <!-- 引入外部文件 -->
  8. <properties resource="application.properties"></properties>
  9.  
  10. <!-- 为Java Bean起别名 -->
  11. <typeAliases>
  12. <typeAlias alias="personBean" type="com.enh.bean.PersonBean" />
  13. </typeAliases>
  14.  
  15. <!-- 配合MyBatis运行环境 -->
  16. <environments default="cybatis">
  17. <environment id="cybatis">
  18. <!-- 使用JDBC的提交和回滚来管理事物 -->
  19. <transactionManager type="JDBC"/>
  20.  
  21. <!-- mybatis提供了三种数据源类型,分别是 POOLED UNPOOLED JNDI -->
  22. <!-- POOLED 表示支持JDBC数据源连接池 -->
  23. <!-- UNPOOLED 表示不支持数据源连接池 -->
  24. <!-- JNDI 表示支持外部数据源连接池 -->
  25. <dataSource type="POOLED">
  26. <property name="driver" value="${jdbc.driver}"/>
  27. <property name="url" value="${jdbc.url}"/>
  28. <property name="username" value="${jdbc.username}"/>
  29. <property name="password" value="${jdbc.password}"/>
  30. </dataSource>
  31. </environment>
  32. </environments>
  33.  
  34. <!-- 映射文件 -->
  35. <mappers>
  36. <mapper resource="com/enh/mapper/PersonMapper.xml" />
  37. </mappers>
  38.  
  39. </configuration>

7. 在 classpath 路径下创建参数集文件 application.properties

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://127.0.0.1:3306/erim
  3. jdbc.username=root
  4. jdbc.password=root

8. 需要建立一个初始化 SqlSession 的工具类

  1. package com.enh.common;
  2.  
  3. import java.io.Reader;
  4.  
  5. import org.apache.ibatis.io.Resources;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.apache.ibatis.session.SqlSessionFactory;
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  9.  
  10. public class DBTools {
  11.  
  12. public static SqlSessionFactory sessionFactory;
  13.  
  14. static {
  15. try {
  16. // 使用MyBatis的Resources类加载配置文件
  17. Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
  18. // 构建SessionFactory实例
  19. sessionFactory = new SqlSessionFactoryBuilder().build(reader);
  20. } catch (Exception e) {
  21. e.printStackTrace();
  22. }
  23. }
  24.  
  25. public static SqlSession getSqlSession() {
  26. return sessionFactory.openSession();
  27. }
  28. }

9. 测试

  1. public static void main(String[] args) {
  2. SqlSession sqlSession = null;
  3. try {
  4. // 获取sqlSession
  5. sqlSession = DBTools.getSqlSession();
  6. PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
  7. PersonBean personBean = new PersonBean("张三", 18, 1, new Date());
  8. personMapper.insert(personBean);
  9. System.out.println(personBean.toString());
  10. } catch (Exception e) {
  11. e.printStackTrace();
  12. }
  13. }

MyBatis学习-入门篇的更多相关文章

  1. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

  2. MyBatis 学习入门

    mybatis 第一天 mybatis的基础知识 持久层的框架,对jdbc的封装 课程安排 第一天:基础知识(重点,内容量多) 最简单的jdbc程序 public class JdbcTest{ pu ...

  3. MyBatis学习-入门

    eclipse + jdk 1.8 + mybatis 1.数据库准备 安装mysql数据库,建立数据库test,在test库下建立测试的表 CREATE TABLE `t_user` ( `id` ...

  4. Python学习 - 入门篇1

    前言 学习渠道:慕课网:Python入门 记录原因:人总归要向记忆低头[微笑再见.gif] 记录目标:形成简洁的知识点查阅手册 变量和数据类型 变量 赋值 在Python中,可以把任意数据类型赋值给变 ...

  5. 一起学MyBatis之入门篇(2)

    概述 本文主要讲解MyBatis中类型转换的功能,其实在MyBatis中,提供了默认的数据类型之间的转换,但只是基本数据类型的转换,如果跨类型进行转换,则需要自定义转换类,如java中是boolean ...

  6. 一起学MyBatis之入门篇

    概述 本文以一个简单的小例子,简述在Java项目开发中MyBatis的基本用法,属于入门级文章,仅供学习分享使用,如有不足之处,还请指正. 什么是MyBatis? MyBatis 是一款优秀的持久层框 ...

  7. TensorFlow学习——入门篇

    本文主要通过一个简单的 Demo 介绍 TensorFlow 初级 API 的使用方法,因为自己也是初学者,因此本文的目的主要是引导刚接触 TensorFlow 或者 机器学习的同学,能够从第一步开始 ...

  8. 深度学习入门篇--手把手教你用 TensorFlow 训练模型

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:付越 导语 Tensorflow在更新1.0版本之后多了很多新功能,其中放出了很多用tf框架写的深度网络结构(https://git ...

  9. spring boot 学习入门篇【spring boot项目的搭建以及如何加载jsp界面】

    [ 前言]  Spring Boot 简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置, ...

随机推荐

  1. swift3.0 运行时获取类的属性

    //定义Person类 class Person: NSObject { var name: String? //注意这里基本数据类型我定义的是必选属性 var age: Int = override ...

  2. Lua 日志

    Lua 环境安装 编辑调试Lua脚本

  3. HostOnly模式下的Centos克隆虚拟机+配置固定ip

    首先在你想克隆的虚拟机上右击,选择管理下的克隆 让我们骚等一会~ ok,现在开机,这个时候是没有ip的 来修改一个文件 删掉红框中的内容,把箭头指的eth1改为eth0 在来修改一个文件 删掉红框的内 ...

  4. MIT线性代数课程 总结与理解-第一部分

    概述 个人认为线性代数从三个角度,或者说三个工具来阐述了线性关系,分别是: 向量 矩阵 空间 这三个工具有各自的一套方法,而彼此之间又存在这密切的联系,通过这些抽象出来的工具可以用来干一些实际的活,最 ...

  5. FZU 2088 最长队名

    Problem 2088 最长队名  Problem Description Jack所在的班级决定组团报名参加FZU校赛.为了体现班级的团结和睦,班长决定用班级所有人的名字连起来组成一个史上最长最醒 ...

  6. jquery 图片遮罩 坠落遮挡效果

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  7. 前端技术——WebFont与Sprite

    一.WebFont web font是应用在web中的一种字体技术,在CSS中使用font-face定义新的字体. 我们在文档中显示的字体应该在系统中能找到才会正常显示,比如你在word中使用了黑体字 ...

  8. AFURLRequestSerialization

    NSString * AFPercentEscapedStringFromString(NSString *string)   //去除非法字符并且对特殊字符进行编码.  //对字符串进行百分比编码 ...

  9. 项目中处理android 6.0权限管理问题

    android 6.0对于权限管理比较收紧,因此在适配android 6.0的时候就很有必要考虑一些权限管理的问题. 如果你没适配6.0的设备并且权限没给的话,就会出现类似如下的问题: java.la ...

  10. PHP 在 Nginx 下主动断开连接 Connection Close 与 ignore_user_abort 后台运行

    这两天弄个PHP调用 SVN 同步 update 多台服务器更新的程序,为了避免 commit 的时候不会被阻塞卡半天得想个办法只请求触发,而不需要等待程序 update 完成返回结果这样耗时太长,所 ...