ORM框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了。
一个是宣称可以不用写一句SQL的Hibernate,一个是可以灵活调试动态sql的MyBatis,两者各有特点,在企业级系统开发中可以根据需求灵活使用。
发现一个有趣的现象:传统企业大都喜欢使用hibernate,互联网行业通常使用mybatis。
Hibernate特点就是所有的sql都用Java代码来生成,不用跳出程序去写(看)sql,有着编程的完整性,发展到最顶端就是Spring Data Jpa这种模式了,基本上根据方法名就可以生成对应的sql了,有不太了解的可以看Spring Data Jpa的使用。
MyBatis初期使用比较麻烦,需要各种配置文件、实体类、dao层映射关联、还有一大推其它配置。当然mybatis也发现了这种弊端,初期开发了generator可以根据表结果自动生产实体类、配置文件和dao层代码,可以减轻一部分开发量;后期也进行了大量的优化可以使用注解了,自动管理dao层和配置文件等,发展到最顶端就是今天要讲的这种模式了,mybatis-spring-boot-starter就是springboot+mybatis可以完全注解不用配置文件,也可以简单配置轻松上手。
现在想想Spring Boot就是方便呀,任何东西只要关联到Spring Boot都是化繁为简。
官方说明:MyBatis Spring-Boot-Starter will help you use MyBatis with Spring Boot
写的比较简单,有疑问可以联系
leiyang_39@163.com
.
- mybatis-generator 使用教程
- 可以直接在项目中使用,但是感觉不灵活,个人喜好单独摘出来使用。
- 下载mybatis-generator包
- 下载mysql-connector-java包
- 生目录结构(
tree /f
查看目录结构)
D:. │ generator.xml │ mybatis-generator-core-1.3.5.jar │ mysql-connector-java-5.1.30.jar │ 生成语句.txt │ ├─java │ └─com │ └─ranhan │ ├─dao │ │ WalletLogsMapper.java │ │ │ └─model │ WalletLogs.java │ WalletLogsExample.java │ └─resources └─mapper WalletLogsMapper.xml
- 配置生成文件
generator.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- 数据库驱动包位置 --> <classPathEntry location="D:\mybatis-generator\mysql-connector-java-5.1.30.jar" /> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressAllComments" value="true" /> </commentGenerator> <!-- 数据库链接URL、用户名、密码 --> <!-- <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://115.29.164.59:3306/storedb" userId="cloudbridge" password="demonWang0510"> --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.0.133:3306/ranbb" userId="admin" password="123456"> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 生成模型的包名和位置 --> <javaModelGenerator targetPackage="com.ranhan.model" targetProject="D:\mybatis-generator\java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- 生成的映射文件包名和位置 --> <sqlMapGenerator targetPackage="mapper" targetProject="D:\mybatis-generator\resources"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- 生成DAO的包名和位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.ranhan.dao" targetProject="D:\mybatis-generator\java"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- 要生成那些表(更改tableName和domainObjectName就可以) --> <table tableName="wallet_logs" domainObjectName="WalletLogs" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true" /> </context> </generatorConfiguration>
- 执行生成语句
java -jar mybatis-generator-core-1.3.5.jar -configfile generator.xml -overwrite
- 配置MySQL数据库
-
pom.xml
引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- MySQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector-java.version}</version> </dependency>
-
application.properties
配置数据源和服务名称及端口
spring.application.name=test spring.datasource.url=@spring.datasource.url@ spring.datasource.username=@spring.datasource.username@ spring.datasource.password=@spring.datasource.password@ spring.datasource.driver-class-name=com.mysql.jdbc.Driver # Number of ms to wait before throwing an exception if no connection is available. spring.datasource.max-wait=10000 # Maximum number of active connections that can be allocated from this pool at the same time. spring.datasource.max-active=50 # Server port server.port=${port:9121} #Whether subclass-based (CGLIB) proxies are to be #created (true) as opposed to standard Java interface-based proxies (false). spring.aop.proxy-target-class=true # Validate the connection before borrowing it from the pool. spring.datasource.test-on-borrow=true #spring.datasource.validationQuery=SELECT 1
-
- 配置MyBatis
-
pom.xml
引入依赖
<!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot-starter.version}</version> </dependency>
-
application.properties
配置MyBatis
# Mybatis mybatis.mapper-locations=classpath:mapper/*Mapper.xml mybatis.type-aliases-package=com.ranhan.model mybatis.configuration.mapUnderscoreToCamelCase=true mybatis.configuration.useColumnLabel=true
- 程序入口添加扫描实体注解(ComplaintApplication.java)
@SpringBootApplication @MapperScan(basePackages = "com.ranhan.dao")
-
- 项目最终结构
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─ranhan
│ │ │ │ ComplaintApplication.java
│ │ │ │
│ │ │ ├─config
│ │ │ │ MyBatisConfig.java
│ │ │ │ TokenInterceptor.java
│ │ │ │ WebConfig.java
│ │ │ │
│ │ │ ├─controller
│ │ │ │ ComplaintController.java
│ │ │ │
│ │ │ ├─dao
│ │ │ │ ComplaintMapper.java
│ │ │ │
│ │ │ ├─domain
│ │ │ │ IdsVo.java
│ │ │ │ ReturnBase.java
│ │ │ │ ServiceException.java
│ │ │ │ UserException.java
│ │ │ │
│ │ │ ├─enums
│ │ │ │ ComplaintFromEnum.java
│ │ │ │ ComplaintStateEnum.java
│ │ │ │ ComplaintTypeEnum.java
│ │ │ │
│ │ │ ├─model
│ │ │ │ Complaint.java
│ │ │ │ ComplaintExample.java
│ │ │ │
│ │ │ └─service
│ │ │ │ ComplaintService.java
│ │ │ │ LoginService.java
│ │ │ │ OrderService.java
│ │ │ │
│ │ │ └─impl
│ │ │ ComplaintServiceImpl.java
│ │ │ LoginServiceImpl.java
│ │ │ OrderServiceImpl.java
│ │ │
│ │ └─resources
│ │ │ application-dev.properties
│ │ │ application-prod.properties
│ │ │ application-test.properties
│ │ │ application.properties
│ │ │ logback-spring.xml
│ │ │
│ │ └─mapper
│ │ ComplaintMapper.xml
│ │
│ └─test
│ └─java