MyBatis入门实例

来源:互联网 发布:通江集团 知乎 编辑:程序博客网 时间:2024/06/07 05:25

MyBatis入门实例

一、概述

        MyBatis是一个优秀的持久层框架,ORM框架,可以使用XML配置文件或者接口加注解的方式来简化DAO操作,大大方便了SQL语句的管理。同时,MyBatis还支持动态SQL语句。由于注解的功能极为有限,这里采用XML配置文件的方式。

二、创建数据库和数据表

        在MySQL创建数据库和数据表:

CREATE DATABASE test;CREATE TABLE `student` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(50) NOT NULL,  `sex` char(1) NOT NULL,  `age` int(11) DEFAULT NULL,  `birthday` datetime DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

三、在IDEA创建Maven项目

        参考http://blog.csdn.net/ac_dao_di/article/details/54233520,最后在pom.xml添加MyBatis和MySQL依赖的jar包:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.baobao</groupId>  <artifactId>javaee_idea</artifactId>  <packaging>war</packaging>  <version>1.0-SNAPSHOT</version>  <name>javaee_idea Maven Webapp</name>  <url>http://maven.apache.org</url>  <dependencies>    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->    <dependency>      <groupId>org.mybatis</groupId>      <artifactId>mybatis</artifactId>      <version>3.4.1</version>    </dependency>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>RELEASE</version>      <scope>test</scope>    </dependency>    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->    <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>      <version>6.0.5</version>    </dependency>  </dependencies>  <build>    <plugins>      <plugin>        <groupId>org.apache.tomcat.maven</groupId>        <artifactId>tomcat7-maven-plugin</artifactId>        <version>2.2</version>        <configuration>          <!-- 注意此处的url,上传javaee_idea.war到url,此时本地的tomcat服务器必须开启 -->          <url>http://localhost:8080/manager/text</url>          <!-- 此处的名字必须和setting.xml中配置的ID一致,而该id对应的用户必须在tomcat的conf/tomcat-users.xml有配置-->          <server>tomcat8</server>          <!-- 此处的名字是项目发布的工程名 : http://localhost:8080/javaee_idea,也是war名-->          <path>/javaee_idea</path>        </configuration>      </plugin>    </plugins>    <finalName>javaee_idea</finalName>  </build></project>

四、创建持久层类

4.1 创建JavaBean

        对应上面的数据库表student新建一个JavaBean: src/main/java/com.baobao.Student:

package com.baobao;import java.util.Date;/** * Created by gzx on 17-1-8. */public class Student {    private int id;    private String name;    private Date birthday;    private String sex;    private int age;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "Student{" +                "id=" + id +                ", name='" + name + '\'' +                ", birthday=" + birthday +                ", sex='" + sex + '\'' +                ", age=" + age +                '}';    }}

4.2 创建MyBatis核心配置文件

        在main/resources/下建立MyBatis的配置文件mybatis.xml,文件名可以任意取。这个文件主要是配置数据库的驱动信息和连接信息,以及配置好类的类型别名,所有JavaBean的Mapper文件路径。

<?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>    <!-- 类名比较长,起别名,在Mapper文件中可以使用-->    <typeAliases>        <typeAlias type="com.baobao.Student" alias="Student"/>    </typeAliases>    <environments default="development">        <environment id="development">            <!-- 事务管理类型,JDBC表示直接使用JDBC的提交和回滚设置,依赖于数据源得到的连接来管理事务 -->            <transactionManager type="JDBC" />            <!-- 数据库连接池POOLED表示使用数据库连接池 -->            <dataSource type="POOLED">                <property name="driver" value="com.mysql.jdbc.Driver" />                <property name="url" value="jdbc:mysql://localhost:3306/test" />                <property name="username" value="root" />                <property name="password" value="201314" />            </dataSource>        </environment>    </environments>    <mappers>        <!-- SQL代码和映射信息配置文件 -->        <mapper resource="com/baobao/studentMapper.xml" />    </mappers></configuration>

4.3 创建Mapper文件,实现DAO

        在main/resources/下建立上面mybatis.xml文件里的Mapper文件:com/baobao/studentMapper.xml。对于每个JavaBean,都可以写一个对应的Mapper文件。这个文件封装了数据表和JavaBean的映射关系,对该数据表的操作,主要是增删改查。

<?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"><!-- namespace必须是唯一的,建议用该文件所在的包路径全类名 --><mapper namespace="com.baobao.studentMapper">    <!-- id是主键,result是其他属性,完成JavaBean和数据库表字段的映射-->    <!-- 当名字不对应时,需要完成映射-->    <!--    <resultMap type="Student" id="studentResultMap">        <id column="id" jdbcType="int" property="id" javaType="int"/>        <result column="name" jdbcType="varchar" property="name" javaType="String"/>        <result column="sex" jdbcType="char" property="sex" javaType="String"/>        <result column="age" jdbcType="int" property="age" javaType="int"/>        <result column="birthday" jdbcType="Date" property="birthday" javaType="Date"/>    </resultMap>-->    <!-- DAO 操作 -->    <!-- #{} 表示一个属性getId(),注意parameterType只能是Map或者基本类型或者自定义类,不能有多个parameterType-->    <select id="getStudentById" parameterType="int" resultType="Student">        <!-- #{id}:表示占位符,也就是调用时必须为其传一个id参数进来,注意是#不是$ -->        select * from student where id = #{id}    </select>    <!-- 输入字符串参数 -->    <select id="getStudentByName" parameterType="String" resultType="Student">        <!-- #{id}:表示占位符,也就是调用时必须为其传一个id参数进来,注意是#不是$ -->        select * from student where name = #{name}    </select>    <!-- 指定ID为主键,并自动生成主键 -->    <insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="id">        insert into student(name, sex, age, birthday) values(#{name}, #{sex}, #{age}, #{birthday})    </insert>    <!-- 输入Student参数-->    <update id="updateStudent" parameterType="Student">        update student set name=#{name}, sex=#{sex},age=#{age},birthday=#{birthday} where id=#{id}    </update>    <delete id="deleteStudent" parameterType="int">        delete from student where id=#{id}    </delete></mapper>

五、使用MyBatis API

5.1 创建获取SqlSessionFactory单例的工厂类

        在src/main/java/下创建一个工厂类com.baobao.Factory,使得全局只用一个实例SqlSessionFactory。

package com.baobao;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;public class Factory{    private static SqlSessionFactory sqlSessionFactory;    static{        // 1. 加载MyBatis的配置文件:mybatis.xml(它也加载关联的映射文件,也就是mappers结点下的映射文件)        InputStream in = Factory.class.getClassLoader().getResourceAsStream("mybatis.xml");        assert(in != null);        // 2. SqlSessionFactoryBuidler实例将通过输入流调用build方法来构建 SqlSession 工厂        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);        try {            in.close();        } catch (IOException e) {            e.printStackTrace();        }    }    /**     * 整个应用只用一个单例的factory     * @return     */    public static SqlSessionFactory getSqlSessionFactory(){        return sqlSessionFactory;    }}

5.2 创建单元测试类

        创建test/java/com.baobao.TestMybatis,实现对Student数据表操作的测试。这里主要是使用MyBatis的API:通过加载MyBatis的配置文件,实现对数据表的增删改查。

package com.baobao;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.junit.Test;import java.util.Calendar;import java.util.List;public class TestMybatis {    @Test    public void testGetStudent(){        System.out.println(".............................getStudent.............................");        // 获取工厂        SqlSessionFactory sqlSessionFactory = Factory.getSqlSessionFactory();        // 通过工厂获取 SqlSession 实例,SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。        SqlSession session = sqlSessionFactory.openSession();        System.out.println("one...");        // 通过namespace.id定位SQL语句        String statement = "com.baobao.studentMapper.getStudentById";        // select API : 获取一条记录        Student student = session.selectOne(statement, 3);        System.out.println(student);        System.out.println("list...");        statement = "com.baobao.studentMapper.getStudentByName";        String name = "Tom";        // select API : 获取一个list        List<Student> list = session.selectList(statement, name);        for(Student tmp : list){            System.out.println(tmp);        }        // 关闭输入流和SqlSession实例。SqlSession当场销毁        session.close();    }    @Test    public void testInsertStudent(){        System.out.println(".............................insertStudent.............................");        SqlSessionFactory sqlSessionFactory = Factory.getSqlSessionFactory();        SqlSession session = sqlSessionFactory.openSession();        Student student = new Student();        student.setName("Tom");        student.setAge(27);        student.setSex("m");        Calendar calendar = Calendar.getInstance();        //calendar.set(1995, 8, 20, 11, 23, 47);        student.setBirthday(calendar.getTime());        // insert API        int cnt = session.insert("com.baobao.studentMapper.insertStudent", student);        assert(cnt == 1);        // 事务必须提交,否则不起作用        session.commit();        session.close();    }    @Test    public void testDeleteStudent(){        System.out.println(".............................deleteStudent.............................");        SqlSessionFactory sqlSessionFactory = Factory.getSqlSessionFactory();        SqlSession session = sqlSessionFactory.openSession();        // delete API        session.delete("com.baobao.studentMapper.deleteStudent", 2);        session.commit();        session.close();    }    @Test    public void testUpdateStudent(){        System.out.println(".............................updateStudent.............................");        SqlSessionFactory sqlSessionFactory = Factory.getSqlSessionFactory();        SqlSession session = sqlSessionFactory.openSession();        Student student = new Student();        student.setId(3);        student.setName("Amy");        student.setAge(20);        student.setSex("F");        Calendar calendar = Calendar.getInstance();        // calendar.set(1997, 2, 20);        student.setBirthday(calendar.getTime());        // System.out.println(calendar.getTime());        // update API        int cnt = session.update("com.baobao.studentMapper.updateStudent", student);        session.commit();        session.close();    }}

        最后直接在IDEA运行测试,或者在根目录下运行mvn clean test。测试通过。

项目的目录结构如下:

本项目的源码下载 : http://download.csdn.net/download/ac_dao_di/9732835

参考:
http://www.cnblogs.com/bluejoe/p/5115930.html

0 0
原创粉丝点击