mybatis注解开发(单表查询)

注解说明:

MyBatis可以利用SQL映射文件来配置,也可以利用Annotation来设置。MyBatis提供的一些基本注解如下表所示:

注解目标相应的XML描述
@CacheNamespace<cache>为给定的命名空间(比如类)配置缓存。属性:implemetation,eviction,flushInterval , size 和 readWrite 。
@CacheNamespaceRef<cacheRef>参照另外一个命名空间的缓存来使用。属性:value,也就是类的完全限定名。
@ConstructorArgs方法<constructor>收集一组结果传递给对象构造方法。属性:value,是形式参数的数组
@Arg方法<arg><idArg>单独的构造方法参数,是ConstructorArgs 集合的一部分。属性id,column,javaType,typeHandler。id属性是布尔值,来标识用于比较的属性,和XML 元素相似
@TypeDiscriminator方法<discriminator>一组实例值被用来决定结果映射的表现。属性:Column, javaType , jdbcType typeHandler,cases。cases属性就是实例的数组。
@Results方法<resultMap>结果映射的列表,包含了一个特别结果列如何被映射到属性或字段的详情。属性:value ,是Result注解的数组
@Case方法<case>单独实例的值和它对应的映射。属性:value ,type ,results 。Results 属性是结果数组,因此这个注解和实际的ResultMap 很相似,由下面的 Results注解指定
@Result方法<result><id>在列和属性或字段之间的单独结果映射。属性:id ,column , property,javaType ,jdbcType ,type Handler ,one,many。id 属性是一个布尔值,表示了应该被用于比较的属性。one属性是单独的联系,和 <association> 相似,而many 属性是对集合而言的,和<collection>相似。
@One方法<association>复杂类型的单独属性值映射。属性:select,已映射语句(也就是映射器方法)的完全限定名,它可以加载合适类型的实例。注意:联合映射在注解API中是不支持的。
@Many方法<collection>复杂类型的集合属性映射。属性:select,是映射器方法的完全限定名,它可加载合适类型的一组实例。注意:联合映射在 Java注解中是不支持的。
@Options方法映射语句的属性这个注解提供访问交换和配置选项的宽广范围,它们通常在映射语句上作为属性出现。而不是将每条语句注解变复杂,Options 注解提供连贯清晰的方式来访问它们。属性:useCache=true,flushCache=false,resultSetType=FORWARD_ONLY,statementType=PREPARED,fetchSize= -1,timeout=-1 ,useGeneratedKeys=false ,keyProperty=”id“。理解Java 注解是很重要的,因为没有办法来指定“null ”作为值。因此,一旦你使用了 Options注解,语句就受所有默认值的支配。要注意什么样的默认值来避免不期望的行为
@Insert @Update @Delete方法<insert><update><delete>这些注解中的每一个代表了执的真实 SQL。它们每一个都使用字符串数组(或单独的字符串)。如果传递的是字符串数组,它们由每个分隔它们的单独空间串联起来。属性:value,这是字符串数组用来组成单独的SQL语句
@InsertProvider @UpdateProvider @DeleteProvider @SelectProvider方法<insert><update><delete><select> 允许创建动态SQL。这些可选的SQL注解允许你指定一个类名和一个方法在执行时来返回运行的SQL。基于执行的映射语句, MyBatis会实例化这个类,然后执行由 provider指定的方法. 这个方法可以选择性的接受参数对象作为它的唯一参数,但是必须只指定该参数或者没有参数。属性:type,method。type 属性是类的完全限定名。method 是该类中的那个方法名。
@Param参数N/A当映射器方法需多个参数,这个注解可以被应用于映射器方法参数来给每个参数一个名字。否则,多参数将会以它们的顺序位置来被命名。 比如#{1},#{2} 等,这是默认的。使用@Param(“person”),SQL中参数应该被命名为#{person}。

注意:如果使用注解开发,xxmapper.xml映射文件可以不用书写

下面进行代码,实现示例:

  1. 创建项目(数据库准备,添加依赖)

在这里插入图片描述

	<dependencies>
		<!-- mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.8</version>
		</dependency>
		<!-- mysql驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.39</version>
		</dependency>
		<!-- 测试用例 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
		</dependency>
		<!-- 日志 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.6.4</version>
		</dependency>
	</dependencies>
  1. 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="jdbc.properties"></properties>
 <!-- 开启驼峰匹配 -->
 <settings>
 	<setting name="mapUnderscoreToCamelCase" value="true"/>
 </settings>
 <!-- 类别名  -->
 <typeAliases>
 	<package name="cn.yanqi.pojo"/>
 </typeAliases>

<!-- 连接数据库相关的配置  后面不用写,spring代替-->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driverClass}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
      </dataSource>
    </environment>
  </environments>
  
  <mappers>
	<mapper class="cn.yanqi.com.UserMapper"/>    
  </mappers>
  
</configuration>
  1. Jdbc.properties
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql:///mybatis
jdbc.username=root
jdbc.password=root

实体类就不写了!!!
4. Dao接口

(单表查询)

public interface UserMapper {

	@Delete("delete from tb_user where id = #{id}")
	public void delete(int id);
	
	@Select("select * from t_user where id = #{id}")
	public User select(int id);
	
	@Select("select * from t_user")
	public List<User> selectAll();
	
	@Insert("insert into t_user(id,username,sex)values(null,#{username},#{sex})")
	public void adduser(User user);
	
	@Update("update t_user set username =#{username}, sex = #{sex} where id =#{id}")
	public void updateuser(User user);
	
}
  1. 测试
import java.io.InputStream;
import java.util.List;

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 org.junit.Before;
import org.junit.Test;

import cn.yanqi.pojo.User;


public class UserDaoTest {
	
	private UserMapper userMapper;
	private SqlSession sqlSession ;
	private SqlSessionFactory sqlSessionFactory ;

	//运行@test方法之前运行
	@Before
	public void setUp() throws Exception {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		sqlSession = sqlSessionFactory.openSession();
		userMapper = sqlSession.getMapper(UserMapper.class);
	}
	
	@Test
	public void testDelete(){
		this.userMapper.delete(20);
		this.sqlSession.commit();
	}
	
	
	@Test
	public void testselect(){
		User user = this.userMapper.select(1);
		System.out.println(user);
	}
	
	@Test
	public void testselectall(){
	 List<User> list = this.userMapper.selectAll();
	 for(User res :list){
		 System.out.println(res);
	 }
	}
	
	@Test
	public void testadd(){
		User user = new User();
		user.setUsername("jack");
		user.setSex("boy");
		this.userMapper.adduser(user);
		this.sqlSession.commit();
		
	}
	
	@Test
	public void testupdateuser(){
		User user = new User();
		user.setId(3);
		user.setUsername("jack");
		user.setSex("boy");
		this.userMapper.updateuser(user);
		this.sqlSession.commit();
	}
	
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值