`
bit1129
  • 浏览: 1069952 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【持久化框架MyBatis3一】MyBatis版HelloWorld

 
阅读更多

MyBatis这个系列的文章,主要参考《Java Persistence with MyBatis 3》。

 

样例数据

本文以MySQL数据库为例,建立一个STUDENTS表,插入两条数据,然后进行单表的增删改查

 

 

CREATE TABLE STUDENTS
(
stud_id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
email varchar(50) NOT NULL,
dob date DEFAULT NULL,
PRIMARY KEY (stud_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF-8;

/*Sample Data for the students table */
insert into students(stud_id,name,email,dob)
values (1,'Student1','student1@gmail.com','1983-06-25');
insert into students(stud_id,name,email,dob)
values (2,'Student2','student2@gmail.com','1983-06-25');

 

新建Maven项目,定义pom.xml

 MyBatis Maven项目依赖

 

 

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.22</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
 

 

 

 

定义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="config.properties"><!--定义配置信息,在本配置中可以使用${key}来引用-->
       <!--同名的key,config.properties覆盖property子元素的属性值-->
        <property name="name1" value="value.in.property.element"/>
    </properties>
    <typeAliases>
        <!--类型的别名: 用法,在resultType和parameterType可以使用别名,而不是全限定的类名-->
        <typeAlias alias="Student" type="com.mybatis3.domain.Student"/>
        <!--包名下的Model类,使用类名作为别名,不区分大小写-->
        <package name="com.mybatis3.domain"/>
    </typeAliases>
    <environments default="development"><!--默认的环境信息,在生产环境中需要修改production-->
        <environment id="development"><!--开发环境的配置-->
            <!--事务管理,MyBatis提供了两种方式,JDBC的连接事务管理以及Managed-->
            <transactionManager type="JDBC"/>
            <!--数据源配置-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        <environment id="production"><!--生产环境的配置-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--SQL映射文件,可以多个-->
        <mapper resource="StudentMapper.xml"/>
    </mappers>
</configuration>
 

 

 

 

定义SQL映射配置文件Students-Mapper.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.mybatis3.mappers.StudentMapper"> <!--namespace定义的Mapper可以作为Mapper接口-->
    <!--SQL列与POJO的字段的映射关系-->
    <resultMap type="Student" id="StudentResult">
        <id property="studId" column="stud_id"/>
        <result property="name" column="name"/>
        <result property="email" column="email"/>
        <result property="dob" column="dob"/>
    </resultMap>
    <select id="findAllStudents" resultMap="StudentResult">
        SELECT * FROM STUDENTS
    </select>
    <select id="findStudentById" parameterType="int" resultType="Student">
        SELECT STUD_ID AS STUDID, NAME, EMAIL, DOB
        FROM STUDENTS WHERE STUD_ID=#{Id}
    </select>
    <insert id="insertStudent" parameterType="student">
        INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB)
        VALUES(#{studId },#{name},#{email},#{dob})
    </insert>
</mapper>
 

 

定义主配置文件使用的config.properties

 

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
key=value.in.config.properties

 

 

定义Model

 

package com.mybatis3.domain;

import java.util.Date;

public class Student {
    private Long studId;
    private String name;
    private String email;
    private Date dob;

    public Long getStudId() {
        return studId;
    }

    public void setStudId(Long studId) {
        this.studId = studId;
    }

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

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

    public Date getDob() {
        return dob;
    }

    public void setDob(Date dob) {
        this.dob = dob;
    }
}

 

 

定义StudentMapper接口

 

package com.mybatis3.mappers;

import com.mybatis3.domain.Student;

import java.util.List;

public interface StudentMapper {
    List<Student> findAllStudents();

    Student findStudentById(Integer id);

    void insertStudent(Student student);
}

 

定义StudentService

 

package com.mybatis3.serivces;

import com.mybatis3.domain.Student;
import com.mybatis3.mappers.StudentMapper;
import com.mybatis3.util.MyBatisSqlSessionFactory;
import org.apache.ibatis.session.SqlSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

public class StudentService {
    private Logger logger =
            LoggerFactory.getLogger(getClass());

    public List<Student> findAllStudents() {
        SqlSession sqlSession =
                MyBatisSqlSessionFactory.openSession();
        try {
            StudentMapper studentMapper =
                    sqlSession.getMapper(StudentMapper.class);
            return studentMapper.findAllStudents();
        } finally {
            //If sqlSession is not closed then database Connection associated this sqlSession will not be
            //returned to pool and application may run out of connections.
            sqlSession.close();
        }
    }

    public Student findStudentById(Integer studId) {
        logger.debug("Select Student By ID :{}", studId);
        SqlSession sqlSession =
                MyBatisSqlSessionFactory.openSession();
        try {
            StudentMapper studentMapper =
                    sqlSession.getMapper(StudentMapper.class);
            return studentMapper.findStudentById(studId);
        } finally {
            sqlSession.close();
        }
    }

    public Student findStudentById2(Integer studId) {
        logger.debug("Select Student By ID :{}", studId);
        SqlSession sqlSession =
                MyBatisSqlSessionFactory.openSession();
        try {
            Student student = (Student) sqlSession.
                    selectOne("com.mybatis3.mappers.StudentMapper.findStudentById",
                            studId);
            return student;
        } finally {
            sqlSession.close();
        }
    }

    public void createStudent(Student student) {
        SqlSession sqlSession =
                MyBatisSqlSessionFactory.openSession();
        try {
            StudentMapper studentMapper =
                    sqlSession.getMapper(StudentMapper.class);
            studentMapper.insertStudent(student);
            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
    }
}

 

 

单元测试

 

package com.mybatis3.services;

import com.mybatis3.domain.Student;
import com.mybatis3.serivces.StudentService;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

import java.util.Date;
import java.util.List;

public class StudentServiceTest {
    private static StudentService studentService;

    @BeforeClass
    public static void setup() {
        studentService = new StudentService();
    }

    @AfterClass
    public static void tearDown() {
        studentService = null;
    }

    @Test
    public void testFindAllStudents() {
        List<Student> students = studentService.findAllStudents();
        Assert.assertNotNull(students);
        for (Student student : students) {
            System.out.println(student);
        }
    }

    @Test
    public void testFindStudentById() {
        Student student = studentService.findStudentById(1);
        Assert.assertNotNull(student);
        System.out.println(student);
    }

    @Test
    public void testCreateStudent() {
        Student student = new Student();
        Long id = 1L;
        student.setStudId(id);
        student.setName("student_" + id);
        student.setEmail("student_" + id + "gmail.com");
        student.setDob(new Date());
        studentService.createStudent(student);
        Student newStudent = studentService.findStudentById(id.intValue());
        Assert.assertNotNull(newStudent);
    }


}

 

 

 

分享到:
评论

相关推荐

    《一头扎进MyBatis3》第一讲 MyBatis 版 HelloWorld 实现

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本教程中,我们将深入探讨《一头扎进MyBatis3》第一讲的内容,主要涉及MyBatis的初步认识、Java工程的创建,以及如何通过MyBatis向...

    spring+mybatis的helloworld项目

    在本项目"spring+mybatis的helloworld"中,我们主要关注的是如何使用Spring和MyBatis这两个流行的Java开发框架来构建一个简单的Web应用程序。这个项目以Maven为构建工具,实现了MySQL数据库的插入操作,并利用Log4j...

    MyBatis-HelloWorld.zip

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    mybatis之helloworld

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本教程中,我们将一起探索如何使用MyBatis实现一个简单的"Hello, World"示例,这将帮助我们理解MyBatis的基本工作原理和配置。 首先...

    mybatis-helloworld.zip

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    MyBatis-1 概述与HelloWorld

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    spring mybatis helloworld

    标题 "spring mybatis helloworld" 暗示我们要探讨的是如何在Java环境下使用Spring和MyBatis框架构建一个基础的Hello World应用。Spring是一个全面的、模块化的应用程序框架,而MyBatis则是一个轻量级的持久层框架,...

    MyBatis_01_HelloWorld

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本教程"**MyBatis_01_HelloWorld**"中,我们将探索如何使用MyBatis进行基本的数据库操作,实现一个简单的“Hello, World”示例。 ...

    MyBatis的helloworld(不使用Mapper接口实现MyBatis查询数据库).zip

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本示例中,我们将不使用Mapper接口来演示如何通过MyBatis进行基本的数据库查询,这对于理解MyBatis的核心工作原理是非常有帮助的。 ...

    简单的Spring,Mybatis框架demo

    这个"Hello World版Spring和Mybatis框架学习demo"是初学者入门的好起点,它演示了如何快速搭建一个简单的Spring+Mybatis项目,帮助理解这两个框架的基本用法和集成方式。通过这个示例,你可以学习到如何配置和使用这...

    MyBatis helloworld Mapper接口开发.zip

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本教程中,我们将从零开始,通过一个简单的“Hello, World”示例来了解如何使用MyBatis进行Mapper接口的开发。这个教程旨在帮助初学...

    Mybatis课件

    MyBatis是一款优秀的持久层框架,支持定制化SQL、存储过程和高级映射。它的目标是简化JDBC操作,避免了繁琐的JDBC代码和手动设置参数,以及获取结果集的过程。MyBatis能够通过简单的XML或注解来配置和映射原始的POJO...

    mybatis的helloword程序代码

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本示例中,我们将探讨如何创建一个MyBatis的HelloWorld程序,从而熟悉其基本概念和工作流程。 首先,我们需要理解MyBatis的核心组成...

    springmvc-maven-webapp-helloworld 源码

    3. **MyBatis**:MyBatis是一个轻量级的持久层框架,它简化了SQL操作。在这个项目中,MyBatis可能被用来连接到MySQL数据库,执行SQL查询,并将结果映射到Java对象。 4. **JUnit**:JUnit是Java的单元测试框架,用于...

    mybatis源码+配置步骤+包文件

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    分布式框架简介SSM组合+ springmvc+mybatis+shiro+restful+bootstrap

    本节主要介绍如何基于SSM(Spring、SpringMVC、MyBatis)框架搭建一个简单的Web应用程序,并实现一个HelloWorld示例。 **1. 导入必要的依赖** - **SpringMVC**: MVC(Model-View-Controller)设计模式的实现之一,...

    spring4.3.10+springMVC+mybatis Maven框架集成代码

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...

    iBatis入门Helloworld

    iBatis,现已被更名为MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。本教程将引导你通过一个简单的"Hello, World!"项目了解iBatis(MyBatis)的基本用法。解压提供的"ibatistest"压缩包...

    简单的ssm框架

    3. **MyBatis**:MyBatis是一个持久层框架,它简化了SQL操作,允许开发者将SQL语句写在XML配置文件或注解中,与Java代码进行绑定。在"hello world"示例中,可能会有一个简单的Mapper接口和对应的XML配置,用于查询或...

    spring+mybatis+freemarker

    这个组合中,Spring Boot 提供了便捷的项目初始化和自动配置功能,Mybatis 是一个轻量级的持久层框架,而 Freemarker 则是用于动态生成 HTML 或其他格式文本的模板引擎。 首先,我们来看看如何在 Spring Boot 中...

Global site tag (gtag.js) - Google Analytics