倉庫地址:spring-boot-learning
歡迎star、fork,給做者一些鼓勵java
前言mysql
Mybatis 初期使用比較麻煩,須要各類配置文件、實體類、Dao 層映射關聯、還有一大推其它配置。mybatis-spring-boot-starter
就是 Spring Boot+ Mybatis 能夠徹底註解不用配置文件,也能夠簡單配置輕鬆上手。git
官方說明:MyBatis Spring-Boot-Starter will help you use MyBatis with Spring Boot
其實就是 Mybatis 看 Spring Boot 這麼火熱也開發出一套解決方案來湊湊熱鬧,但這一湊確實解決了不少問題,使用起來確實順暢了許多。mybatis-spring-boot-starter
主要有兩種解決方案,一種是使用註解解決一切問題,一種是簡化後的老傳統。github
固然任何模式都須要首先引入mybatis-spring-boot-starter
的 Pom 文件,如今最新版本是 2.0.1spring
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency>
我通常使用的是XML極簡模式,多是因爲以前用的hibernate用習慣了sql
極簡 xml 版本保持映射文件的老傳統,接口層只須要定義空方法,系統會自動根據方法名在映射文件中找對應的 Sql .mybatis
<dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
完整的 Pom 包這裏就不貼了,你們直接看源碼app
application.yml
相關配置推薦使用application.yml
進行配置,其實使用application.yml
或者application.properties
都是同樣的效果,application.yml
最終是轉換爲application.properties
進行生效的,只不過application.yml
視覺效果看起來更加明瞭。新建項目默認爲application.properties
,直接改成application.yml
,另外新增一個application-test.yml
用戶不一樣環境使用不一樣的配置文件用。ide
application.yml
配置:spring-boot
#指定配置文件爲test spring: profiles: active: test #配置Mybatis mybatis: type-aliases-package: com.niaobulashi.entity mapper-locations: classpath:mapper/*.xml configuration: # 開啓駝峯命名轉換,如:Table(create_time) -> Entity(createTime)。不須要咱們關心怎麼進行字段匹配,mybatis會自動識別`大寫字母與下劃線` map-underscore-to-camel-case: true #打印SQL日誌 logging: level: com.niaobulashi.dao: DEBUG
application-test.yml
配置:
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver
Spring Boot 會自動加載 spring.datasource.*
相關配置,數據源就會自動注入到 sqlSessionFactory 中,sqlSessionFactory 會自動注入到 Mapper 中,對了,你一切都不用管了,直接拿起來使用就好了。
在啓動類中添加對 mapper 包掃描@MapperScan
@SpringBootApplication @MapperScan("com.niaobulashi.dao") public class MybatisApplication { public static void main(String[] args) { SpringApplication.run(MybatisApplication.class, args); } }
或者直接在 Mapper 類上面添加註解@Mapper
,建議使用上面那種,否則每一個 mapper 加個註解也挺麻煩的
@Data public class SysUserEntity implements Serializable { private static final long serialVersionUID = 1L; //用戶ID private Long userId; //用戶名 private String username; //密碼 private String password; //鹽 private String salt; //郵箱 private String email; //手機號 private String mobile; //狀態 0:禁用 1:正常 private Integer status; //建立時間 private Date createTime; }
<mapper namespace="com.niaobulashi.dao.SysUserDao"> <!--查詢用戶的全部菜單ID--> <select id="queryUserInfo" resultType="com.niaobulashi.entity.SysUserEntity"> SELECT ur.* FROM sys_user ur WHERE 1 = 1 AND ur.user_id = #{userId} </select> </mapper>
其實就是把上個版本中 Mapper 的 Sql 搬到了這裏的 xml 中了
public interface SysUserDao { /** * 根據userId查詢用戶信息 * @param userId 用戶ID */ List<SysUserEntity> queryUserInfo(Long userId); }
SysUserService
接口類:
public interface SysUserService { /** * 查詢用戶的全部菜單ID */ List<SysUserEntity> queryUserInfo(Long userId); }
SysUserServiceImpl
實現類:
@Service("sysUserService") public class SysUserServiceImpl implements SysUserService { @Resource private SysUserDao sysUserDao; /** * 查詢用戶的全部菜單ID * @param userId * @return */ @Override public List<SysUserEntity> queryUserInfo(Long userId) { return sysUserDao.queryUserInfo(userId); } }
通過上面5個步驟就能夠完成基本的接口開發,省去了Controller層的開發
@RunWith(SpringRunner.class) @SpringBootTest public class MabatisTest { private final static Logger logger = LoggerFactory.getLogger(MabatisTest.class); @Autowired private SysUserService sysUserService; @Test public void queryUserInfo() throws Exception { SysUserEntity userEntity = new SysUserEntity(); userEntity.setUserId(1L); List<SysUserEntity> list = sysUserService.queryUserInfo(userEntity.getUserId()); logger.info("list:" + list); } }
SpringBoot和Mybatis這對CP,完美