`
Aron.Tang
  • 浏览: 5174 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Mybatis基础入门二

    博客分类:
  • java
阅读更多
Mybatis 除了可以在xml定义sql外, 还可以通过java来生成sql.

生成sql的java类EntityProvider:
// Copyright (c) 1998-2013 Core Solutions Limited. All rights reserved.

package com.core.traininig.mybatisquiz;

import static org.apache.ibatis.jdbc.SqlBuilder.BEGIN;
import static org.apache.ibatis.jdbc.SqlBuilder.DELETE_FROM;
import static org.apache.ibatis.jdbc.SqlBuilder.INSERT_INTO;
import static org.apache.ibatis.jdbc.SqlBuilder.SET;
import static org.apache.ibatis.jdbc.SqlBuilder.SQL;
import static org.apache.ibatis.jdbc.SqlBuilder.UPDATE;
import static org.apache.ibatis.jdbc.SqlBuilder.VALUES;
import static org.apache.ibatis.jdbc.SqlBuilder.WHERE;

import org.apache.ibatis.jdbc.SelectBuilder;

import com.core.traininig.entity.Member;
import com.core.traininig.entity.Task;

/**
 * @author aron.tang
 */
public class EntityProvider {

    public static String getInsertSql(final Task task) {
        BEGIN();
        INSERT_INTO("TASK");
        VALUES("TASK_ID", "#{taskId,jdbcType=INTEGER}");
        VALUES("MEMBER_ID", "#{memberId,jdbcType=INTEGER}");
        VALUES("CONTENT", "#{content,jdbcType=VARCHAR}");
        VALUES("DUE_DATE", "#{dueDate,jdbcType=DATE}");
        return SQL();
    }

    public static String getUpdateSql(final Member member) {
        BEGIN();
        UPDATE("MEMBER");
        SET("FIRST_NAME=#{firstName,jdbcType=VARCHAR}");
        SET("LAST_NAME=#{lastName,jdbcType=VARCHAR}");
        SET("ADDRESS=#{address,jdbcType=VARCHAR}");
        SET("PHONE=#{phone,jdbcType=VARCHAR}");
        WHERE("MEMBER_ID=#{memberId,jdbcType=INTEGER}");
        return SQL();
    }

    public static String getSelectSql(final int memberId) {
        SelectBuilder.BEGIN();
        SelectBuilder.SELECT("MEMBER_ID AS memberId, FIRST_NAME AS firstName, LAST_NAME AS lastName" +
                ", ADDRESS AS address, PHONE AS phone ");
        SelectBuilder.FROM("MEMBER");
        SelectBuilder.WHERE("MEMBER_ID=#{memberId,jdbcType=INTEGER}");
        return SelectBuilder.SQL();
    }

    public static String getDelSql(final int taskId) {
        BEGIN();
        DELETE_FROM("TASK");
        WHERE("TASK_ID=#{#taskId,jdbcType=INTEGER}");
        return SQL();

    }

}


MemberMapper:
// Copyright (c) 1998-2012 Core Solutions Limited. All rights reserved.

package com.core.traininig.mybatisquiz;

import java.util.List;

/**
 * @author aron.tang
 *
 */
public interface MemberMapper {
   List<Member> getAllMembers();

   @InsertProvider(method = "getInsertSql", type = EntityProvider.class)
   void createTask(Task task);

   @UpdateProvider(method = "getUpdateSql", type = EntityProvider.class)
   void updateMember(Member member);

   @SelectProvider(method = "getSelectSql", type = EntityProvider.class)
   Member getMemberById(int memberId);

   @DeleteProvider(method = "getDelSql", type = EntityProvider.class)
   void delTask(int taskId);

}


其中@InsertProvider,@UpdateProvider,@SelectProvide, @DeleteProvider这几个注解告诉mapper sql将会从哪个类的哪个方法动态生成.

测试类TestProvider:
// Copyright (c) 1998-2013 Core Solutions Limited. All rights reserved.

package com.core.traininig.mybatisquiz;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;

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 com.core.traininig.entity.Member;
import com.core.traininig.entity.Task;

/**
 * @author aron.tang
 */
public class TestProvider {

    private static SqlSessionFactory sqlSessionFactory;

    public static void main(final String[] args) throws IOException {
        //testCreateTask();
        //testUpdateMember();
        testGetMemberById(4);
        // testDelTask(10);
    }

    /**
     * @param i
     * @throws IOException
     */
    private static void testDelTask(final int id) throws IOException {
        final SqlSession session = getSession();
        final MemberMapper m = session.getMapper(MemberMapper.class);
        m.delTask(id);
        System.out.println("succeed to cancel task.");
        session.commit();
    }

    /**
     * @param i
     * @throws IOException
     */
    private static void testGetMemberById(final int id) throws IOException {
        final SqlSession session = getSession();
        final Member m = session.getMapper(MemberMapper.class).getMemberById(id);
        System.out.println(m.getFirstName() + "." + m.getLastName());
    }

    /**
     * @throws IOException
     *
     */
    private static void testUpdateMember() throws IOException {
        final Member m = new Member();
        m.setMemberId(4);
        m.setFirstName("dickson");
        m.setLastName("wong");
        m.setAddress("usa");
        m.setPhone("376529081");
        final SqlSession session = getSession();
        final MemberMapper mapper = session.getMapper(MemberMapper.class);
        mapper.updateMember(m);
        System.out.println("succeed to update member " + m);
        session.commit();
        session.close();
    }


    private static SqlSession getSession() throws IOException {
        final String resource = "com/core/traininig/mybatisquiz/mybatis-config.xml";
        final InputStream inputStream = Resources.getResourceAsStream(resource);
        // build the SqlSessionFactory instance which manage the session when access DB.
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        final SqlSession session = sqlSessionFactory.openSession();
        return session;

    }


    private static void closeSession() {
        final SqlSession session = sqlSessionFactory.openSession();
        if (session != null) {
            session.close();
        }
    }

    private static void testCreateTask() throws IOException {
        final Task t = new Task();
        t.setTaskId(10);
        t.setMemberId(4);
        t.setContent("doing mybatis test1");
        t.setDueDate(new Date());
        final SqlSession session = getSession();
        final MemberMapper m = session.getMapper(MemberMapper.class);
        m.createTask(t);
        session.commit();
        System.out.println("create Task successfully.");
    }

}
分享到:
评论

相关推荐

    MyBatis入门到精通

    MyBatis是一款强大的Java持久层框架,它将SQL与...通过这份“MyBatis入门到精通”的学习资料,新手可以系统地学习MyBatis的基础知识,理解其核心概念,并逐步掌握实际项目中的应用技巧,从而成为熟练的MyBatis开发者。

    MyBatis入门.pdf

    MyBatis入门 MyBatis是一个优秀的持久层框架,使用XML将SQL与程序解耦,便于维护。MyBatis学习简单,执行高效,是JDBC的延伸。MyBatis提供了数据库增删改查的便捷操作,极大提高了开发效率、统一的编码规则、利于...

    MyBatis经典入门案例(初学者必备)

    本篇将围绕"MyBatis经典入门案例"展开,讲解如何从零开始搭建一个简单的MyBatis应用。 首先,我们需要了解MyBatis的基本构成。MyBatis主要由四个部分组成:SqlSessionFactoryBuilder、SqlSessionFactory、...

    Mybatis从入门到精通

    MyBatis是一款流行的持久层框架,支持SQL查询、存储过程以及高级映射,...通过本系列教程,你可以从基础的环境搭建,逐步学习到MyBatis的核心概念、高级特性以及与其他流行框架的集成方法,从而达到精通MyBatis的目标。

    Mybatis基础入门一

    本文主要针对"Mybatis基础入门"进行详细讲解,帮助初学者理解并掌握Mybatis的核心概念和基本用法。 首先,我们来看`mybatis-config.xml`,这是Mybatis的全局配置文件,它定义了Mybatis运行时的基本环境。这个文件...

    MyBatis从入门.7z

    标题中的“MyBatis从入门”暗示了我们将学习MyBatis的基础知识,包括安装、配置、以及基本的CRUD操作。MyBatis的入门涉及以下几个核心概念: 1. **安装与环境配置**:首先,我们需要在项目中引入MyBatis的jar包,...

    java资源之Mybatis基础入门学习笔记

    【Mybatis基础入门学习笔记】 Mybatis是一款广泛使用的Java持久层框架,它的主要目标是简化对数据库的操作,提供更加灵活的SQL映射机制。Mybatis起源于Apache组织的ibatis框架,历经发展,在2010年迁移到Google ...

    MyBatis简单入门实例

    【标题】"MyBatis简单入门实例"是一个关于学习MyBatis基础操作的教程,适合初学者了解并实践这个流行的Java持久层框架。MyBatis是一个优秀的轻量级ORM(对象关系映射)框架,它简化了数据库操作,将SQL语句与Java...

    java资源之Mybatis基础入门学习笔记,详细解析,适合新手,第三天进阶笔记

    java资源之Mybatis基础入门学习笔记,详细解析,适合新手,第三天进阶笔记。

    MyBatis从入门到精通__刘增辉电子工业出版社

    本书中从一个简单的MyBatis查询入手,搭建起学习MyBatis的基础开发环境。通过全面的示例代码和测试讲解了在MyBatis XML方式和注解方式中进行增、删、改、查操作的基本用法,介绍了动态SQL在不同方面的应用以及在使用...

    MyBatis零基础入门

    MyBatis零基础入门

    MyBatis-Plus入门+MyBatis-Plus文档手册 中文pdf高清版.rar

    mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中...《MyBatis-Plus入门文档》主要介绍了MyBatis-Plus入门使用,以及关于mybatis-plus的更多介绍及特性,感兴趣的可以下载学习一下

    MyBatis实战入门.pdf

    MyBatis是一款强大的Java持久层框架,它极大地简化了数据库操作,通过XML或注解的方式配置和...通过这个实战入门教程,你可以逐步掌握MyBatis的基本用法,为进一步深入学习MyBatis的高级特性和实践应用打下坚实基础。

    《MyBatis 从入门到精通》源代码

    电子工业出版社的《MyBatis 从入门到精通》的源代码。本书中从一个简单的 MyBatis 查询入手,搭建起学习 MyBatis 的基础开发环境。通过全面的示例代码和测试讲解了在 MyBatis XML 方式和注解方式中进行增、删、改、...

    SpringMvc+Mybatis基础入门视频

    ssm框架SpringMVC+Mybatis非常好的入门视频,由浅入深,包含源码,配置文件。链接失效请复制到地址栏打开,如果打不开请私信或底下评论,我会更新链接!

    java资源之Mybatis基础入门学习笔记,详细解析,适合新手,第二天进阶笔记

    本文将深入讲解 MyBatis 的基础入门知识,尤其适合初学者。 首先,我们来了解一下 MyBatis 中的两种占位符 `${...}` 和 `#{...}` 的区别。`${...}` 是简单的字符串替换,它会将动态内容直接拼接到 SQL 语句中,可能...

    Mybatis 入门到理解篇

    4. Mybatis的基础知识:Mybatis入门需要掌握一些基础的知识,包括配置文件的编写、Java接口的定义、SQL语句的编写等。其中,配置文件主要包括数据库连接信息、SQL语句等。 5. Mybatis与Hibernate的比较:Hibernate...

    java资源之Mybatis基础入门学习笔记,详细解析,适合新手,第四天进阶笔记

    本文主要关注Mybatis的基础入门和第四天的进阶内容,特别是多对多关系处理和注解式开发。 一、多对多关系处理 在数据库设计中,多对多关系是最复杂的一种关联类型,比如学生与课程的关系,一个学生可以选修多门...

    MyBatis 从入门到精通

    《MyBatis 从入门到精通》本书中从一个简单的 MyBatis 查询入手,搭建起学习 MyBatis 的基础开发环境。通过全面的示例代码和测试讲解了在 MyBatis XML 方式和注解方式中进行增、删、改、查操作的基本用法,介绍了...

    Mybatis框架入门项目

    Mybatis框架是一个轻量级的Java持久层框架,它提供了灵活的映射机制,使得Java对象和数据库表之间的映射变得更加简单。这个“Mybatis框架入门项目”是为...这将为后续深入学习Mybatis和其他相关技术打下坚实的基础。

Global site tag (gtag.js) - Google Analytics