Windows下Java+MyBatis框架+MySQL的开发环境搭建教程

 更新时间:2016年04月06日 14:40:21   作者:红烧狮子头  
这篇文章主要介绍了Windows下Java+MyBatis框架+MySQL的开发环境搭建教程,Mybatis对普通SQL语句的支持非常好,需要的朋友可以参考下

MyBatis是一个Java持久化框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来。

MyBatis是在Apache许可证 2.0下分发的自由软件,是iBATIS 3.0的分支版本。其维护团队也包含iBATIS的初创成员。
与其他的对象关系映射框架不同,MyBatis并没有将Java对象与数据库表关联起来,而是将Java方法与SQL语句关联。MyBatis允许用户充分利用数据库的各种功能,例如存储过程、视图、各种复杂的查询以及某数据库的专有特性。如果要对遗留数据库、不规范的数据库进行操作,或者要完全控制SQL的执行,MyBatis是一个不错的选择。

与JDBC相比,MyBatis简化了相关代码:SQL语句在一行代码中就能执行。MyBatis提供了一个映射引擎,声明式的把SQL语句执行结果与对象树映射起来。通过使用一种内建的类XML表达式语言,或者使用Apache Velocity集成的插件,SQL语句可以被动态的生成。

MyBatis与Spring Framework和Google Guice集成,这使开发者免于依赖性问题。

MyBatis支持声明式数据缓存(declarative data caching)。当一条SQL语句被标记为“可缓存”后,首次执行它时从数据库获取的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次命中数据库。MyBatis提供了默认下基于Java HashMap的缓存实现,以及用于与OSCache、Ehcache、Hazelcast和Memcached连接的默认连接器。MyBatis还提供API供其他缓存实现使用。 

要点
这段时间学习下来,其实对Mybatis来说主要的过程无法是以下几步

  1. 从XML配置文件中获取SessionFactory,然后由SessionFactory产生相应的Session。

  2. 是用Session对象对业务数据完成相应的CRUD操作(增删改查)和相应的事务控制。

  3. 使用完毕后关闭相应的Session,以免过度占用资源

  4. 使用配置相应的Mapper xml文件进行业务实体的JavaBean与数据库表之间做相应的Map操作

战前准备:

  1. 开发环境Eclipse JavaEE IDE,JDK 1.6,数据库mysql 5.5

  2. 下载相应Jar包,以备后用

    mybatis-3.2.3.zip 解压后拿出 mybatis-3.2.3.jar,=> 下载地址: http://code.google.com/p/mybatis/ (Mybatis核心包)

    mybatis-generator-core-1.3.1.jar => 下载地址: http://code.google.com/p/mybatis/wiki/Generator (Mybatis自动生成配置文件包)

    mysql-connector-java-5.1.26-bin.jar => 下载地址:http://dev.mysql.com/downloads/connector/j/ (Mysql 的jdbc驱动包)

搭建步骤  

  接下来大家可以再Eclipse下面建一个名为MybatisDemo的Java Project项目,按照如下图中所示新建相应的包结构和文件夹结构,其中config与mapper分别为文件夹,

  包david.mybatis.demo与包david.mybatis.model下分别存放相应的demo运行程序与Javabean对象,lib文件夹下存放刚刚下载的那几个第三方jar包。

201646141757210.png (406×604)

建完下面的目录,我们可以添加相应的Jar包,如下图

201646141820515.png (1029×729)

201646141852872.png (332×102)

完成后,执行下面SQL,建立DEMO所需的表结构,分别有3张表,Visitor(访问者表),Website(网站表),Channel(频道表)

/*创建Visitor*/
CREATE TABLE Visitor
(
  Id INT(11) NOT NULL AUTO_INCREMENT,
  Name VARCHAR(1000) NOT NULL,
  Email VARCHAR(1000) NOT NULL,
  Status INT NOT NULL DEFAULT 1,
  CreateTime DateTime,
  PRIMARY KEY(Id)
)
/*创建网站表*/
CREATE TABLE Website
(
  Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  Name VARCHAR(1000) NOT NULL,
  VisitorId INT REFERENCES Visitor(Id),
  Status INT NOT NULL DEFAULT 1,
  CreateTime DateTime
)

/*创建频道表*/
CREATE TABLE Channel
(
  Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  Name VARCHAR(1000) NOT NULL,
  WebsiteId INT REFERENCES Website(Id),
  Status INT NOT NULL DEFAULT 1,
  CreateTime DateTime
)

所有这些都完成后,我们就要开始动手啦~

就像开头说的,Mybatis的所有配置都源于一份XML配置文件,我们需要在config文件夹下,新建名为mybatis_demo_config.xml的配置文件,这一份东西就是我们后面所需要操作的核心之一。

在配置这个文件千万要注意<configuration>节点内的元素都是有层级顺序的要求的,不能够随意更换次序,否则在加载xml配置文件的时候会出现异常而导致后续操作不成功。

具体的节点说明大家可以查看http://mybatis.github.io/mybatis-3/zh/configuration.html#,这里只说比较常用的节点,typeAliases,environments,mappers。

1. typeAliases => 别名节点,可以通过设置这个节点的属性,这样配置文件中其他需要实体名字的地方都可以使用此别名而不是完全限定名

例如 <typeAlias type="david.mybatis.model.Visitor" alias="Visitor" />

2. environments => 环境节点,配置数据连接相关的信息

3. mappers => 配置SQL映射语句。

最简单的配置如下:

<?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>
  <typeAliases>
    <typeAlias type="david.mybatis.model.Visitor" alias="Visitor" />
  </typeAliases>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"></transactionManager>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver" />
        <!-- ?useUnicode=true&amp;characterEncoding=utf8为了支持中文插入 -->
        <property name="url"
          value="jdbc:mysql://127.0.0.1:3306/mybatis_db?useUnicode=true&amp;characterEncoding=utf8" />
        <property name="username" value="root" />
        <property name="password" value="123456" />
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="mapper/VisitorMapper.xml" />
  </mappers>
</configuration>

在包david.mybatis.demo下面新建一个名为MyBatisUtils类,里面存放获取SqlSession与关闭SqlSession的方法,提炼出来方便多次复用。

package david.mybatis.demo;

import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import david.mybatis.model.CRUD_Enum;

public class MybatisUtils {

  private static final String CONFIG_PATH = "config/mybatis_demo_config.xml";

  /*
   * 获取数据库访问链接
   */
  public static SqlSession getSqlSession() {
    SqlSession session = null;
    try {
      InputStream stream = Resources.getResourceAsStream(CONFIG_PATH);
      //可以根据配置的相应环境读取相应的数据库环境
      // SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(
      // stream, "development"); 
      SqlSessionFactory factory = new SqlSessionFactoryBuilder()
          .build(stream);
      session = factory.openSession();
    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
    return session;
  }

  /*
   * 获取数据库访问链接
   */
  public static void closeSession(SqlSession session) {
    session.close();
  }
  
  /*
   * 返回操作记录消息
   */
  public static void showMessages(CRUD_Enum type, int count) {
    switch (type) {
    case Add:
      System.out.println("添加了" + count + "条记录。");
      break;
    case Delete:
      System.out.println("删除了" + count + "条记录。");
      break;
    case Update:
      System.out.println("更新了" + count + "条记录。");
      break;
    case Query:
      System.out.println("匹配了" + count + "条记录。");
      break;
    case List:
      System.out.println("共有" + count + "条记录。");
      break;
    default:
      break;
    }
  }
}

在包david.mybatis.model下面新建一个名为Visitor的类,用来作相应的OR Mapping。

package david.mybatis.model;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Visitor {
  private int id;
  private String name;
  private String email;
  private int status;
  private Date createTime;

  public Visitor() {
    // TODO Auto-generated constructor stub
    createTime = new Date();
  }

  public Visitor(String name, String email) {
    this.name = name;
    this.email = email;
    this.status = 1;
    this.createTime = new Date();
  }

  public int getId() {
    return id;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }

  public void setEmail(String email) {
    this.email = email;
  }

  public String getEmail() {
    return email;
  }

  public Date getCreateTime() {
    return createTime;
  }

  @Override
  public String toString() {
    // TODO Auto-generated method stub
    return String.format("{Id: %d, Name: %s, CreateTime: %s}", id, name,
        new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime));
  }
}

在包david.mybatis.demo下面新建一个VisitorMapper.xml,用来映射相应SQL语句。

这里要注意namespace=>david.mybatis.demo.IVisitorOperation一定要与对应这个包下面的实际文件名,IVisitorOperation否则无法成功加载相应的映射文件

<mapper namespace="david.mybatis.demo.IVisitorOperation">
  <select id="basicQuery" parameterType="int" resultType="Visitor">
    select * from visitor where id=#{id} and
    Status>0 order by Id
  </select>
</mapper>

接下来运行下面的程序

 public static void testBasicQuery(int id) {
    SqlSession session = MybatisUtils.getSqlSession();
    try {
      Visitor visitor = (Visitor) session.selectOne("david.mybatis.demo.IVisitorOperation.basicQuery", id);
      MybatisUtils.closeSession(session);
      System.out.println(visitor);
    } catch (Exception e) {
      // TODO: handle exception
    }
  }

一个最简单的执行结果就出来啦

201646142039597.png (546×121)

这算是Mybatis系列的HelloWord~

相关文章

  • 浅析java 10中的var关键字用法

    浅析java 10中的var关键字用法

    2018年3月20日,Oracle发布java10。java10为java带来了很多新特性。这篇文章主要介绍了Java 10 var关键字详解和示例教程,需要的朋友可以参考下
    2018-10-10
  • windows下java -jar 后台运行以及杀死后台进程的操作

    windows下java -jar 后台运行以及杀死后台进程的操作

    这篇文章主要介绍了windows下java -jar 后台运行以及杀死后台进程的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Spring MVC文件请求处理MultipartResolver详解

    Spring MVC文件请求处理MultipartResolver详解

    这篇文章主要介绍了Spring MVC文件请求处理详解:MultipartResolver,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • Spring 动态代理实现代码实例

    Spring 动态代理实现代码实例

    这篇文章主要介绍了Spring 动态代理实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Java使用agent实现main方法之前的实例详解

    Java使用agent实现main方法之前的实例详解

    这篇文章主要介绍了Java使用agent实现main方法之前的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下
    2017-10-10
  • Java的stream流多个字段排序的实现

    Java的stream流多个字段排序的实现

    本文主要介绍了Java的stream流多个字段排序的实现,主要是两种方法,第一种是固定多个字段排序和第二种动态字段进行排序,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Java中的值传递以及引用传递和数组传递详解

    Java中的值传递以及引用传递和数组传递详解

    这篇文章主要介绍了Java中的值传递以及引用传递和数组传递详解,Java不允许程序员选择按值传递还是按引用传递各个参数,就对象而言,不是将对象本身传递给方法,而是将对象的的引用或者说对象的首地址传递给方法,引用本身是按值传递的,需要的朋友可以参考下
    2023-07-07
  • java实现合并单元格的同时并导出excel示例

    java实现合并单元格的同时并导出excel示例

    这篇文章主要给大家介绍了关于java实现合并单元格的同时并导出excel的相关资料,文中先进行了简单的介绍,之后给出了详细的示例代码,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • JavaWeb组件Servlet使用实例解析

    JavaWeb组件Servlet使用实例解析

    这篇文章主要介绍了JavaWeb组件Servlet使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 基于SpringBoot和Vue3的博客平台文章列表与分页功能实现

    基于SpringBoot和Vue3的博客平台文章列表与分页功能实现

    在前面的教程中,我们已经实现了基于Spring Boot和Vue3的发布、编辑、删除文章功能。本教程将继续引导您实现博客平台的文章列表与分页功能,需要的朋友可以参考阅读
    2023-04-04

最新评论