1、SpringCloud+MyBatis
MyBatis 是一款优秀的轻量级半自动持久层框架,与之相对应的还有hibernate框架。①
话不多说,接下来搭建SpringCloud+MyBatis环境:
- 第一步,在SpringCloud环境中的pom.xml中加入:
1 2 <dependency> 3 <groupId>org.mybatis.spring.bootgroupId> 4 <artifactId>mybatis-spring-boot-starterartifactId> 5 <version>1.3.0version> 6 dependency> 7 <dependency> 8 <groupId>mysqlgroupId> 9 <artifactId>mysql-connector-javaartifactId> 10 dependency> 11
- 第二步,在Mysql数据库中创建User表
-- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL COMMENT '主键', `name` varchar(64) NOT NULL COMMENT '姓名', `birthday` date DEFAULT NULL COMMENT '生日', `address` varchar(256) DEFAULT NULL COMMENT '地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', '石露露', '1994-10-08', '卡布奇诺国际社区');
- 第三步,在SpringCloud中配置反向生成工具对User表生成相应的实体类和配置文件
在pom.xml文件的
1 <plugin> 2 <groupId>org.mybatis.generatorgroupId> 3 <artifactId>mybatis-generator-maven-pluginartifactId> 4 <version>1.3.5version> 5 <dependencies> 6 <dependency> 7 <groupId> mysqlgroupId> 8 <artifactId> mysql-connector-javaartifactId> 9 <version> 5.1.39version> 10 dependency> 11 <dependency> 12 <groupId>org.mybatis.generatorgroupId> 13 <artifactId>mybatis-generator-coreartifactId> 14 <version>1.3.5version> 15 dependency> 16 dependencies> 17 <executions> 18 <execution> 19 <id>Generate MyBatis Artifactsid> 20 <phase>packagephase> 21 <goals> 22 <goal>generategoal> 23 goals> 24 execution> 25 executions> 26 <configuration> 27 28 <verbose>trueverbose> 29 30 <overwrite>trueoverwrite> 31 32 <configurationFile> 33 src/main/resources/mybatis-generator.xml 34 configurationFile> 35 configuration> 36 plugin>
新建配置文件generatorConfig.xml,配置文件需配置数据库jar包位置,生成的文件存放位置等信息:
1 xml version="1.0" encoding="UTF-8"?> 2 DOCTYPE generatorConfiguration 3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 5 <generatorConfiguration> 6 7 <classPathEntry location="F:\dev-space\repo\mysql\mysql-connector-java\5.1.45\mysql-connector-java-5.1.45.jar" /> 8 <context id="testTables" targetRuntime="MyBatis3"> 9 <commentGenerator> 10 11 <property name="suppressAllComments" value="true" /> 12 commentGenerator> 13 14 <jdbcConnection driverClass="com.mysql.jdbc.Driver" 15 connectionURL="jdbc:mysql://192.168.1.100:3306/test?serverTimezone=UTC" userId="bdgascloud" 16 password="bdgascloud"> 17 jdbcConnection> 18 20 <javaTypeResolver> 21 <property name="forceBigDecimals" value="false" /> 22 javaTypeResolver> 23 24 25 <javaModelGenerator targetPackage="com.didispace.web.jdbc.po" 26 targetProject="src/main/java"> 27 28 <property name="enableSubPackages" value="false" /> 29 30 <property name="trimStrings" value="true" /> 31 javaModelGenerator> 32 36 <sqlMapGenerator targetPackage="mapXml" 37 targetProject="src/main/resources"> 38 39 <property name="enableSubPackages" value="false" /> 40 sqlMapGenerator> 41 42 <javaClientGenerator type="XMLMAPPER" 43 targetPackage="com.didispace.web.jdbc.mapper" 44 targetProject="src/main/java"> 45 46 <property name="enableSubPackages" value="false" /> 47 javaClientGenerator> 48 49 <table schema="" tableName="user">table>③
50 context> 51 generatorConfiguration>
最好先右键项目选择maven–>update project… ④
然后再maven build….
配置运行参数:
Goals:mybatis-generator:generate -e
Profiles:generatorConfig.xml
最后点击run等待完成 ,会发现如下文件被自动生成:
- 第四步,在application.properties中添加
spring.datasource.url=jdbc:mysql://192.168.1.100:3306/test?serverTimezone=UTC #springboot会直接在容器中构建一个dataSource供我们使用。
spring.datasource.username=bdgascloud
spring.datasource.password=bdgascloud
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.typeAliasesPackage=com.didispace.web.jdbc.po ⑤
mybatis.mapperLocations=classpath:mapXml/UserMapper.xml
- 第五步,在主application类中添加
3 @MapperScan("com.didispace.web.jdbc.mapper")⑥ 4 @SpringBootApplication 5 //@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class}) 6 public class HelloApplication { 7 8 public static void main(String[] args) { 9 SpringApplication.run(HelloApplication.class, args); 10 } 11 }
最后在controller中执行方法,页面展示效果
1 @RestController 2 public class HelloController { 3 @Autowired 4 private UserMapper userMapper; 5 6 @RequestMapping("/hello") 7 public String index() { 8
9 User user = userMapper.selectByPrimaryKey(1); 10
11 return "Hello SpringBoot"+user.getName(); 12 13 } 14 15 }
至此SpringCloud+MyBatis搭建成功!
注释一:Mybatis和Hibernate框架的区别
- 说起Hibernate和MyBatis最大的区别,用很宽泛的话讲就是hibernate是自动的,mybatis是半自动的。自动指的是hibernate因为有良好的映射机制,针对高级查询,也可以不必手动编写sql,开发者可以更关注于业务逻辑而不用担心sql的生成和结果映射。mybatis半自动指的是它在做高级查询时,必须手动写sql以及resultMap。所以说,mybatis比hibernate开发工作量大。
- 第二点就是在sql优化方面,hibernate默认是会把表中所有的列都查出来的,而mybatis是自己指定要查哪些列。当然,hibernate允许自己指定查什么,但是就会破坏hibernate开发的简洁性。所以mybatis在sql优化上还是比hibernate灵活的。
- 第三点hibernate自带日志统计,而mybatis需要依靠log4j来实现
- 第四点hibernate强大的数据库无关性,只需在xml文件中配置驱动和方言,就可以实现和不同数据库的交互。而mybatis的所有sql和所使用的数据库有直接关系,一旦变更数据库,那么你的sql语句基本就是要修改了。
- 第五点随便提一句,mybatis比hibernate更加适合开发复杂查询的项目,且更容易上手,从第一点就可以看出来。
注释二:Maven中构建插件的标签
注释三:生成 po 和 mapper,都会生成 Example 类和其对应的 CURD方法(用于辅助查询等)如果不需要在 table 标签里将要生成的方法给关掉即可,代码如下:
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false">
table>
注释四:update project本身是更新项目的意思。当Maven工程被做了一些改变后(主要是结构上的改变),必须让maven重新生成或修改相关文件。否则eclipse将不知道变化。这时候需要运行“update project”来更新相对应的“eclipse的.classpath”文件,来更新它,让eclipse知道这个包是buildpath。
注释五:当没有设置该属性时,*.Mapper.xml文件里parameterType必须为类的全路径
注释六:之前是直接在Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,麻烦,通过使用@MapperScan可以指定要扫描的Mapper类的包的路径(支持多路径)。