Mybatis 除了可以在xml定义sql外, 还可以通过java来生成sql.
生成sql的java类EntityProvider:
MemberMapper:
其中@InsertProvider,@UpdateProvider,@SelectProvide, @DeleteProvider这几个注解告诉mapper sql将会从哪个类的哪个方法动态生成.
测试类TestProvider:
生成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是一款强大的Java持久层框架,它将SQL与...通过这份“MyBatis入门到精通”的学习资料,新手可以系统地学习MyBatis的基础知识,理解其核心概念,并逐步掌握实际项目中的应用技巧,从而成为熟练的MyBatis开发者。
MyBatis入门 MyBatis是一个优秀的持久层框架,使用XML将SQL与程序解耦,便于维护。MyBatis学习简单,执行高效,是JDBC的延伸。MyBatis提供了数据库增删改查的便捷操作,极大提高了开发效率、统一的编码规则、利于...
本篇将围绕"MyBatis经典入门案例"展开,讲解如何从零开始搭建一个简单的MyBatis应用。 首先,我们需要了解MyBatis的基本构成。MyBatis主要由四个部分组成:SqlSessionFactoryBuilder、SqlSessionFactory、...
MyBatis是一款流行的持久层框架,支持SQL查询、存储过程以及高级映射,...通过本系列教程,你可以从基础的环境搭建,逐步学习到MyBatis的核心概念、高级特性以及与其他流行框架的集成方法,从而达到精通MyBatis的目标。
本文主要针对"Mybatis基础入门"进行详细讲解,帮助初学者理解并掌握Mybatis的核心概念和基本用法。 首先,我们来看`mybatis-config.xml`,这是Mybatis的全局配置文件,它定义了Mybatis运行时的基本环境。这个文件...
标题中的“MyBatis从入门”暗示了我们将学习MyBatis的基础知识,包括安装、配置、以及基本的CRUD操作。MyBatis的入门涉及以下几个核心概念: 1. **安装与环境配置**:首先,我们需要在项目中引入MyBatis的jar包,...
【Mybatis基础入门学习笔记】 Mybatis是一款广泛使用的Java持久层框架,它的主要目标是简化对数据库的操作,提供更加灵活的SQL映射机制。Mybatis起源于Apache组织的ibatis框架,历经发展,在2010年迁移到Google ...
【标题】"MyBatis简单入门实例"是一个关于学习MyBatis基础操作的教程,适合初学者了解并实践这个流行的Java持久层框架。MyBatis是一个优秀的轻量级ORM(对象关系映射)框架,它简化了数据库操作,将SQL语句与Java...
java资源之Mybatis基础入门学习笔记,详细解析,适合新手,第三天进阶笔记。
本书中从一个简单的MyBatis查询入手,搭建起学习MyBatis的基础开发环境。通过全面的示例代码和测试讲解了在MyBatis XML方式和注解方式中进行增、删、改、查操作的基本用法,介绍了动态SQL在不同方面的应用以及在使用...
MyBatis零基础入门
mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中...《MyBatis-Plus入门文档》主要介绍了MyBatis-Plus入门使用,以及关于mybatis-plus的更多介绍及特性,感兴趣的可以下载学习一下
MyBatis是一款强大的Java持久层框架,它极大地简化了数据库操作,通过XML或注解的方式配置和...通过这个实战入门教程,你可以逐步掌握MyBatis的基本用法,为进一步深入学习MyBatis的高级特性和实践应用打下坚实基础。
电子工业出版社的《MyBatis 从入门到精通》的源代码。本书中从一个简单的 MyBatis 查询入手,搭建起学习 MyBatis 的基础开发环境。通过全面的示例代码和测试讲解了在 MyBatis XML 方式和注解方式中进行增、删、改、...
ssm框架SpringMVC+Mybatis非常好的入门视频,由浅入深,包含源码,配置文件。链接失效请复制到地址栏打开,如果打不开请私信或底下评论,我会更新链接!
本文将深入讲解 MyBatis 的基础入门知识,尤其适合初学者。 首先,我们来了解一下 MyBatis 中的两种占位符 `${...}` 和 `#{...}` 的区别。`${...}` 是简单的字符串替换,它会将动态内容直接拼接到 SQL 语句中,可能...
4. Mybatis的基础知识:Mybatis入门需要掌握一些基础的知识,包括配置文件的编写、Java接口的定义、SQL语句的编写等。其中,配置文件主要包括数据库连接信息、SQL语句等。 5. Mybatis与Hibernate的比较:Hibernate...
本文主要关注Mybatis的基础入门和第四天的进阶内容,特别是多对多关系处理和注解式开发。 一、多对多关系处理 在数据库设计中,多对多关系是最复杂的一种关联类型,比如学生与课程的关系,一个学生可以选修多门...
《MyBatis 从入门到精通》本书中从一个简单的 MyBatis 查询入手,搭建起学习 MyBatis 的基础开发环境。通过全面的示例代码和测试讲解了在 MyBatis XML 方式和注解方式中进行增、删、改、查操作的基本用法,介绍了...
Mybatis框架是一个轻量级的Java持久层框架,它提供了灵活的映射机制,使得Java对象和数据库表之间的映射变得更加简单。这个“Mybatis框架入门项目”是为...这将为后续深入学习Mybatis和其他相关技术打下坚实的基础。