文档章节

MyBatis笔记(三)——CRUD,在Mybatis中两套不同的实现方式(下)接口注解方式

HappyBKs
 HappyBKs
发布于 2015/07/03 22:32
字数 666
阅读 164
收藏 2

数据库users和User类看上一节内容,不罗嗦了。

所谓接口注解,就是要定义一个接口,将里面的方法绑定到Mybatis的相应的CRUD注解上,相关的类通过方法的参数或返回类型体现,相关的表通过注解中的SQL语句体现,这样通过接口注解就完成了表与类的映射。

比如,还是上次博客中的应用例子,如果用接口注解的方法应该写为如下形式:

接口注解方式(本文出自:http://my.oschina.net/happyBKs/blog/474364)

package com.happyBKs.mybatis.C1;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

public interface UserMapperable {
	
	@Insert("insert into users(name,age) values (#{name},#{age})")
	public int add(User user);
	
	@Delete("delete from users where id = #{id}")
	public int delete(int id);
	
	@Update("update users set name=#{name}, age=#{age} where id=#{id}")
	public int update(User user);
	
	@Select("select * from users where id=#{id}")
	public User getById(int id);
	
	@Select("select * from users")
	public List<User> getAll();

}

无论是上次说到的映射文件,还是这次的接口注解,都需要将这些映射关系在Mybatis的配置文件config.xml中进行注册。不过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>
<!-- 
development: 开发模式
work: 工作模式
 -->
	<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/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 在conf.xml文件中注册userMapper.xml文件 -->
	<mappers>
		<mapper resource="com/happyBKs/mybatis/C1/userMapper.xml"/>
		<mapper class="com.happyBKs.mybatis.C1.UserMapperable"/>
	</mappers>

</configuration>

最后,我们来在dao类中调用相应的服务,如下:

package com.happyBKs.mybatis.C1;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;

public class TestCrud {
	
	@Test
	public void testInsertAnnotation()
	{
		SqlSessionFactory factory=MybatisUtils.getInstance().getFactory();
		SqlSession session = factory.openSession(true);
		
		UserMapperable mapper=session.getMapper(UserMapperable.class);
		int n=mapper.add(new User(-1,"Viper",100));
		session.close();
		System.out.println(n);
	}
	
	@Test
	public void testDeleteAnnotation()
	{
		SqlSessionFactory factory=MybatisUtils.getInstance().getFactory();
		SqlSession session = factory.openSession(true);
		
		UserMapperable mapper=session.getMapper(UserMapperable.class);
		int n=mapper.delete(5);
		session.close();
		System.out.println(n);
	}
	
	@Test
	public void testUpdateAnnotation()
	{
		SqlSessionFactory factory=MybatisUtils.getInstance().getFactory();
		SqlSession session = factory.openSession(true);
		
		UserMapperable mapper=session.getMapper(UserMapperable.class);
		int n=mapper.update(new User(5,"Viper",101));
		session.close();
		System.out.println(n);
	}

	@Test
	public void testGetOneAnnotation()
	{
		SqlSessionFactory factory=MybatisUtils.getInstance().getFactory();
		SqlSession session = factory.openSession(true);
		
		UserMapperable mapper=session.getMapper(UserMapperable.class);
		User user=mapper.getById(1);
		session.close();
		System.out.println(user);
	}
	
	@Test
	public void testGetAllAnnotation()
	{
		SqlSessionFactory factory=MybatisUtils.getInstance().getFactory();
		SqlSession session = factory.openSession(true);
		
		UserMapperable mapper=session.getMapper(UserMapperable.class);
		List<User> userList=mapper.getAll();
		session.close();
		System.out.println(userList);
	}
}


但是,有一点请一定要注意:这里有一个非常重要的细节,弄不好很多初学者会吃苦头,那就是如果你同时实现了xml映射文件方式和接口注解方式,并且两者在同一个文件夹或包下,那么xml的文件名与接口名不能相同,否则会冲突报错,切记!!!




© 著作权归作者所有

HappyBKs

HappyBKs

粉丝 665
博文 306
码字总数 481268
作品 0
浦东
程序员
私信 提问
MyBatis笔记(二)——CRUD,在Mybatis中两套不同的实现方式(上)映射文件方式

在谈及一个数据库交互框架的时候,CRUD如何实现是一个最令人关注的问题。上一篇博客中,我对几个数据库的类库或框架各自的特点做了简单比较,Mybatis是一个能够在代码区操作对象,并通过xml...

HappyBKs
2015/07/02
492
3
MyBatis入门学习教程 MyBatis快速入门1-8(2)

上一章:http://my.oschina.net/u/2608629/admin/edit-blog?blog=715422 上一篇MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个...

筱飞
2016/07/21
92
0
MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(二)

(本文示例工程源代码下载地址:http://down.51cto.com/data/1975295) 在上一篇博文的最后,介绍了使用@PostConstruct注解标注StudentDao的init方法,这样在Spring完成依赖注入后此方法即会...

NashMaster2011
2015/01/14
0
0
Spring Boot MyBatis 连接数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/50553714 最近比较忙,没来得及抽时间把MyBatis的集成发出来,其实mybatis官网在201...

单红宇
2016/01/21
0
0
MyBatis多对多保存示例——MyBatis学习笔记之十七

前几天有网友问到MyBatis多对多的问题,不过愧对网友厚爱的是,最近一直忙,直到现在才有时间处理此事。今天就先写一个多对多保存的示例,算是对这位网友的初步回应,以后会有更多相关的博文...

NashMaster2011
2013/08/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Echars鼠标点击事件多次触发

本文转载于:专业的前端网站➭Echars鼠标点击事件多次触发 gChart.on('click', function (params) { if (params.componentSubType == "bar" && params.componentType == "serie......

前端老手
24分钟前
4
0
springboot2.0.6(附) 解析META-INF/spring.factories通过系统加载类获取对应的 class 的全限定名称

在 SpringBoot中是通过getSpringFactoriesInstances(Class<T> type)方法获取所有classpath下面的META-INF/spring.factories文件,然后根据type值找到对应的 class 的全限定名称列表。下面我来...

小亮89
26分钟前
4
0
zk工厂方法实现NIOServerCnxnFactory

NIOServerCnxnFactory类 内部类 AbstractSelectThread AcceptThread SelectorThread 属性 ZOOKEEPER_NIO_SESSIONLESS_CNXN_TIMEOUT 10s session过期时间 ZOOKEEPER_NIO_NUM_SELECTOR_THREADS......

writeademo
29分钟前
4
0
天猫精灵业务如何使用机器学习PAI进行模型推理优化

作者:如切,悟双,楚哲,晓祥,旭林 引言 天猫精灵(TmallGenie)是阿里巴巴人工智能实验室(Alibaba A.I.Labs)于2017年7月5日发布的AI智能语音终端设备。天猫精灵目前是全球销量第三、中国...

阿里云官方博客
37分钟前
6
0
BJL技巧之大路馆擦法—《利辰逸》

很多朋友刚玩百佳时间不长,不知道如何看路,今 天我就来简单的讲下看大路的方法。 都是前辈教的,这里我只是简单复述一下。 大路的观察方法有以下几种: 先从庄闲的数量变化说起。 庄闲的强...

那女孩对我说
38分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部