这里做一个补充实现,前面我们是使用的基于配置文件XML实现的,但是Mybatis其实还提供了另一种实现方式,那就是使用注解实现,所以我在这里补充一下注解的实现。
1. 代码结构
从代码结构看我们只是增加了UserDaoAnnotation.java和一个人用于测试注解的测试类TestAnnotations.java;
接下来我们就来看看我们是如何使用注解的吧。
2. 注解的使用
2.1 UserDaoAnnotation.java的实现
package com.stephen.mybatis.dao;
import org.apache.ibatis.annotations.*;
import com.stephen.mybatis.model.User;
public interface UserDaoAnnotation {
//使用@Insert注解指明add方法要执行的SQL
@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
@Options(useGeneratedKeys=true, keyProperty="id")
Boolean add(User user);
//使用@Delete注解指明deleteById方法要执行的SQL
@Delete("DELETE FROM users WHERE id=#{id}")
Boolean delete(Integer id);
//使用@Update注解指明update方法要执行的SQL
@Update("UPDATE users SET name=#{name},age=#{age} WHERE id=#{id}")
Boolean update(User user);
//使用@Select注解指明getById方法要执行的SQL
@Select("SELECT * FROM users WHERE id=#{id}")
@Results(
{
@Result(id = true, column = "id", property = "id"),
@Result(column = "name", property = "name"),
@Result(column = "age", property = "age")
})
User get(Integer id);
}
这就是使用注解的实现方式
2.2 注册我们的注解类到配置文件
需要在mappers下面注册我们的接口:
<mapper class="com.stephen.mybatis.dao.UserDaoAnnotation"/>
在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 -->
<configuration>
<!-- 加载配置文件
<properties resource="jdbc.properties"></properties>
-->
<!-- 定义具体的别名 -->
<typeAliases>
<!-- 定义某个类的别名
<typeAlias alias="User" type="com.stephen.mybatis.model.User"/>
-->
<!-- package这个包下的所有的实体类的别名为其类名 -->
<package name="com.stephen.mybatis.model"/>
</typeAliases>
<!-- 多个环境,如开发环境,正式环境等 -->
<environments default="development">
<!-- 定义development环境 -->
<environment id="development">
<!-- 事务管理的类型JDBC和MANAGED(容器管理模式) -->
<transactionManager type="JDBC" />
<!-- 数据源配置
UNPOOLED:开一个,用完后关闭
POOLED:数据库连接池
JNDI:JNDI的数据源
-->
<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="root" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 注册UserMapper.xml文件 ,所有的mapper文件需要注册到mappers中-->
<mapper resource="com/stephen/mybatis/model/UserMapper.xml"/>
<!-- 注册UserMapper映射接口-->
<mapper class="com.stephen.mybatis.dao.UserDaoAnnotation"/>
</mappers>
</configuration>
2.3 测试注解实现
测试类唯一不同的是如何获取我们的接口,当让mybatis有它的方式:
UserDaoAnnotation的对象有UserDaoAnnotation接口使用sqlSession.getMapper(UserDaoAnnotation.class)动态构建出来。
package com.stephen.mybatis;
import com.stephen.mybatis.dao.UserDaoAnnotation;
import com.stephen.mybatis.model.User;
import com.stephen.mybatis.util.MybatisUtil;
public class TestAnnotations {
/**
* @param args
*/
public static void main(String[] args) {
//得到UserDaoAnnotation接口的实现类对象,UserDaoAnnotation接口的实现类对象由
//sqlSession.getMapper(UserDaoAnnotation.class)动态构建出来
UserDaoAnnotation userDao =
MybatisUtil.getSession().getMapper(UserDaoAnnotation.class);
User user = new User();
user.setName("Stephen Huang");
user.setAge(18);
userDao.add(user);
System.out.println("add user:" + user);
System.out.println("get user id:" + user.getId());
System.out.println(userDao.get(user.getId()));
user.setAge(28);
userDao.update(user);
System.out.println("update user age=28:" + user);
Integer userId = user.getId();
userDao.delete(userId);
System.out.println("delete user id=" + userId);
System.out.println("get deleted user: " + userDao.get(userId));
}
}
2.4 测试结果
log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
log4j:WARN Please initialize the log4j system properly.
add user:User [id=12, name=Stephen Huang, age=18]
get user id:12
User [id=12, name=Stephen Huang, age=18]
update user age=28:User [id=12, name=Stephen Huang, age=28]
delete user id=12
get deleted user: null
从我个人的爱好来看还是喜欢配置XML方式实,所以对注解还是有很多不够全面的。后面的整理我们还是使用配置xml方式。
上面只是mybatis注解的基本用法,更多的用发还需要参见其他:
这里给一个注解的使用介绍:
1. mybatis注解详解
2. 浅入浅出MyBatis(14):使用注解