近几年,注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。
下面我们来了解一下该如何使用Mybatis注解?
环境搭建:
使用IDEA编译器,创建Maven工程后,配置pom.xml如下:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
接下来创建一个User 实体类 以及UserDao接口
主配置文件:SqlMapConfig.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="jdbcConfig.properties"></properties>
<!--配置别名-->
<typeAliases>
<package name="cn.qlu.domain"></package>
</typeAliases>
<!--配置环境-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
</environment>
</environments>
<!--指定带有注解的dao接口所在类-->
<mappers>
<package name="cn.qlu.Dao"></package>
</mappers>
</configuration>
以上环境配置基本完成,接下来我们进行测试。
使用Mybatis注解实现单表增删查改:
在Mybatis中针对增删查改有四个注解:@SELECT @INSERT @UPDATE @DELETE
在UserDao中使用注解进行查询操作:
public interface UserDao {
/**
* 查询所有用户
* @return
*/
@Select(value = "select * from t_user")
List<User> findAll();
}
创建测试类进行测试:
public class MybatisAnnoTest {
/**
* 测试基于注解的mybatis使用
* @param args
*/
public static void main(String[] args) throws IOException {
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
List<User> users = userDao.findAll();
for(User user :users){
System.out.println(user);
}
session.close();
in.close();
}
}
查询结果如下:
在UserDao中使用注解进行保存操作:
/**
* 保存用户
* @param user
*/
@Insert("insert into t_user(uname,pwd,sex,age)values(#{uname},#{pwd},#{sex},#{age})")
void saveUser(User user);
点击测试后数据库中出现更新的信息
更新删除等操作类似这里就不列举了
使用注解实现复杂关系映射即多表查询等操作
我们这里需要用到两张表,用户和账户
一对一:(使用立即加载)
public interface AccountDao {
/**
* 查询所有账户并且获取每个账户所属的用户信息
* @return
*/
@Select("select * from account")
@Results(id="accountMap",value = {
@Result(id=true ,column="id",property = "id"),
@Result(column="uid",property = "uid"),
@Result(column="money",property = "money"),
@Result(property = "user",column = "uid" , one =@One(select="cn.qlu.Dao.UserDao.findById",
fetchType=FetchType.EAGER))
})
List<Account> findAll();
}
运行结果:
一对多:(通常使用延时加载)
/**
*根据uid查询出对应账户信息
* @return
*/
@Select(value = "select * from t_user")
@Results(id="userMap",value = {
@Result(id=true ,column="uid",property = "uid"),
@Result(column="uname",property = "uname"),
@Result(column="pwd",property = "pwd"),
@Result(column="sex",property = "sex"),
@Result(column="age",property = "age"),
@Result(property = "accounts",column = "uid" ,
many=@Many(select="cn.qlu.Dao.AccountDao.findAccountByUid",
fetchType=FetchType.LAZY))
})
List<User> findAll();
多表这里介绍的比较简单,因为操作起来比较复杂。
以上仅用户个人学习,如有错误请指出!