六步学会mybatis——----第六章:逆向工程

逆向工程操作步骤

1.jar包

<dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>

2.创建生成代码的配置文件

<?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 id="testTables" targetRuntime="MyBatis3">
		<commentGenerator>
			<!-- 是否去除自动生成的注释 true:是 : false:否 -->
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		<!--需要修改1-->
		<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
						connectionURL="jdbc:mysql://localhost:3306/mybatis03"
						userId="root"
						password="root">
		</jdbcConnection>

		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
			NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!--需要修改2-->
		<!-- targetProject:生成实体类的位置 -->
		<javaModelGenerator targetPackage="com.wh.pojo"
			targetProject=".\src\main\java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>

		<!--需要修改3-->
        <!-- targetProject:mapper映射文件生成的位置 -->
		<sqlMapGenerator targetPackage="com.wh.mapper"
			targetProject=".\src\main\java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>

		<!--需要修改4-->
		<!-- targetPackage:mapper接口生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.wh.mapper"
			targetProject=".\src\main\java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>

		<!--需要修改5-->
		<!-- 指定数据库表 -->
		<table tableName="depart"></table>
		<table tableName="employee"></table>
		<table tableName="person"></table>
		<table tableName="student"></table>
		<table tableName="student_teacher"></table>
		<table tableName="teacher"></table>
	</context>
</generatorConfiguration>

一共需要修改五部分,都在注释里做标记了

3. 编写生成代码的类

import org.junit.Test;
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 GeneratorTest {
    @Test
    public void testGenerator() throws Exception {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        // 需要修改,指定自动生成的配置文件位置
        File configFile = new File("D:\\develop\\ideaworkspace\\parent_ssm\\mybatis08_autoGenerate\\generatorConfig.xml");
        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);
    }
}

执行结果
在这里插入图片描述

随便找一个一个看看

package com.wh.mapper;

import com.wh.pojo.Person;
import com.wh.pojo.PersonExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;

public interface PersonMapper {
    long countByExample(PersonExample example);

    int deleteByExample(PersonExample example);

    int deleteByPrimaryKey(Integer pId);

    int insert(Person record);

    int insertSelective(Person record);

    List<Person> selectByExample(PersonExample example);

    Person selectByPrimaryKey(Integer pId);

    int updateByExampleSelective(@Param("record") Person record, @Param("example") PersonExample example);

    int updateByExample(@Param("record") Person record, @Param("example") PersonExample example);

    int updateByPrimaryKeySelective(Person record);

    int updateByPrimaryKey(Person record);
}
<?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.wh.mapper.PersonMapper">
  <resultMap id="BaseResultMap" type="com.wh.pojo.Person">
    <id column="p_id" jdbcType="INTEGER" property="pId" />
    <result column="p_name" jdbcType="VARCHAR" property="pName" />
    <result column="p_age" jdbcType="INTEGER" property="pAge" />
    <result column="p_hobby" jdbcType="VARCHAR" property="pHobby" />
  </resultMap>
  <sql id="Example_Where_Clause">
    <where>
      <foreach collection="oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Update_By_Example_Where_Clause">
    <where>
      <foreach collection="example.oredCriteria" item="criteria" separator="or">
        <if test="criteria.valid">
          <trim prefix="(" prefixOverrides="and" suffix=")">
            <foreach collection="criteria.criteria" item="criterion">
              <choose>
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>
  <sql id="Base_Column_List">
    p_id, p_name, p_age, p_hobby
  </sql>
  <select id="selectByExample" parameterType="com.wh.pojo.PersonExample" resultMap="BaseResultMap">
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="Base_Column_List" />
    from person
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from person
    where p_id = #{pId,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from person
    where p_id = #{pId,jdbcType=INTEGER}
  </delete>
  <delete id="deleteByExample" parameterType="com.wh.pojo.PersonExample">
    delete from person
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
  </delete>
  <insert id="insert" parameterType="com.wh.pojo.Person">
    insert into person (p_id, p_name, p_age, 
      p_hobby)
    values (#{pId,jdbcType=INTEGER}, #{pName,jdbcType=VARCHAR}, #{pAge,jdbcType=INTEGER}, 
      #{pHobby,jdbcType=VARCHAR})
  </insert>
  <insert id="insertSelective" parameterType="com.wh.pojo.Person">
    insert into person
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="pId != null">
        p_id,
      </if>
      <if test="pName != null">
        p_name,
      </if>
      <if test="pAge != null">
        p_age,
      </if>
      <if test="pHobby != null">
        p_hobby,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="pId != null">
        #{pId,jdbcType=INTEGER},
      </if>
      <if test="pName != null">
        #{pName,jdbcType=VARCHAR},
      </if>
      <if test="pAge != null">
        #{pAge,jdbcType=INTEGER},
      </if>
      <if test="pHobby != null">
        #{pHobby,jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>
  <select id="countByExample" parameterType="com.wh.pojo.PersonExample" resultType="java.lang.Long">
    select count(*) from person
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
  </select>
  <update id="updateByExampleSelective" parameterType="map">
    update person
    <set>
      <if test="record.pId != null">
        p_id = #{record.pId,jdbcType=INTEGER},
      </if>
      <if test="record.pName != null">
        p_name = #{record.pName,jdbcType=VARCHAR},
      </if>
      <if test="record.pAge != null">
        p_age = #{record.pAge,jdbcType=INTEGER},
      </if>
      <if test="record.pHobby != null">
        p_hobby = #{record.pHobby,jdbcType=VARCHAR},
      </if>
    </set>
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByExample" parameterType="map">
    update person
    set p_id = #{record.pId,jdbcType=INTEGER},
      p_name = #{record.pName,jdbcType=VARCHAR},
      p_age = #{record.pAge,jdbcType=INTEGER},
      p_hobby = #{record.pHobby,jdbcType=VARCHAR}
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>
  <update id="updateByPrimaryKeySelective" parameterType="com.wh.pojo.Person">
    update person
    <set>
      <if test="pName != null">
        p_name = #{pName,jdbcType=VARCHAR},
      </if>
      <if test="pAge != null">
        p_age = #{pAge,jdbcType=INTEGER},
      </if>
      <if test="pHobby != null">
        p_hobby = #{pHobby,jdbcType=VARCHAR},
      </if>
    </set>
    where p_id = #{pId,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.wh.pojo.Person">
    update person
    set p_name = #{pName,jdbcType=VARCHAR},
      p_age = #{pAge,jdbcType=INTEGER},
      p_hobby = #{pHobby,jdbcType=VARCHAR}
    where p_id = #{pId,jdbcType=INTEGER}
  </update>
</mapper>

单表查询能用到的crud,几乎都被生成了

逆向工程的应用

生成的代码crud都是可以直接使用的
逐个做出解释
仔细看方法后缀
Example就是sql里的where条件。
会在后面拼接where条件
Selective就是动态sql里的动态标签。
会动态拼接sql

public interface PersonMapper {
	// 条件统计出总数量
    long countByExample(PersonExample example);
	// 根据条件删除
    int deleteByExample(PersonExample example);
	// 根据主键id删除
    int deleteByPrimaryKey(Integer pId);
	// 普通的一个添加
    int insert(Person record);
	// 根据是否有条件动态拼接sql添加
    int insertSelective(Person record);
	// 条件查询
    List<Person> selectByExample(PersonExample example);
	// 通过主键查询一个
    Person selectByPrimaryKey(Integer pId);
	// 根据条件,动态拼接sql更新
    int updateByExampleSelective(@Param("record") Person record, @Param("example") PersonExample example);
	// 根据条件更新
    int updateByExample(@Param("record") Person record, @Param("example") PersonExample example);
	// 动态拼接sql更新
    int updateByPrimaryKeySelective(Person record);
	// 通过主键更新
    int updateByPrimaryKey(Person record);
}

测试

import com.wh.mapper.PersonMapper;
import com.wh.pojo.Person;
import com.wh.pojo.PersonExample;
import com.wh.utils.SessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class PersonMapperTest {
    // Example = sql里的where
    // Selective = 动态sql的<if>

    @Test
    public void testinsert(){
        SqlSession session = SessionUtils.getSqlSession();
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        Person person = new Person();
        person.setpName("小芳");
        person.setpAge(18);
        person.setpHobby("撩妹");
        int insert = personMapper.insert(person);
        session.commit();
        session.close();
        System.out.println(insert);
    }

    @Test
    public void testdeleteByPrimaryKey(){
        SqlSession session = SessionUtils.getSqlSession();
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        int delete = personMapper.deleteByPrimaryKey(7);
        session.commit();
        session.close();
        System.out.println(delete);
    }

    @Test
    public void testupdateByPrimaryKey(){
        SqlSession session = SessionUtils.getSqlSession();
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        Person person = new Person();
        person.setpId(5);
        person.setpName("屌爆了");
        person.setpHobby("打牌");
        person.setpAge(30);
        int update = personMapper.updateByPrimaryKey(person);
        session.commit();
        session.close();
        System.out.println(update);
    }

    @Test
    public void testupdateByExampleSelective(){
        SqlSession session = SessionUtils.getSqlSession();
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        PersonExample personExample = new PersonExample();
        PersonExample.Criteria criteria = personExample.createCriteria();
        criteria.andPAgeGreaterThan(30);
        Person person = new Person();
        person.setpAge(25);
        person.setpName("你好");
        personMapper.updateByExampleSelective(person,personExample);
        session.commit();
        session.close();
    }


    @Test
    public void testselectByPrimaryKey(){
        SqlSession session = SessionUtils.getSqlSession();
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        Person person = personMapper.selectByPrimaryKey(6);
        session.close();
        System.out.println(person);
    }

    @Test
    public void testselectByExample(){
        SqlSession session = SessionUtils.getSqlSession();
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        // Example就是生成sql语句里的where条件
        PersonExample personExample = new PersonExample();
        PersonExample.Criteria criteria = personExample.createCriteria();
        criteria.andPAgeGreaterThan(30).andPNameEqualTo("屌爆了");
        List<Person> personList = personMapper.selectByExample(personExample);
        session.close();
        for (Person person : personList) {
            System.out.println(person);
        }
    }

    @Test
    public void testinsertSelective(){
        SqlSession session = SessionUtils.getSqlSession();
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        Person person = new Person();
        person.setpName("郭富城");
        int i = personMapper.insertSelective(person);
        session.commit();
        session.close();
        System.out.println(i);
    }

    @Test
    public void testcountByExample(){
        SqlSession session = SessionUtils.getSqlSession();
        PersonMapper personMapper = session.getMapper(PersonMapper.class);
        PersonExample personExample = new PersonExample();
        PersonExample.Criteria criteria = personExample.createCriteria();
        criteria.andPAgeGreaterThan(30);
        long count = personMapper.countByExample(personExample);
        System.out.println(count);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值