mybatis 常用注解说明
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@ResultMap:实现引用@Results 定义的封装
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
@SelectProvider: 实现动态 SQL 映射
@CacheNamespace:实现注解二级缓存的使用
使用 Mybatis 注解实现基本 CRUD
实体类
@Data
public class User implements Serializable {
private Integer userId;
private String userName;
private Date userBirthday;
private String userSex;
private String userAddress;
}
查询所有
@Select("select * from user")
@Results(
id="userMap",
value = {
@Result(id=true,column="id",property="userId"),
@Result(column="username",property="userName"),
@Result(column="sex",property="userSex"),
@Result(column="address",property="userAddress"),
@Result(column="birthday",property="userBirthday")
})
List<User> findAll();
接口中的方法添加注解,@Select
是sql查询语句,@Results
封装多个结果集
column
数据库列名
property
实体类属性名
id="userMap" 可以实现复用
测试
public class AnnotationCRUDTest {
private InputStream in;
private SqlSessionFactory factory;
private SqlSession session;
private UserMapper userMapper;
@Before
public void init() throws IOException {
//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(in);
//3.创建 session
session = factory.openSession();
//4.创建代理对象
userMapper = session.getMapper(UserMapper.class);
}
@After//junit 的注解
public void destroy()throws Exception {
//提交事务
session.commit();
//释放资源
session.close();
//关闭流
in.close();
}
@Test
public void testFindAll(){
List<User> all = userMapper.findAll();
for(User user:all){
System.out.println(user);
}
}
}
根据id 查询user对象
@Select("select * from user where id = #{uid}")
@ResultMap("userMap")
User findById(Integer userId);
@ResultMap
实现对上面的Results的引用
@Test
public void testFindById(){
User user = userMapper.findById(41);
System.out.println(user);
}
插入操作
@Insert("insert into user(username,sex,birthday,address)values(#{userName}, #{userSex}, #{userBirthday},#{userAddress})")
@SelectKey(keyColumn="id",keyProperty="userId",resultType=Integer.class,before = false, statement = { "select last_insert_id()" })
int saveUser(User user);
属性介绍:
#{}
x写的是实体类的属性
获取返回值,封装到keyProperty
属性中去就是实体类的userId属性
keyColumn
是数据库的id
resultType
是返回值的类型,id是整数
测试
@Test
public void testSave(){
User user = new User();
user.setUserName("张飞");
user.setUserAddress("北京");
user.setUserBirthday(new Date());
user.setUserSex("男");
int res = userMapper.saveUser(user);
System.out.println("影响行数"+res);
System.out.println("插入主键值"+user.getUserId());
}
更新操作
//根据id更新记录
@Update("update user set username=#{userName},address=#{userAddress},sex=#{userSex},birthday=#{userBirthday} where id=#{userId} ")
int updateUser(User user);
@Test
public void testUpdate(){
User user = new User();
user.setUserId(41);
user.setUserName("zzzzzzzzz");
userMapper.updateUser(user);
}
此时会更新user id为41的数据,根据sql语句可知如果没有设置的属性那么,更新后是空的。
删除操作
@Delete("delete from user where id = #{uid}")
int deleteUser(Integer userId);
对于 Integer以及其他基本数据类型的参数#{uid}可以任意写
@Test
public void testDelete(){
int i = userMapper.deleteUser(57); //返回影响行数
System.out.println(i);
}
聚合查询
//聚合函数
@Select("select count(*) from user")
int findTotal();
@Test
public void testCount(){
int total = userMapper.findTotal();
System.out.println(total);
}
模糊查询
//模糊查询
@Select("select * from user where username like #{username}")
List<User> findByName(String name);
@Test
public void findByName(){
List<User> users = userMapper.findByName("%张%");
for(User u:users){
System.out.println(u);
}
}
网友评论