SpringCloud+MyBatis+Redis整合—— 超详细实例(一)

1、SpringCloud+MyBatis

  MyBatis 是一款优秀的轻量级半自动持久层框架,与之相对应的还有hibernate框架。

    话不多说,接下来搭建SpringCloud+MyBatis环境:

  • 第一步,在SpringCloud环境中的pom.xml中加入:
 1 <!-- 引用Mybatis 和 Mysql驱动开始  -->
 2         <dependency>  
 3             <groupId>org.mybatis.spring.boot</groupId>  
 4             <artifactId>mybatis-spring-boot-starter</artifactId>  
 5             <version>1.3.0</version>  
 6         </dependency>  
 7         <dependency>  
 8             <groupId>mysql</groupId>  
 9             <artifactId>mysql-connector-java</artifactId>  
10         </dependency>  
11 <!-- 引用Mybatis 和 Mysql驱动结束  -->
  • 第二步,在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', 'king', '1994-10-08', '卡布奇诺国际社区');
  • 第三步,在SpringCloud中配置反向生成工具对User表生成相应的实体类和配置文件

在pom.xml文件的<bulid>标签中通过maven添加插件引用

 1         <plugin>  
 2                 <groupId>org.mybatis.generator</groupId>  
 3                 <artifactId>mybatis-generator-maven-plugin</artifactId>  
 4                 <version>1.3.5</version>  
 5                 <dependencies>  
 6                     <dependency>  
 7                         <groupId> mysql</groupId>  
 8                         <artifactId> mysql-connector-java</artifactId>  
 9                         <version> 5.1.39</version>  
10                     </dependency>  
11                     <dependency>  
12                         <groupId>org.mybatis.generator</groupId>  
13                         <artifactId>mybatis-generator-core</artifactId>  
14                         <version>1.3.5</version>  
15                     </dependency>  
16                 </dependencies>  
17                 <executions>  
18                     <execution>  
19                         <id>Generate MyBatis Artifacts</id>  
20                         <phase>package</phase>  
21                         <goals>  
22                             <goal>generate</goal>  
23                         </goals>  
24                     </execution>  
25                 </executions>  
26                 <configuration>  
27                     <!--允许移动生成的文件 -->  
28                     <verbose>true</verbose>  
29                     <!-- 是否覆盖 -->  
30                     <overwrite>true</overwrite>  
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     <!--mysql 连接数据库jar 这里选择自己本地位置-->  
 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             <!-- 是否去除自动生成的注释 true:是 : false:否 -->  
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         <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和  
19            NUMERIC 类型解析为java.math.BigDecimal -->  
20         <javaTypeResolver>  
21             <property name="forceBigDecimals" value="false" />  
22         </javaTypeResolver>  
23   
24         <!-- targetProject:生成PO类的位置 -->  
25         <javaModelGenerator targetPackage="com.didispace.web.jdbc.po"  
26                             targetProject="src/main/java">  
27             <!-- enableSubPackages:是否让schema作为包的后缀 -->  
28             <property name="enableSubPackages" value="false" />  
29             <!-- 从数据库返回的值被清理前后的空格 -->  
30             <property name="trimStrings" value="true" />  
31         </javaModelGenerator>  
32         <!-- targetProject:mapper映射文件生成的位置  
33            如果maven工程只是单独的一个工程,targetProject="src/main/java"  
34            若果maven工程是分模块的工程,targetProject="所属模块的名称",例如:  
35            targetProject="ecps-manager-mapper",下同-->  
36         <sqlMapGenerator targetPackage="mapXml"  
37                          targetProject="src/main/resources">  
38             <!-- enableSubPackages:是否让schema作为包的后缀 -->  
39             <property name="enableSubPackages" value="false" />  
40         </sqlMapGenerator>  
41         <!-- targetPackage:mapper接口生成的位置 -->  
42         <javaClientGenerator type="XMLMAPPER"  
43                              targetPackage="com.didispace.web.jdbc.mapper"  
44                              targetProject="src/main/java">  
45             <!-- enableSubPackages:是否让schema作为包的后缀 -->  
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 }

访问 127.0.0.1:1111/hello 

显示Hello SpringBoot king

至此SpringCloud+MyBatis搭建成功!

 


注释一:Mybatis和Hibernate框架的区别

  1. 说起Hibernate和MyBatis最大的区别,用很宽泛的话讲就是hibernate是自动的,mybatis是半自动的。自动指的是hibernate因为有良好的映射机制,针对高级查询,也可以不必手动编写sql,开发者可以更关注于业务逻辑而不用担心sql的生成和结果映射。mybatis半自动指的是它在做高级查询时,必须手动写sql以及resultMap。所以说,mybatis比hibernate开发工作量大。
  2. 第二点就是在sql优化方面,hibernate默认是会把表中所有的列都查出来的,而mybatis是自己指定要查哪些列。当然,hibernate允许自己指定查什么,但是就会破坏hibernate开发的简洁性。所以mybatis在sql优化上还是比hibernate灵活的。
  3. 第三点hibernate自带日志统计,而mybatis需要依靠log4j来实现
  4. 第四点hibernate强大的数据库无关性,只需在xml文件中配置驱动和方言,就可以实现和不同数据库的交互。而mybatis的所有sql和所使用的数据库有直接关系,一旦变更数据库,那么你的sql语句基本就是要修改了。
  5. 第五点随便提一句,mybatis比hibernate更加适合开发复杂查询的项目,且更容易上手,从第一点就可以看出来。

注释二:Maven中构建插件的标签

注释三:生成 po 和 mapper,都会生成 Example 类和其对应的 CURD方法(用于辅助查询等)如果不需要在 table 标签里将要生成的方法给关掉即可,代码如下:

 <table tableName="user"

        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必须为类的全路径 <insert id="insertSelective" parameterType="com.didispace.web.jdbc.po.User">,加上后为 <insert id="insertSelective" parameterType="User">即可。

注释六:之前是直接在Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,麻烦,通过使用@MapperScan可以指定要扫描的Mapper类的包的路径(支持多路径)。

posted @ 2018-08-16 10:31  用心记录每一天  阅读(35862)  评论(0编辑  收藏  举报