mybatis基于注解开发

mybatis注解

  • 常用注解
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@ResultMap:实现引用@Results 定义的封装
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
@SelectProvider: 实现动态 SQL 映射
@CacheNamespace:实现注解二级缓存的使用

.mybatis注解开发

注意:
	1.SqlMapConfig.xml该怎么写还怎么写,注解开发,只是用来替代mapper.xml映射文件的.
	2.不要写mapper.xml映射文件
	3.不同的sql语句,要对应不同的@Servlet,@Insert,@Update,@Delete注解
步骤:
	1.不要写mapper.xml映射文件
	2.在接口方法上直接写@Servlet,@Insert,@Update,@Delete配置sql语句就可以了.
案例:
	@Select("select * from user")
	List findAll();

mybatis注解基本实现CRUD

public interface UserDao{
    // 查询所有用户
    @Select("select * from user")
    public List findAll();
    
    // 根据id查询用户
    @Select("select * from user where id = #{id}")
    public User findById(int id);
    
    // 删除
    @Delete("delete from user where id = #{id}"")
    public void delUser(int id);
    
    // 添加
    @Insert("insert into user(username,sex) values(#{username},#{sex}"")
    public void save(User user);
    
    // 更新
    @Update("update user set username = #{username},sex=#{sex} where id = #{id}")
    public void updateUser(User user);
    
}

mybatis注解开发-resultMap配置

分析:
    当实体类属性名称与数据库列名不一致,又想成功封装数据,使用注解开发,就需要使用results注解来解决名称不一致的问题
    使用方法与在mapper.xml中写法大致类似
位置:
	在方法上使用Results注解配置映射
案例:
	@Results(id="userMap",value={
		@Result(id=true,column = "id",property = "userId"),
		@Result(column = "username",property = "userName"),
		@Result(column = "address",property = "userAddress"),
		@Result(column = "sex",property = "userSex"),
		@Result(column = "birthday",property = "userBirthday")
	})
注意:
	1. Results中的 id="userMap" 是唯一标识,用来方便其他方法引用该"Results"的配置
	2. Result中的 id 表示是否是主键,默认false,如果是主键,可以添加上"id=true"
	3. 其他方法在引用该"Results"时,使用 @ResultMap("id值") 来引用配置

mybatis使用注解实现复杂映射关系开发

  实现复杂关系映射之前我们可以在映射文件中通过配置来实现,在使用注解开发时我们需要借助@Results 注解, @Result 注解, @One 注解, @Many 注解。
  • 复杂关系映射注解说明
@Results 注解

    代替的是标签
    该注解中可以使用单个@Result 注解,也可以使用@Result 集合
    @Results({@Result(), @Result() })或@Results(@Result())

@Resutl 注解

    代替了 标签和标签

@Result 中 属性介绍:

    id 是否是主键字段
    column 数据库的列名
    property 需要装配的属性名
    one 需要使用的@One 注解(@Result(one=@One)()))
    many 需要使用的@Many 注解(@Result(many=@many)()))

@One 注解(一对一)

    代替了标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。

@One 注解属性介绍:

    select 指定用来多表查询的 sqlmapper
    fetchType 会覆盖全局的配置参数 lazyLoadingEnabled。
    
    使用格式:
        @Result(column=" ",property="",one=@One(select=""))

@Many 注解(多对一)

    代替了标签,是是多表查询的关键,在注解中用来指定子查询返回对象集合。
    
    注意:聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,属性的 javaType(一般为 ArrayList)但是注解中可以不定义;
    
    使用格式:
        @Result(property="",column="",many=@Many(select=""))

mybatis注解开发-多表查询

使用:
	1.实体类的定义,使用xml时,没有区别
	2.sql语句的编写,和使用xml并且使用延迟加载时的sql也一样(也就是说,sql语句只写操作单表的sql语句)
	3.使用@Result配置属性和数据库列名映射时,添加one(从类为一),或many(从类为多)
案例:
	/**
	 *	多表查询,从表为一. (一对一,多对一)
	 *
	 *	查询所有账户,并且,获取每个账户所属的用户信息
	 * 	主表为"Account"
	 *	从表为"User"
	 */ 
	@Select("select * from account")
	@Results(id="accountMap",value = {
		// Account类的普通属性的映射和原来一样
		@Result(id=true,column = "id",property = "id"),
		@Result(column = "uid",property = "uid"),
		@Result(column = "money",property = "money"),
		// Account类中"从表"user属性的映射,要加上one(对一)
		@Result(column = "uid",property = "user",
			one=@One(
				select="com.huyang.dao.UserDao.findById",  //获取"从表"的数据时,调用的方法来获取
				fetchType= FetchType.EAGER  //使用"EAGER",表示立即加载
			)
		)
	})
	List findAll();
	
	
    /**
	 *	多表查询,从表为多. (一对多,多对多)
	 *
	 *	查询所有用户,同时,查询用户所拥有的账户
	 * 	主表为"User"
	 *	从表为"Account"
	 */ 
	@Select("select * from user")
	@Results(id="userMap",value={
		// User类的普通属性的映射和原来一样
		@Result(id=true,column = "id",property = "userId"),
		@Result(column = "username",property = "userName"),
		@Result(column = "address",property = "userAddress"),
		@Result(column = "sex",property = "userSex"),
		@Result(column = "birthday",property = "userBirthday"),
		// User类中"从表"accounts属性的映射,要加上many(对多)
		@Result(property = "accounts",column = "id",
			many = @Many(
				select = "com.huyang.dao.AccountDao.findAccountByUid",	//获取"从表"的数据时,调用的方法来获取
				fetchType = FetchType.LAZY	//使用"LAZY",表示延迟加载
			)
		)
	})
	List findAll();

你可能感兴趣的:(mybatis基于注解开发)