SpringBoot整合mybatis并⾃动⽣成mapper和实体实例解析
最近⼀直都在学习Java,发现⽬前Java招聘中,mybatis出现的频率挺⾼的,可能是⽬前Java开发中使⽤⽐较多的数据库ORM框架。于是我准备研究下Spring Boot和mybatis 的整合。
1.在l⽂件中添加下⾯的配置
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>python处理xml文件
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 这个是官⽅的mybatis依赖,这个你不加没法⽤噻 -->
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 这个是⾃动⽣成mapper等的依赖,必须得加-->
<dependency>
<groupId&ator</groupId>
<artifactId>mybatis-generator</artifactId>
<version>1.3.5</version>
<type>pom</type>
</dependency>
<!--这个是⾃动⽣成mapper等的依赖,必须得加 mvnrepository/ator/mybatis-generator-core -->
<dependency>
<groupId&ator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId&ator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!--配置⽂件存放的地址-->
<!--<configurationFile>src/main/resources/l</configurationFile>-->
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
2.在application.properties配置⽂件中进⾏数据库和mybatis扫描的配置
spring.datasource.sql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/yddy?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
# mapper⽂件
mybatis.mapper-locations=classpath:mapper/*.xml #这⾥直接写*,对后⾯⾃定义sql,编写l有好处,⾃动扫描到这些⽂件,不⽤再改配置了
logging.level.dameiweb.learn.dao=debug
#fig = mybatis 配置⽂件名称
#mybatis.mapperLocations = mapper xml ⽂件地址
#peAliasesPackage = 实体类包路径
#peHandlersPackage = type handlers 处理器包路径
#mybatis.check-config-location = 检查 mybatis 配置是否存在,⼀般命名为 l
#utorType = 执⾏模式。默认是 SIMPLE
在resource⽬录下新建⼀个l和l。内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-////DTD MyBatis Generator Configuration 1.0//EN"
"/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<classPathEntry location="C:\Users\nick\.m2\repository/mysql/mysql-connector-java/5.1.46/mysql-connector-java-5.1.46.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接地址账号密码-->
<jdbcConnection driverClass="sql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/yddy?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC" userId="root" password="123456"> </jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--⽣成Model类存放位置-->
<javaModelGenerator targetPackage="com.del" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="false"/>
</javaModelGenerator>
<!--⽣成映射⽂件存放位置-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--⽣成Dao类存放位置-->
<!-- 客户端代码,⽣成易于使⽤的针对Model对象和XML配置⽂件的代码
type="ANNOTATEDMAPPER",⽣成Java Model 和基于注解的Mapper对象
type="MIXEDMAPPER",⽣成基于注解的Java Model 和相应的Mapper对象
type="XMLMAPPER",⽣成SQLMap XML⽂件和独⽴的Mapper接⼝
-
->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.dameiweb.learn.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
</context>
</generatorConfiguration>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="callSettersOnNulls" value="true"/>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
<typeAliases>
<typeAlias alias="Integer" type="java.lang.Integer" />
<typeAlias alias="Long" type="java.lang.Long" />
<typeAlias alias="HashMap" type="java.util.HashMap" />
<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
<typeAlias alias="ArrayList" type="java.util.ArrayList" />
<typeAlias alias="LinkedList" type="java.util.LinkedList" />
</typeAliases>
</configuration>
这样我们就配置好了Spring Boot和mybatis与mybatis⾃动⽣成mapper和实体的功能。这样我们要⽣成某个表的实体和mapper的时候,只需要在l中javaClientGenerator标签之后添加下⾯的内容即可。
此处我们已yd_movies表为例(主要数据库表名字不要⽤复数,这个表名肯定是我之前脑⼦抽了,搞个复数的名字)
<!--⽣成对应表及类名-->
<table tableName="yd_movies" domainObjectName="Movie" enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<columnOverride column="cover_photos" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="cover_photos_loc" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="pubdates" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="photographs_origin" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="photographs_origin_loc" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="languages" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="awards" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="summary" javaType="java.lang.String" jdbcType="VARCHAR" />
</table>
<!--columnOverride使⽤这个标签是为了防⽌数据库字段类型为text时候,mybatis会⽣成xxxxWithBLOBs⽂件。-->
然后点击idea右侧Maven projects,就可以看到mybatis-generate下的mybatis-generate:generate,双击mybatis-generate:generate即可。
**generator 注意点,也可以说是BUG
就是在⽣成的时候,在第⼆次⽣成的时候,dao 和entity 都会直接覆盖,⽽l 会直接追加,导致运⾏报错,⽽且很难。**
当我们需要⾃定义sql的时候,我们不能把这些也放到mapper⽂件中。不然,当数据库表的字段有更新需要重新⽣成mapper的时候,这样我们⾃定义的sql不就被覆盖没了么!所以我们需要在l的同级⽬录⾥,新建⼀个l⽂件,把⾃定义的sql放到这⾥,例⼦如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.dameiweb.learn.dao.MovieMapper" >
<select id="selectByCondition" resultMap="BaseResultMap" parameterType="com.dameiweb.learn.dto.MovieRequest">
SELECT yd_movies.* FROM yd_movies
LEFT JOIN yd_r_movie_countries ON yd_movies.id = yd_r_vie_id
LEFT JOIN yd_countries cou ON yd_r_untry_id = cou.id
LEFT JOIN yd_r_movie_category ON yd_movies.id = yd_r_vie_id
LEFT JOIN yd_category cat ON yd_r_movie_category.category_id = cat.id
LEFT JOIN yd_r_movie_actor ON yd_movies.id = yd_r_vie_id
LEFT JOIN yd_actors a ON yd_r_movie_actor.actor_id = a.id
WHERE
yd_movies.status = 1
<if test="movieRequest.title != null">
AND yd_movies.title LIKE "%"#{movieRequest.title}"%"
</if>
<if test="untry != null">
AND cou.id = #{untry}
</if>
<if test="movieRequest.category != null">
AND cat.id = #{movieRequest.category}
</if>
<if test="ar != null">
AND year = #{ar}
</if>
<if test="movieRequest.rate != null">
AND rate >= #{movieRequest.rate}
</if>
<if test="movieRequest.rate != null">
AND rate < (#{movieRequest.rate}+1)
</if>
<if test="movieRequest.subtype != null">
AND yd_movies.subtype = #{movieRequest.subtype}
</if>
GROUP BY yd_movies.id
ORDER BY updated_at DESC, year
</select>
</mapper>
总结
以上所述是⼩编给⼤家介绍的Spring Boot整合mybatis并⾃动⽣成mapper和实体,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论