首先,POJO

/**
* @Title: Question.java
* @Package com.test.model
* @Description: TODO(POJO Question)
* Copyright: Copyright (c) 2012 Company China Foreign Exchange Trade System and National Interbank Funding Center.
* Building 24,1387 ZhangDong Road, Shanghai, China.
* All Rights Reserved.
* Company: Insigma HT
* @author Ares
* @date 2013-06-24 下午3:48:31
*
* Revision History
*
* Date Programmer Notes
* --------- --------------------- --------------------------------------------
* 2013-06-24 Ares initial
*/
package com.test.model; import java.util.Date; /**
*
* @author Ares
* @Describe TODO(POJO Question)
*
*/
public class Question { private String id;
private int qorder;
private String qname;
private String qcontent;
private Date updateTime; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getQorder() {
return qorder;
}
public void setQorder(int qorder) {
this.qorder = qorder;
}
public String getQname() {
return qname;
}
public void setQname(String qname) {
this.qname = qname;
}
public String getQcontent() {
return qcontent;
}
public void setQcontent(String qcontent) {
this.qcontent = qcontent;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
} }

继续,Mapper

/**
* @Title: QuestionDAO.java
* @Package com.test.dao
* @Description: TODO(Question Mapper)
* Copyright: Copyright (c) 2012 Company China Foreign Exchange Trade System and National Interbank Funding Center.
* Building 24,1387 ZhangDong Road, Shanghai, China.
* All Rights Reserved.
* Company: Insigma HT
* @author Ares
* @date 2013-06-24 下午3:48:31
*
* Revision History
*
* Date Programmer Notes
* --------- --------------------- --------------------------------------------
* 2013-06-24 Ares initial
*/
package com.test.dao; import java.util.List; import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import com.test.model.Question; /**
*
* @author Ares
* @Describe TODO(Question Mapper)
*
*/
public interface QuestionDAO { /**
* AddBy Ares
* TODO(find all questions)
*/
@Select("SELECT * FROM Question")
public List<Question> findAll(); /**
* AddBy Ares
* TODO(find question by ID)
*/
@Select("SELECT * FROM Question WHERE ID = #{id}")
public Question findByID(@Param("id")String id); /**
* AddBy Ares
* TODO(just save one question)
*/
@Insert("INSERT INTO Question VALUES(#{id},#{qorder},#{qname},#{qcontent},#{updateTime})")
public void save(Question question); /**
* AddBy Ares
* TODO(save all questions in list)
*/
@InsertProvider(type=SqlProvider.class, method="saveAll")
public void saveAll(List<Question> list); }

上面的Mapper中,saveAll方法使用了SqlProvider,这个是用作批量添加使用的。

/**
* @Title: SqlProvider.java
* @Package com.test.dao
* @Description: TODO(SqlProvider)
* Copyright: Copyright (c) 2012 Company China Foreign Exchange Trade System and National Interbank Funding Center.
* Building 24,1387 ZhangDong Road, Shanghai, China.
* All Rights Reserved.
* Company: Insigma HT
* @author Ares
* @date 2013-6-24 下午3:48:31
*
* Revision History
*
* Date Programmer Notes
* --------- --------------------- --------------------------------------------
* 2013-6-24 Ares initial
*/
package com.test.dao; import java.text.MessageFormat;
import java.util.List;
import java.util.Map; import com.test.model.Question; /**
* @author Ares
* TODO(SqlProvider)
*/
public class SqlProvider { private static final String TABLE = "question"; public String saveAll(Map<String, List<Question>> params){
List<Question> list = (List<Question>)params.get("list");
if(list!=null){
StringBuffer sb = new StringBuffer("insert into ").append(TABLE).append(" values ");
MessageFormat mf = new MessageFormat("(#'{'list[{0}].id}, #'{'list[{0}].qorder}, #'{'list[{0}].qname}, #'{'list[{0}].qcontent}, #'{'list[{0}].updateTime})");
for (int i=0; i<list.size(); i++) {
sb.append(mf.format(new Object[]{i}));
if (i < list.size() - 1) {
sb.append(",");
}
}
System.out.println(sb.toString());
return sb.toString();
}
return null;
} }

接下来,把配置文件拿过来,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"mybatis-3-config.dtd"> <configuration> <typeAliases>
<package name="com.test.model"/>
</typeAliases> <environments default="development">
<environment id="development">
<transactionManager type="jdbc" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true"/>
<property name="username" value="root"/>
<property name="password" value="test"/>
</dataSource>
</environment>
</environments> <mappers>
<package name="com.test.dao"/>
</mappers>
<!--
<mappers>
<mapper resource="com/test/model/Question.xml"/>
</mappers>
-->
</configuration>

最后,开始测试

/**
* @Title: MyBatisTest.java
* @Package com.test.test
* @Description: TODO(MyBatisTest)
* Copyright: Copyright (c) 2012 Company China Foreign Exchange Trade System and National Interbank Funding Center.
* Building 24,1387 ZhangDong Road, Shanghai, China.
* All Rights Reserved.
* Company: Insigma HT
* @author Ares
* @date 2013-06-24 下午3:48:31
*
* Revision History
*
* Date Programmer Notes
* --------- --------------------- --------------------------------------------
* 2013-06-24 Ares initial
*/
package com.test.test; import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import com.test.dao.QuestionDAO;
import com.test.model.Question; /**
* @author Ares
* TODO(MyBatisTest)
*/
public class MyBatisTest { @Test
public void testMyBatis(){
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(this.getClass().getResourceAsStream("/com/test/cfg/sqlMapClient.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
QuestionDAO questionDao = sqlSession.getMapper(QuestionDAO.class); List<Question> list = new ArrayList<Question>();
Question q = new Question();
q.setId(UUID.randomUUID().toString());
q.setQname("Are you ok?");
q.setQcontent("I'm ok.");
q.setQorder(6);
q.setUpdateTime(new Date());
list.add(q); Question q2 = new Question();
q2.setId(UUID.randomUUID().toString());
q2.setQname("How are you?");
q2.setQcontent("I'm ok.");
q2.setQorder(6);
q2.setUpdateTime(new Date());
list.add(q2); questionDao.saveAll(list);
sqlSession.commit(); List<Question> questions = questionDao.findAll();
for (Question question : questions) {
System.out.println(question.getQname() + " \tReply: "+question.getQcontent());
} sqlSession.close();
}
}

MyBatis 学习 - 注解的更多相关文章

  1. mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现

    项目结构  基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...

  2. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  3. MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合(转载)

      孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: m ...

  4. (原创)mybatis学习一,夯实基础

    一,what?(是什么) MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可 ...

  5. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...

  6. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  7. 【Todo】Mybatis学习-偏理论

    之前写过好几篇Mybatis相关的文章: http://www.cnblogs.com/charlesblc/p/5906431.html  <SSM(SpringMVC+Spring+Myba ...

  8. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  9. MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql

    目录(?)[-] 一MyBatis简介与配置MyBatisSpringMySql MyBatis简介 MyBatisSpringMySql简单配置 搭建Spring环境 建立MySql数据库 搭建My ...

随机推荐

  1. AngularJS 路由:ng-route 与 ui-router

    AngularJS的ng-route模块为控制器和视图提供了[Deep-Linking]URL. 通俗来讲,ng-route模块中的$routeService监测$location.url()的变化, ...

  2. Atitit.web 视频播放器classid clsid 大总结quicktime,vlc 1. Classid的用处。用来指定播放器 1 2. <object> 标签用于包含对象,比如图像、音

    Atitit.web 视频播放器classid clsid 大总结quicktime,vlc 1. Classid的用处.用来指定播放器 1 2. <object> 标签用于包含对象,比如 ...

  3. 彻底清除Linux centos minerd木马 实战  跟redis的设置有关

    top -c把cpu占用最多的进程找出来: Tasks: total, running, sleeping, stopped, zombie Cpu(s): 72.2%us, 5.9%sy, 0.0% ...

  4. 让低版本IE也能正常运行HTML5+CSS3网站的3种解决方案

    现在我们可以选择浏览器非常多,所以浏览器的环境也是种类繁多,同一个浏览器也是包含各种不同的版本,不同的版本之间的渲染方法也存在差异,,它们支持的 HTML5.CSS3 特性恐怕也不尽相同.这种情况于是 ...

  5. wget镜像网站并且下载到指定目录 2012-06-20 19:40:56

    wget镜像网站并且下载到指定目录 2012-06-20 19:40:56 分类: Python/Ruby wget -r -p -np -k -P /tmp/ap http://www.exampl ...

  6. jquery flexslider 轮播插件

    去官网下载最新的 https://www.woothemes.com/flexslider/ 引入 css 和 js api $(window).load(function() { $('.flexs ...

  7. 彻底征服 Spring AOP 之 理论篇

    基本知识 其实, 接触了这么久的 AOP, 我感觉, AOP 给人难以理解的一个关键点是它的概念比较多, 而且坑爹的是, 这些概念经过了中文翻译后, 变得面目全非, 相同的一个术语, 在不同的翻译下, ...

  8. python学习笔记(10)--爬虫下载煎蛋图片

    说明: 1. 有很多细节需要注意! 2. str是保留字,不要作为变量名 3. 保存为txt报错,encoding=utf-8 4. 403错误,添加headers的方法 5. 正则match只能从开 ...

  9. lua工具库penlight--08额外的库(一)

    额外的库 在这一节中的库不再被认为是Penlight的核心部分,但在需要时,仍提供专门的功能. 简单的输入的模式 Lua 的字符串模式匹配是非常强大,通常您将不需要传统的正则表达式库.即便如此,有时  ...

  10. AM335x 添加 HUAWEI MU609 Mini PCIe Module,并用pppd 启动相关设备

    kernel 的配置 kernel 3.2.0 make menuconfig Device Drivers ---> [*] USB support ---> <*> USB ...