spring上使用mybatis快速生成插件快速生成xml、model、mapper

你是否厭倦了每次用mybatis都要寫一大堆配置文件?是否厭倦每一個sql操作都要寫一大堆東西?好,厭倦就對了,這裏獻上快速生成方法。

首先數據庫得先來一個。

一、建庫建表

id name age
1342424252353 xyh 22
create database testDB;
use testDB;
create table test(id varchar(20) primary key,name varchar(10) not null default '',age tinyint not null default 0);

二、配置pom.xml文件

這裏需要引入mybatis-generator-maven-plugin插件,用於快速生成。

<mybatis_generator_version>1.3.2</mybatis_generator_version>
<dependency>
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-maven-plugin</artifactId>
      <version>${mybatis_generator_version}</version>
</dependency>
<build>
    <finalName>UserServer</finalName>
    <plugins>
      <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.2</version>
        <configuration>
          <verbose>true</verbose>
          <overwrite>true</overwrite>
        </configuration>
      </plugin>
    </plugins>
 </build>    

三、generator.xml配置文件

這個配置文件主要配置數據庫的連接,生成文件所存放位置,生成java類名,對應那個數據庫表。

  1. classPathEntry標籤需要配置你本地mysql驅動所在jar包路徑。
  2. jdbcConnection標籤需要配置服務器地址和數據庫登錄賬戶和密碼。
  3. javaModelGenerator標籤需要配置生成model存放包路徑,model即對應數據庫字段生成的java bean。
  4. sqlMapGenerator標籤需要配置mapperxml文件存放路徑。
  5. javaClientGenerator標籤需要配置dao接口存放包路徑。
  6. 最後table標籤的tableName屬性填對應數據庫表名,domainObjectName屬性填生成model的類名。
<?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="C:\java\mavaen\repository\mysql\mysql-connector-java\5.1.36\mysql-connector-java-5.1.36.jar"/>

    <context id="DB2Tables"  targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自動生成的註釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--數據庫鏈接URL,用戶名、密碼 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.1.138:3306/testDB?characterEncoding=utf-8" userId="root" password="12345">

        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>


        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.xyh.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>


        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>


        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.xyh.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成哪些表-->
                <table tableName="test"
               domainObjectName="Test"
               enableCountByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false"
               enableSelectByExample="false"
               selectByExampleQueryId="false"></table>



    </context>
</generatorConfiguration>

四、運行快速生成

兩種生成方式:

1、配置使用maven執行

在運行配置中添加maven,maven中配置Working directory:C:/idea_workspace/UserServer
配置command line:mybatis-generator:generate -e

執行該maven插件即可生成xml、model、mapper在相應設置的目錄

2、main方法執行

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws Exception{
        List<String> warnings = new ArrayList<>();
        boolean overwrite = true;
        File configFile = new File(ClassLoader.getSystemResource("mybatis_generation.xml").toURI());
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }
}

生成成功後,會發現相應文件夾多了我們厭倦寫的文件!後面需要使用對應的sql操作,只需在生成的接口中使用註解寫sql就行了,是不是很方便?

五、生成產品

1、TestMapper(接口)

package com.xyh.mapper;

import com.xyh.model.Test;

public interface TestMapper {
    int deleteByPrimaryKey(String id);

    int insert(Test record);

    int insertSelective(Test record);

    Test selectByPrimaryKey(String id);

    int updateByPrimaryKeySelective(Test record);

    int updateByPrimaryKey(Test record);
}

2、Test(model)

package com.xyh.model;

public class Test {
    private String id;

    private String name;

    private Byte age;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id == null ? null : id.trim();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public Byte getAge() {
        return age;
    }

    public void setAge(Byte age) {
        this.age = age;
    }
}

3、TestMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xyh.mapper.TestMapper" >
  <resultMap id="BaseResultMap" type="com.xyh.model.Test" >
    <id column="id" property="id" jdbcType="VARCHAR" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="age" property="age" jdbcType="TINYINT" />
  </resultMap>
  <sql id="Base_Column_List" >
    id, name, age
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select 
    <include refid="Base_Column_List" />
    from test
    where id = #{id,jdbcType=VARCHAR}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
    delete from test
    where id = #{id,jdbcType=VARCHAR}
  </delete>
  <insert id="insert" parameterType="com.xyh.model.Test" >
    insert into test (id, name, age
      )
    values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=TINYINT}
      )
  </insert>
  <insert id="insertSelective" parameterType="com.xyh.model.Test" >
    insert into test
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        id,
      </if>
      <if test="name != null" >
        name,
      </if>
      <if test="age != null" >
        age,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="id != null" >
        #{id,jdbcType=VARCHAR},
      </if>
      <if test="name != null" >
        #{name,jdbcType=VARCHAR},
      </if>
      <if test="age != null" >
        #{age,jdbcType=TINYINT},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.xyh.model.Test" >
    update test
    <set >
      <if test="name != null" >
        name = #{name,jdbcType=VARCHAR},
      </if>
      <if test="age != null" >
        age = #{age,jdbcType=TINYINT},
      </if>
    </set>
    where id = #{id,jdbcType=VARCHAR}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.xyh.model.Test" >
    update test
    set name = #{name,jdbcType=VARCHAR},
      age = #{age,jdbcType=TINYINT}
    where id = #{id,jdbcType=VARCHAR}
  </update>
</mapper>

看到了吧,什麼東西都幫我們生成了,一些基本的操作完全不需要我們自己寫了,若要加入什麼sql操作只要用註解在接口中加就行了,例:

package com.xyh.mapper;

import com.xyh.model.Test;
import org.apache.ibatis.annotations.Delete;

public interface TestMapper {
    int deleteByPrimaryKey(String id);

    int insert(Test record);

    int insertSelective(Test record);

    Test selectByPrimaryKey(String id);

    int updateByPrimaryKeySelective(Test record);

    int updateByPrimaryKey(Test record);

    @Delete("delete from test where name = #name")
    int deleteByName(String name);
}

六、spring配置sqlSessionFactory

注入數據源依賴和mapperLocations依賴,mapperLocations爲生成的mapper.xml文件所在目錄,亦可把所有xml文件import到mybatis_config.xml,然後把該配置文件路徑注入到configLocation。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" ></property>
    <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
    <!--<property name="configLocation" value="classpath:mybatis_config.xml"/>-->
</bean>

七、spring配置mapper掃描器

三種方式:

<!-- ps:當數據源使用讀配置文件值方式設置properties時,會報錯。 -->
<!-- 使用SqlSessionTemplate方式 -->
<bean id="simpleSqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory"/>
    <constructor-arg index="1" value="SIMPLE"/>
</bean>
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.xyh.mapper"/>
    <property name="sqlSessionTemplateBeanName" value="simpleSqlSession"/>
</bean>
<!-- 使用SqlSessionFactory方式 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.xyh.mapper"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
<!-- 單數據源方式 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.xyh.mapper"/>
    <property name="sqlSessionTemplateBeanName" value="simpleSqlSession"/>
</bean>

結尾:好了,到這裏基本完成了,祝大家使用愉快!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章