Spring-Boot整合mybatis(三)-注解的基本使用

前面两篇说了一下springboot整合mybatis跟使用阿里的druid包,这次给大家介绍一下mybatis3.0后增加的注解基本使用吧,限于篇幅,下篇在介绍基于注解的动态SQL,本篇只介绍mybatis的基本使用,跟注意的地方

 

先介绍一下开发环境:

  1. jdk版本是1.8
  2. springboot的版本是1.4.1
  3. 开发工具为 intellij idea
  4. 引入mybatis的依赖,这里就不用说了,如果不知道引入哪个依赖,请看我第一篇博客

 

 

篇幅介绍:

  1.    先介绍增删改查四个注解(附带参数注解以及插入返回注解) 
  2.    然后是返回参数类型注解
  3.    一对多,一对一注解使用

------------------------------------分割线-------------------------------------

 

我们先创建2个表,SQL如下

create table city (id int primary key auto_increment, name varchar(32), state varchar(32), country varchar(32));
create table school (id int primary key auto_increment, name varchar(32), state varchar(32), cityId varchar(32));

创建2个是因为,我们会使用到级联的一对一,跟一对多查询

然后我们插入一些数据:

insert into school(name, state, cityId) values('北大附中','ON','1');
insert into school(name, state, cityId) values('人大附中','ON','1');
insert into school(name, state, cityId) values('清华附中','ON','1');


INSERT INTO city(name,state,country) VALUES ('北京','ON','CN');
INSERT INTO city(name,state,country) VALUES ('上海','ON','CN');
INSERT INTO city(name,state,country) VALUES ('广州','OFF','CN');

然后开始介绍我们的注解

 

然后是我们后面开发中使用频率最高的四个注解:

  1. @Select  查询
  2. @Insert 插入
  3. @Delete 删除
  4. @Update 修改

上面四个注解,应该是mybatis注解中使用频率最高的,四个都是method(方法)注解,然后我们在mapper下增加如下代码:

 

	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-22 23:28:33
	 * 描述:
	 * 		根据主键查询单个city对象
	 */
	@Select("SELECT * FROM city WHERE id = #{id}")
	City findById(@Param("id") int id);

	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-23 16:36:14
	 * 描述:
	 * 		更新对象
	 */
	@Update(" update city set name=#{city.name},state=#{city.state} where id=#{city.id} ")
	void upadate(@Param("city") City city);

	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-22 23:28:43
	 * 描述:
	 * 		插入数据,返回主键
	 */
	@Insert(" insert into city(name, state, country) values(#{city.name}, #{city.state}, #{city.country}) ")
	void insert(@Param("city") City city);


	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-22 23:46:03
	 * 描述:
	 * 		根据主键删除数据
	 */
	@Delete(" delete from city where id = #{id} ")
	void deleteId(@Param("id")int id);

 

 

上面代表了基本的增删改查,可能有同学会问了,@Param注解是干嘛用的,这个注解是用于你取参数是,可以根据取的别名进行取参,例如#{id}这样,如果你不想用这个注解也行,我们可以这么写:

 

	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-22 23:28:33
	 * 描述:
	 * 		根据主键查询单个city对象
	 */
	@Select("SELECT * FROM city WHERE id = #{0}")
	City findById(int id);

 

不通过id的别名进行取参,而是根据下标来进行取值,

 

 

可能也有同学想说,我插入后,想返回主键,可以,我们可以增加使用注解@Options来让它返回主键

 

	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-22 23:28:43
	 * 描述:
	 * 		插入数据,返回主键
	 */
	@Insert(" insert into city(name, state, country) values(#{city.name}, #{city.state}, #{city.country}) ")
	@Options(useGeneratedKeys = true, keyProperty = "city.id")
	int insert(@Param("city") City city);

 

注意了,这里必须使用别名,而且获取注解也是你执行该函数后,调用 插入model.get主键的形式来获取,如果不使用别名,你是不能获取到主键值的,

  1. userGeneratedKeys 默认是false,表示使用生成的ID
  2. keyProperty 映射的是model里面主键的名称

 

------------------------------------分割线-------------------------------------

 

接下来,我们介绍返回参数的4个注解:

  1. @ResultMap  配合@Results注解使用,返回一个映射的对象(以前使用过mybatis的同学应该知道,在XML里面会有个映射对象,就叫ResultMap,这个注解就是该作用)

  2. @ResultType 返回一个自定义对象,例如,一个表有10个字段,你只想用5个字段,而且又多条数据,这个注解就有用武之地了,

  3. @Results    里面用于映射自定义的model,以及自定义model的别名,可以配合@ResultMap使用
  4. @Result   注解@Results的子集,用于配合@Results注解的使用,用于映射表字段跟类属性使用,配合@One以及@Many进行一对一,一对多的使用

 

    因为以上每个注解内的参数比较多,时间有限,暂时不一一介绍了,有兴趣的可以自己进入注解查看源码跟注释就能看明白了,我这只介绍下基本的使用,具体使用代码如下:

 

	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-24 22:13:11
	 * 描述:
	 * 		级联查询,一对一,返回自定义对象
	 */
	@Select(" select * from school where id=#{id} ")
	@Results(
			id = "school",
			value = {
					@Result(column = "id",property = "id"),
					@Result(column = "name",property = "name"),
					@Result(column = "state",property = "state"),
					@Result(column = "cityId",property = "cityId")
					)
			}
	)
	School findOneToOne(@Param("id")int id);


	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-24 22:13:51
	 * 描述:
	 * 		根据ID跟状态,返回自定义对象
	 */
	@Select(" select * from school where id=#{id} and state=#{state} ")
	@ResultMap(value = "school")
	School findResultMap(@Param("id")int id,@Param("state")String state);


	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-23 15:17:59
	 * 描述:
	 * 		根据ID查询,返回自定义的List<Map> 集合
	 */
	@Select(" SELECT c.id AS cityId ,c.name AS cityName ,s.id AS schoolId,s.name AS schoolName FROM city c LEFT JOIN school s ON s.cityId = c.id WHERE c.id = #{id} ")
	@ResultType(List.class)
	List<Map<String,String>> findByMaps(@Param("id")int id);


	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-24 23:09:43
	 * 描述:
	 * 		根据ID查询,返回自定义的MAP集合
	 */
	@Select(" SELECT c.id AS cityId ,c.name AS cityName  FROM city c WHERE c.id =#{id} ")
	@ResultType(Map.class)
	Map<String,String> findByMap(@Param("id")int id);

 

 

在这介绍下上面注解内使用的一些参数解释

 @Results 

  •    id 映射model的别名,用于给@ResultMap注解内参数使用
  •    value[] 内部只能使用@Result 注解,用于表字段跟属性的映射

@Result

  •    column 表字段名称
  •    property 属性字段名称

@ResultMap

  • value  @Results 的id值

@ResultType

  • Class<?>  只能使用 class,例如你返回一个List,参数就是 List.clss,Map的话就是Map.class

 

 

------------------------------------分割线-------------------------------------

 

最后,我们介绍一下,一对多跟一对一的注解使用:

  1. @One跟@Many都是在注解 @Result 内使用,@Result注解内有个 one跟many的属性,对应的是注解@One跟@Many

  2. @One 一对一注解,表示返回的是一个关联对象
  3. @Many 一对多注解,表示返回的是一个关联对象集合

 

然后我们使用这两个注解非常简单,只需要在上面的注解添加上一些东西就好了,代码如下:

	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-24 22:13:11
	 * 描述:
	 * 		级联查询,一对一,返回自定义对象
	 */
	@Select(" select * from school where id=#{id} ")
	@Results(
			id = "school",
			value = {
					@Result(column = "id",property = "id"),
					@Result(column = "name",property = "name"),
					@Result(column = "state",property = "state"),
					@Result(column = "cityId",property = "cityId"),
					@Result(column = "cityId",property = "city",one = @One(select = "com.demo.mybatisDemo.CityMapper.findById"))
			}
	)
	School findOneToOne(@Param("id")int id);


	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-22 23:28:33
	 * 描述:
	 * 		根据主键查询单个city对象
	 */
	@Select("SELECT * FROM city WHERE id = #{id}")
	City findById(@Param("id") int id);


	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-24 23:04:41
	 * 描述:
	 * 		用于一对多级联查询使用的SQL
	 */
	@Select(" select * from school where cityId=#{cityId} ")
	School findManyToOne(@Param("cityId")int id);



	/**
	 * 创建人:贺小五
	 * 创建时间:2017-03-24 22:19:21
	 * 描述:
	 * 		级联查询,一对多,返回自定义的对象
	 */
	@Select(" select * from  city where id=#{id} ")
	@Results(
		id = "city",
		value = {
			@Result(column = "id",property = "id",id = true),
			@Result(column = "name",property = "name"),
			@Result(column = "state",property = "state"),
			@Result(column = "country",property = "country"),
			@Result(column = "id",property = "schools",many = @Many(select = "com.demo.mybatisDemo.SchoolMapper.findManyToOne"))
		}
	)
	City findOneToMany(@Param("id")int id);

 

实体对象代码如下:

 

public class School {

	private Integer id;

	private String name;

	private String state;

	private String cityId;

	private City city;

   /**省略GET跟SET方法**/
}

public class City {

	private Integer id;

	private String name;

	private String state;

	private String country;

	private List<School> schools;
 
    /**省略GET跟SET方法**/
}

 

  鉴于一对多跟一对一id值的不一样,我觉得还是有必要介绍一下:

  • 一对一(@One)注解中的id,使用的是属性名称
  • 一对多(@Many)注解中的id,是你本对象的主键属性名称
  • 我们只需要在@Result注解内添加 many=@Many注解,就能使用一对多,但是需要注意的地方是,@Many注解内使用的select必须是一个注解函数,而且,在级联的对象里面,必须有级联对象的集合属性.
  • 我们只需要在@Result注解内添加 one=@One注解,就能使用一对一,但是需要注意的地方是,@One注解内使用的select必须是一个注解函数,而且,在级联的对象里面,必须有级联对象的属性.
  • 级联对象查询结果,受你注解指向的select查询SQL的影响
  • 注解指向的select查询,是包名+接口名+方法名而成

 

以上就是开发中我们会常用到的一些注解,下篇我们介绍使用注解来完成动态SQL!

到这,文章就结束了!

以上,均为本人测试而得出的结果,可能会有出入,或者错误,欢迎指正

欢迎转载,请注明出处跟作者,谢谢!

转载于:https://my.oschina.net/u/2278977/blog/866608

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以回答这个问题。MyBatis-Spring-Boot-Starter 是一个 MyBatis 和 Spring Boot 集成的插件,可以方便地在 Spring Boot 项目中使用 MyBatis 进行数据库操作。它提供了自动配置和一些常用的配置选项,使得使用 MyBatis 变得更加简单和便捷。 ### 回答2: MyBatis-Spring-Boot-Starter是一个用于整合MyBatis和Spring Boot的工具。它提供了一种方便的方式来配置和使用MyBatis持久化框架,并简化了与Spring Boot的集成过程。 首先,MyBatis-Spring-Boot-Starter支持自动配置。它会根据项目的依赖和配置文件来自动初始化和配置MyBatis,大大减少了手动配置的工作量。只需简单地在配置文件中指定数据库的连接信息和MyBatis的相关配置,就可以轻松地集成MyBatis框架到Spring Boot应用中。 其次,MyBatis-Spring-Boot-Starter还支持事务管理。通过注解的方式,可以很方便地对数据库操作进行事务管理。开发者可以使用@Transactional注解来标记需要进行事务管理的方法,MyBatis-Spring-Boot-Starter会自动为其开启事务并处理事务的提交和回滚。 此外,MyBatis-Spring-Boot-Starter还提供了一些额外的功能,如分页插件、缓存管理等。分页插件可以简化分页查询操作,缓存管理可以提高查询效率。这些功能的开启和配置也是非常简单的,只需在配置文件中进行相应的配置即可。 总而言之,MyBatis-Spring-Boot-Starter是一个极大简化了整合MyBatis和Spring Boot的工具,它提供了自动配置、事务管理和其他辅助功能,使开发者可以更加轻松地使用MyBatis作为数据持久化框架,并结合Spring Boot快速构建稳定高效的应用程序。 ### 回答3: mybatis-spring-boot-starter是一个用于集成MyBatis和Spring Boot的工具包。它可以极大地简化在Spring Boot项目中使用MyBatis的配置和使用过程。 使用mybatis-spring-boot-starter,我们不再需要手动配置MyBatis的配置文件和数据源等信息。只需要在项目的application.properties(或application.yml)文件中简单配置几个参数,如数据库连接信息、MyBatisMapper接口所在的包路径等,就可以自动完成MyBatis的初始化工作。 另外,mybatis-spring-boot-starter还集成了一些常用的功能,方便我们在Spring Boot项目中使用MyBatis。例如,它可以自动扫描并注册Mapper接口,并将其注入到Spring容器中。我们可以直接使用@Autowired注解Mapper接口注入到我们的服务类中,无需手动实例化。 此外,mybatis-spring-boot-starter还提供了一些常见的插件和功能扩展。例如,它支持分页插件、动态SQL插件等,可以方便地对数据库进行操作。同时,它还支持事务管理,保证了数据库操作的一致性和完整性。 总之,mybatis-spring-boot-starter为我们提供了一种更加便捷和高效的方式来集成MyBatis和Spring Boot。它减少了我们的配置工作,提高了开发效率,并且提供了一些常用的功能扩展。使用mybatis-spring-boot-starter,我们可以更加专注于业务逻辑的开发,而无需过多关注底层的配置和细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值