1.mybatis常用注解
MyBatis可以利用SQL映射文件来配置,也可以利用Annotation来设置。MyBatis提供的一些常用的基本注解如下表所示。
| 注解 | 说明 |
|---|---|
| @Insert | 实现新增 |
| @Delete | 实现删除 |
| @Update | 实现更新 |
| @Select | 实现查询 |
| @Result | 实现结果集封装 |
| @Results | 可以与@Result 一起使用,封装多个结果集 |
| @ResultMap | 实现引用@Results 定义的封装 |
| @One | 实现一对一结果集封装 |
| @Many | 实现一对多结果集封装 |
| @Param | 当映射器方法需多个参数,这个注解可以被应用于映射器方法参数来给每个参数一个名字。 |
| @Many | 实现一对多结果集封装 |
| @Options | 映射语句的属性 |
实例
在第二章的单表的CRUD案例基础上,实现基于注解的单表CRUD。
项目结构图如下:

用户实体类
//Users.java
//用户实体类,对应我们users表。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Users {
private Integer uid; //用户编号
private String username; //用户名
private String password; //密码
private String mobile; //手机号码
private String email; //电子邮箱
private String type; //用户类型
}
在com.dao包下新建UsersMapper.java接口。
//UsersMapper.java
package com.dao;
import com.entity.Users;
import org.apache.ibatis.annotations.*;
import java.util.List;
import java.util.Map;
public interface UsersMapper {
@Select("select * from users")
public List<Users> getAllUsers();
@Select("select * from users where uid=#{uid}")
public Map<String,Object> geUserByUidReturnMap(Integer uid);
@Select("select * from users where uid=#{uid}")
public Users getUserByUid(Integer uid);
@Insert("insert into users (username,password,mobile,email,type) values (#{username},#{password},#{mobile},#{email},#{type}) ")
@Options(useGeneratedKeys=true,keyProperty = "uid", keyColumn = "uid")
public int addUser(Users u);
@Update("update users set username = #{username},password=#{password},mobile=#{mobile},email=#{email},type=#{type} where uid = #{uid}")
public int updateUser(Users u);
@Delete("delete from users where uid = #{uid}")
public int deleteUser(Integer uid);
}
在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="db.properties"/>
<!--配置映射类的别名-->
<typeAliases>
<typeAlias alias="Users" type="com.entity.Users"/>
</typeAliases>
<!--数据源配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<!--映射接口-->
<mappers>
<mapper class="com.dao.UsersMapper"></mapper>
</mappers>
</configuration>
编写测试类。
package com.mapper;
import com.dao.UsersMapper;
import com.entity.Users;
import com.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class UsersMapperCrudTest {
//测试根据用户编号查询用户资料
@Test
public void testQueryUserByUid() {
SqlSession session = null;
Users u = null;
try {
session = SqlSessionFactoryUtil.openSqlSession();
UsersMapper usersMapper = session.getMapper(UsersMapper.class);
u = usersMapper.getUserByUid(3);
System.out.println(u);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
//测试查询所有用户
@Test
public void testQueryAllUsers() {
SqlSession session = null;
try {
session = SqlSessionFactoryUtil.openSqlSession();
UsersMapper usersMapper= session.getMapper(UsersMapper.class);
List<Users> usersList = usersMapper.getAllUsers();
usersList.forEach(System.out::println);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
//测试新用户
@Test
public void testInsertUser() {
SqlSession session = null;
Users u = new Users();
u.setUsername("王大锤");
u.setPassword("123456");
u.setMobile("18991167567");
u.setEmail("5465657687@126.com");
u.setType("student");
try {
session = SqlSessionFactoryUtil.openSqlSession();
UsersMapper usersMapper = session.getMapper(UsersMapper.class);
int result = usersMapper.addUser(u);
System.out.println("受影响记录条数:" + result);
System.out.println("新增用户主键:" + u.getUid());
session.commit();
} catch (Exception ex) {
ex.printStackTrace();
session.rollback();
session.commit();
} finally {
if (session != null) {
session.close();
}
}
}
//测试更新用户
@Test
public void testUpdateUser() {
SqlSession session = null;
Users u =null;
try {
session = SqlSessionFactoryUtil.openSqlSession();
UsersMapper usersMapper = session.getMapper(UsersMapper.class);
u = usersMapper.getUserByUid(11);
u.setPassword("888888");
u.setMobile("13991988765");
int result = usersMapper.updateUser(u);
session.commit();
} catch (Exception ex) {
ex.printStackTrace();
session.rollback();
session.commit();
} finally {
if (session != null) {
session.close();
}
}
}
//测试删除用户
@Test
public void testDeleteUser() {
SqlSession session = null;
try {
session = SqlSessionFactoryUtil.openSqlSession();
UsersMapper usersMapper = session.getMapper(UsersMapper.class);
int result = usersMapper.deleteUser(11);
session.commit();
} catch (Exception ex) {
ex.printStackTrace();
session.rollback();
session.commit();
} finally {
if (session != null) {
session.close();
}
}
}
//测试查询所有用户返回Map
@Test
public void testQueryAllUsersWithMap() {
SqlSession session = null;
try {
session = SqlSessionFactoryUtil.openSqlSession();
UsersMapper usersMapper = session.getMapper(UsersMapper.class);
Map<String, Object> map = usersMapper.geUserByUidReturnMap(3);
Set<String> keySet = map.keySet();
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
Object u = map.get(key);
System.out.println(key + "=" + u);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (session != null) {
session.close();
session = null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}