动态SQL
当我们注册页面时,当中的所要填入的选项有必选项和非必需选项,而非必选项当中用户可能会有不确定的选项时,应该采取默认值而不是将数值置为null,那么怎么解决这一问题,就需要使用动态SQL语句来实现
<if>标签
java
<insert id="insertByCondition">
insert into user_info (username,`password`,age
<if test="gender != null">
,gender
</if>
) values (#{username},#{password},#{age}
<if test="gender != null">
,#{gender}
</if>
)
</inser
之前时一个字段时非必选项,如果当多个字段都不确定时,可能就会导致SQL语句报错下一个标签来来解决这个问题
<trim>标签
suffixOverrides:去除后缀
perfixOverrides:去除前缀
prefix:添加前缀
suffix:添加后缀
java
<insert id="insertByCondition">
insert into user_info
<trim suffixOverrides="," prefix="(" suffix=")">
<if test="username != null">
username,
</if>
<if test="password != null">
password,
</if>
<if test="age != null">
age,
</if>
<if test="gender != null">
gender
</if>
</trim>
<trim suffixOverrides="," prefix="values (" suffix=")">
<if test="username != null">
#{username},
</if>
<if test="password != null">
#{password},
</if>
<if test="age != null">
#{age},
</if>
<if test="gender != null">
#{gender}
</if>
</trim>
</insert>
<where>标签
根据条件拼接SQL语句进行查询,如果SQL语句where后面的条件都没有,SQL语句就会出错
第一种解决办法
java
<select id="selectByCondition" resultType="com.Kon.mybatis.entity.UserInfo">
select * from user_info where 1=1
<trim prefixOverrides="and">
<if test="age != null">
and age = #{age}
</if>
<if test="gender != null">
and gender = #{gender}
</if>
</trim>
</select>
第二种(加where标签)帮忙去掉"and",并且没有条件where关键字就不会出现
<set>标签和<where>标签同理
<foreach>标签
可以对集合进行遍历,例如:进行批量删除
java
<delete id="batchByCondition">
delete from user_info where id in
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
<include>标签
SQL语句当中会有重复的语句,就需要此标签来替代
java
<sql id="normal">
id, username, `password`, age, gender, phone, delete_flag,
create_time, update_time
</sql>
<!--只有select需要对象映射,resultType=" " -->
<select id="selectAll" resultType="com.Kon.mybatis.entity.UserInfo" >
select <include refid="normal"></include> from user_info
</select>
MyBatis Generator
通过MyBatis Generator插件更具数据表生成Model, Mapper接⼝以及SQL映射⽂件
通过添加插件
java
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<phase>deploy</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<!--generator配置文件所在位置-->
<configurationFile>src/main/resources/generate/generator.xml</configurationFile>
<!-- 允许覆盖生成的文件, mapxml不会覆盖, 采用追加的方式-->
<overwrite>true</overwrite>
<verbose>true</verbose>
<!--将当前pom的依赖项添加到生成器的类路径中-->
<includeCompileDependencies>true</includeCompileDependencies>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
</plugin>
添加generatorConfig.xml并修改
java
<?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>
<!-- 一个数据库一个context -->
<context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!--去除注释-->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库链接信息-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/book_test?serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true"
userId="root"
password="123456">
</jdbcConnection>
<!-- 生成实体类 -->
<javaModelGenerator targetPackage="generate.entity" targetProject="src/main/java" >
<property name="enableSubPackages" value="false"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成mapxml文件 -->
<sqlMapGenerator targetPackage="MybatisGenerator" targetProject="src/main/resources" >
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成mapxml对应client,也就是接口dao -->
<javaClientGenerator targetPackage="generate.mapper" targetProject="src/main/java" type="XMLMAPPER" >
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 -->
<table tableName="book_info">
<property name="useActualColumnNames" value="false" />
<!-- 数据库表主键 -->
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
</table>
<table tableName="user_info">
<property name="useActualColumnNames" value="false" />
<!-- 数据库表主键 -->
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
</table>
</context>
</generatorConfiguration>