之前在Spring Boot中整合MyBatis时,采用了注解的配置方式,相信很多人还是比较喜欢这种优雅的方式的,也收到不少读者朋友的反馈和问题,主要集中于针对各种场景下注解如何使用,下面就对几种常见的情况举例说明用法。
在做下面的示例之前,先准备一个整合好MyBatis的工程,可参见Spring
Boot整合MyBatis,也可直接使用整合好的样例:Chapter3-2-7。
传参方式
下面通过几种不同传参方式来实现前文中实现的插入操作。
使用@Param
在之前的整合示例中我们已经使用了这种最简单的传参方式,如下:
1 2
|
@Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})")
int insert(@Param("name") String name, @Param("age") Integer age);
|
这种方式很好理解,@Param
中定义的name
对应了SQL中的#{name}
,age
对应了SQL中的#{age}
。
使用Map
如下代码,通过Map对象来作为传递参数的容器:
1 2
|
@Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER})")
int insertByMap(Map<String, Object> map);
|
对于Insert语句中需要的参数,我们只需要在map中填入同名的内容即可,具体如下面代码所示:
1 2 3 4
|
Map<String, Object> map = new HashMap<>(); map.put("name", "CCC"); map.put("age", 40); userMapper.insertByMap(map);
|
使用对象
除了Map对象,我们也可直接使用普通的Java对象来作为查询条件的传参,比如我们可以直接使用User对象:
1 2
|
@Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})")
int insertByUser(User user);
|
这样语句中的#{name}
、#{age}
就分别对应了User对象中的name
和age
属性。
增删改查
MyBatis针对不同的数据库操作分别提供了不同的注解来进行配置,在之前的示例中演示了@Insert
,下面针对User表做一组最基本的增删改查作为示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public interface UserMapper { @Select("SELECT * FROM user WHERE name = #{name}") User findByName(@Param("name") String name); @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})") int insert(@Param("name") String name, @Param("age") Integer age); @Update("UPDATE user SET age=#{age} WHERE name=#{name}") void update(User user); @Delete("DELETE FROM user WHERE id =#{id}") void delete(Long id); }
|
在完成了一套增删改查后,不妨我们试试下面的单元测试来验证上面操作的正确性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class) @Transactional
public class ApplicationTests { @Autowired
private UserMapper userMapper; @Test
@Rollback
public void testUserMapper() throws Exception {
userMapper.insert("AAA", 20); User u = userMapper.findByName("AAA"); Assert.assertEquals(20, u.getAge().intValue());
u.setAge(30); userMapper.update(u); u = userMapper.findByName("AAA"); Assert.assertEquals(30, u.getAge().intValue());
userMapper.delete(u.getId()); u = userMapper.findByName("AAA"); Assert.assertEquals(null, u); } }
|
返回结果的绑定
对于增、删、改操作相对变化较小。而对于“查”操作,我们往往需要进行多表关联,汇总计算等操作,那么对于查询的结果往往就不再是简单的实体对象了,往往需要返回一个与数据库实体不同的包装类,那么对于这类情况,就可以通过@Results
和@Result
注解来进行绑定,具体如下:
1 2 3 4 5 6
|
@Results({ @Result(property = "name", column = "name"), @Result(property = "age", column = "age") })
@Select("SELECT name, age FROM user")
List<User> findAll();
|
在上面代码中,@Result中的property属性对应User对象中的成员名,column对应SELECT出的字段名。在该配置中故意没有查出id属性,只对User对应中的name和age对象做了映射配置,这样可以通过下面的单元测试来验证查出的id为null,而其他属性不为null:
1 2 3 4 5 6 7 8 9
|
@Test @Rollback
public void testUserMapper() throws Exception { List<User> userList = userMapper.findAll(); for(User user : userList) { Assert.assertEquals(null, user.getId()); Assert.assertNotEquals(null, user.getName()); } }
|
后记
本文主要介绍几种最为常用的方式,更多其他注解的使用可参见文档:http://www.mybatis.org/mybatis-3/zh/java-api.html
本文示例完整代码:Chapter3-2-8
分享到:
相关推荐
使用 MyBatis 实现关联查询非常简单,只需要在 Mapper 接口中使用 @Results 注解指定关联关系。例如,在 UserMapper 接口中,使用 @Results 注解指定了用户的公司信息和账户信息。 ```java public interface ...
《基于Spring Boot+MyBatis的CRM客户管理系统详解》 在现代企业中,客户关系管理(Customer Relationship Management,简称CRM)系统是至关重要的工具,它帮助企业有效地管理与客户的交互,提高销售效率,优化客户...
《Spring Boot集成MyBatis详解》 在Java开发领域,Spring Boot以其简洁的配置和快速的启动特性,已经成为构建微服务应用的首选框架。而MyBatis作为一款强大的持久层框架,深受开发者喜爱,它提供了灵活的SQL映射...
在Spring Boot中,我们可以通过@ConfigurationProperties注解来配置MyBatis的相关属性,如数据源、事务管理器等,并使用@MapperScan扫描Mapper接口,实现SQL的映射。 3. **Layui简介与页面构建** Layui是一款模块...
【Spring Boot整合MyBatis详解】 在现代Java开发中,Spring Boot因其简洁的配置和强大的功能而成为首选的框架。而MyBatis作为一款优秀的持久层框架,与Spring Boot结合可以构建高效、灵活的数据库访问层。本文将...
【Spring-Boot+Mybatis框架整合详解】 Spring-Boot与Mybatis的整合是现代Java开发中的常见实践,这种集成能够帮助开发者快速构建高效且简洁的应用程序。本框架以Spring-Boot为核心,结合Mybatis作为持久层框架,为...
《Spring Boot集成MyBatis详解:基于spring-boot-starter-mybatis-2.2.1》 在现代Java开发中,Spring Boot以其简化配置、快速启动的优势成为主流框架。而MyBatis作为轻量级持久层框架,以其灵活的SQL映射和强大的...
通过阅读本文,你将能够了解如何在Spring Boot项目中使用MyBatis Plus进行高效的数据操作。 MyBatis Plus是一个强大而易于使用的MyBatis扩展工具,它提供了丰富的功能和工具,帮助开发者简化数据库操作,提高开发...
《Spring Boot集成MyBatis详解:以spring-boot-starter-mybatis-1.1.0为例》 在现代Java开发中,Spring Boot以其简洁、高效的特点备受开发者青睐,而MyBatis作为一款轻量级的持久层框架,因其灵活的数据访问方式也...
《Spring Boot集成MyBatis详解:基于Spring Boot 2.2.0版本》 Spring Boot以其简化Spring应用程序的初始化和配置而备受青睐,而MyBatis作为轻量级的持久层框架,以其灵活的SQL映射和易于使用的特性在Java开发中广泛...
《Spring Boot集成MyBatis详解》 在Java开发领域,Spring Boot以其简洁的配置和快速的应用启动特性,已经成为主流的微服务框架。而MyBatis作为一款轻量级的持久层框架,以其灵活的SQL映射和强大的实体与数据库交互...
《Spring Boot集成MyBatis详解》 在Java开发领域,Spring Boot以其简洁的配置和快速的应用启动而备受青睐。MyBatis作为一款优秀的持久层框架,简化了SQL操作,使得数据库访问更为便捷。当这两者结合,便形成了...
《Spring Boot集成MyBatis详解》 在Java开发领域,Spring Boot框架因其便捷的配置、快速的启动和强大的依赖管理而备受青睐。MyBatis作为一款轻量级的持久层框架,以其灵活的SQL映射和优秀的性能深受开发者喜爱。当...
starter-mybatis`是Spring Boot为Mybatis提供的一个起步依赖,它包含了Mybatis、Mybatis-Spring和相关依赖,使得开发者无需手动管理这些依赖,只需要引入这个starter,就可以快速地在Spring Boot项目中使用Mybatis。...
【Spring Boot + Mybatis 工程模板详解】 Spring Boot 和 Mybatis 的结合是现代 Java 开发中的常见选择,它们能够帮助开发者快速构建高效、简洁的Web应用。本模板提供了一个基础的Spring Boot集成Mybatis的工程结构...
《Spring Boot集成MyBatis详解:从1.3.0版本到最新实践》 Spring Boot以其简化配置、快速启动的特点,已经成为Java开发领域的热门框架。而MyBatis作为一款轻量级的持久层框架,以其灵活的SQL映射功能深受开发者喜爱...
《Spring Boot集成MyBatis详解:基于spring-boot-starter-mybatis-2.1.0》 在现代Java开发中,Spring Boot以其简化配置、快速启动的特性,深受开发者喜爱。而MyBatis作为轻量级的持久层框架,以其灵活的SQL映射和...
《Spring Boot集成MyBatis详解:以spring-boot-starter-mybatis-2.3.1为例》 在现代Java开发中,Spring Boot以其简洁、高效的特点成为首选框架,而MyBatis作为轻量级的持久层框架,也因其灵活的数据访问能力受到...
《Spring Boot + Mybatis 后台管理系统详解》 在当今的Web开发领域,Spring Boot以其简洁的配置、快速的启动和强大的集成能力,已经成为构建后台服务的首选框架。结合Mybatis这一轻量级的持久层框架,我们可以创建...