MyBatis学习-入门篇

一、MyBatis 介绍

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

 

二、如何使用 MyBatis

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

1. 所需的 JAR 包

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.3.0</version>
</dependency>
        
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

2. 创建数据库表

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

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

package com.enh.bean;

import java.util.Date;

public class PersonBean {

    private Integer personId;
    
    private String nickName;
    
    private Integer age;
    
    private Integer sex;
    
    private Date birthday;
    
    public PersonBean() {
    }
    public PersonBean(String nickName, Integer age,
            Integer sex, Date birthday) {
        super();
        this.nickName = nickName;
        this.age = age;
        this.sex = sex;
        this.birthday = birthday;
    }
    public Integer getPersonId() {
        return personId;
    }
    public void setPersonId(Integer personId) {
        this.personId = personId;
    }
    ... get() set() 方法
public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @Override public String toString() { return "PersonBean [personId=" + personId + ", nickName=" + nickName + ", age=" + age + ", sex=" + sex + ", birthday=" + birthday + "]"; } }

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

package com.enh.mapper;

import com.enh.bean.PersonBean;

public interface PersonMapper {

    /**
     * @Description: 新增
     * @Author: 
     * @CreateTime: 
     * @param personBean
     * @return
     * @throws Exception
     */
    public Integer insert(PersonBean personBean) throws Exception;

}

5. 在 classpath 下创建 MyBatis 映射文件 com/enh/mapper/PersonMapper.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.enh.mapper.PersonMapper">
    
    <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="personBean">
        INSERT INTO 
            person (
                nickName,
                age,
                sex,
                birthday
            ) VALUES (
                #{nickName},
                #{age},
                #{sex},
                #{birthday}
            )
    </insert>
    
</mapper>

6. 在classpath下创建 MyBatis 配置文件 mybatis-config.xml

<?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>
    
    <!-- 引入外部文件 -->
    <properties resource="application.properties"></properties>
    
    <!-- 为Java Bean起别名 -->
    <typeAliases>
        <typeAlias alias="personBean" type="com.enh.bean.PersonBean" />
    </typeAliases>

    <!-- 配合MyBatis运行环境 -->
    <environments default="cybatis">
        <environment id="cybatis">
            <!-- 使用JDBC的提交和回滚来管理事物 -->
            <transactionManager type="JDBC"/>
            
            <!-- mybatis提供了三种数据源类型,分别是 POOLED UNPOOLED JNDI -->
            <!-- POOLED 表示支持JDBC数据源连接池 -->
            <!-- UNPOOLED 表示不支持数据源连接池 -->
            <!-- JNDI 表示支持外部数据源连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    
    <!-- 映射文件 -->
    <mappers>
        <mapper resource="com/enh/mapper/PersonMapper.xml" />
    </mappers>
    
</configuration>

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

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

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

package com.enh.common;

import java.io.Reader;

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

public class DBTools {

    public static SqlSessionFactory sessionFactory;
    
    static {
        try {
            // 使用MyBatis的Resources类加载配置文件
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            // 构建SessionFactory实例
            sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static SqlSession getSqlSession() {
        return sessionFactory.openSession();
    }
}

9. 测试

public static void main(String[] args) {
    SqlSession sqlSession = null;
    try {
        // 获取sqlSession
        sqlSession = DBTools.getSqlSession();
        PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
        PersonBean personBean = new PersonBean("张三", 18, 1, new Date());
        personMapper.insert(personBean);
        System.out.println(personBean.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }
}    

 

posted @ 2016-12-21 16:39  宁采桃花不采臣  阅读(404)  评论(0编辑  收藏  举报