Mybatis的注解开发
Mybatis的注解开发
注解开发介绍
目标
- 了解常用的注解
讲解
注解开发介绍
Mybatis也支持注解开发。但是需要明确的是,Mybatis仅仅是把映射配置文件 使用注解代替了;而Mybatis的全局配置文件仍然是xml。
实际开发中,可以使用注解开发+xml开发。但是要注意:
- 一个功能,不能重复配置:如果使用注解配置一次,再用xml配置一次,mybatis会报错
- 映射配置文件 和 映射器要 同名同位置
- 开发时:简单功能使用注解,复杂功能使用xml
常用注解
@Select
:用于配置查询语句。相当于select标签@Insert
:用于配置插入语句。相当于insert标签@SelectKey
:用于插入数据时,获取主键值@Update
@Delete
@Results
:相当于resultMap
标签@Result
:相当于resultMap
里的id
或者result
标签@Many
:相当于resultMap
里的collection
@One
:相当于resultMap
里的association
单表CURD操作
目标
- 能够使用注解实现单表的CURD操作
实现
映射器里加方法
package com.demo.dao;
import com.demo.domain.User;
import com.demo.domain.User2;
import org.apache.ibatis.annotations.*;
import java.util.List;
/**
* 按住alt,鼠标竖着拖动,是列选择模式
* 按住ctrl,点击左右方向键,一个单词一个单词的跳
* 按住shift,点击左右方向键,一个字符一个字符的选中
* 按住ctrl+shift,点击左右方向键,一个单词一个单词的选中
*/
public interface UserDao {
/**
* 查询全部用户
*/
@Select("select * from user")
List<User> queryAll();
/**
* 根据id查询一个用户
*/
@Select("select * from user where id = #{id}")
User findById(Integer id);
/**
* 查询数量
*/
@Select("select count(*) from user")
int totalCount();
/**
* 插入一条用户数据
* <selectKey resultType="int" keyProperty="id" order="AFTER">
* select last_insert_id()
* </selectKey>
*/
@Insert("INSERT INTO USER(username, birthday, sex, address) " +
"VALUES(#{username}, #{birthday}, #{sex}, #{address})")
@SelectKey(statement = "select last_insert_id()",
resultType = int.class,
keyProperty = "id",
before = false)
void save(User user);
/**
* 修改用户
*/
@Update("update user set username = #{username}, birthday=#{birthday}," +
"sex=#{sex}, address=#{address} where id=#{id}")
void edit(User user);
/**
* 删除用户
*/
@Delete("delete from user where id = #{id}")
void delete(Integer id);
/**
* 查询用户,把结果封装成User2
* 注意:User2的属性名 和 user表的字段名 不同
* <resultMap id="user2Map" type="User2">
* <id property="userId" column="id"/>
* <result property="username" column="username"/>
* <result property="userBirthday" column="birthday"/>
* <result property="userSex" column="sex"/>
* <result property="userAddress" column="address"/>
* </resultMap>
*
* 代替resultMap标签的注解:@Results
* 代替id标签/result标签的注解:@Result
*/
@Select("select * from user")
@Results({
@Result(property = "userId", column = "id", id = true),
@Result(property = "username", column = "username"),
@Result(property = "userBirthday", column = "birthday"),
@Result(property = "userSex", column = "sex"),
@Result(property = "userAddress", column = "address")
})
List<User2> queryAllUser2();
}
功能测试
package com.demo;
import com.demo.dao.UserDao;
import com.demo.domain.User;
import com.demo.domain.User2;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
/**
* 注解开发测试
*/
public class AnnotationTest {
private InputStream is;
private SqlSession session;
private UserDao userDao;
@Test
public void testQueryAll(){
List<User> userList = userDao.queryAll();
for (User user : userList) {
System.out.println(user);
}
}
@Test
public void testFindById(){
System.out.println(userDao.findById(41));
}
@Test
public void testTotalCount(){
System.out.println(userDao.totalCount());
}
@Test
public void testSave(){
User user = new User();
user.setUsername("jack");
user.setSex("男");
user.setAddress("英格兰");
user.setBirthday(new Date());
userDao.save(user);
session.commit();
System.out.println(user);
}
@Test
public void testEdit(){
User user = userDao.findById(54);
user.setUsername("rose");
user.setSex("女");
userDao.edit(user);
session.commit();
}
@Test
public void testDelete(){
userDao.delete(54);
session.commit();
}
@Test
public void testQueryAllUser2(){
List<User2> user2s = userDao.queryAllUser2();
user2s.forEach(System.out::println);
}
@Before
public void init() throws IOException {
//1. 读取全局配置文件
is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2. 得到一个SqlSession对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
session = factory.openSession();
userDao = session.getMapper(UserDao.class);
}
@After
public void destroy() throws IOException {
session.close();
is.close();
}
}
还没有评论,来说两句吧...