基于maven+ssm的增删改查之使用mybatis逆向工程生成相关文件

接上一节。

1、mybatis逆向工程相关文件配置

generatorConfig.xml(8条)

(1)使用classPathEntry指定Mysql驱动的位置。

(2)去掉生成文件中的注释

(3)数据库连接配置

(4)类型解析

(5)javabean生成的位置、mapper接口的位置、mapper.xml文件的位置

(6)指定数据库中的表以及映射成的javabean的名称

<?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="F:\hellomaven\repository\mysql\mysql-connector-java\5.1.41\mysql-connector-java-5.1.41.jar" />

    <context id="testTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/ssm_curd" userId="root"
            password="123456">
        </jdbcConnection>
        <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
            connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
            userId="yycg"
            password="yycg">
        </jdbcConnection> -->

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

        <!-- targetProject:生成PO类的位置 -->
        <javaModelGenerator targetPackage="com.gong.curd.bean"
            targetProject=".\src\main\java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="mapper"
            targetProject=".\src\main\resources">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.gong.curd.dao"
            targetProject=".\src\main\java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定数据库表 -->
        <table tableName="tbl_emp" domainObjectName="Employee"></table>
        <table tableName="tbl_dept" domainObjectName="Department"></table>

    </context>
</generatorConfiguration>

2、相关数据库表

现有ssm_curd数据库,连接数据库的用户名为root,密码为123456,数据库中有tbl_emp何tbl_dept数据表。相关表结构如下:

tbl_emp中d_id以外键关联tbl_dept中的dept_id字段:

3、生成相关文件

接下来我们在conm.gong.curd.text新建一个GeneratorSqlmap.java用于生成相关文件

GeneratorSqlmap.java

package com.gong.curd.test;

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

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;

public class GeneratorSqlmap {

    public void generator() throws Exception{

        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指定 逆向工程配置文件
        File configFile = new File("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);

    }
    public static void main(String[] args) throws Exception {
        try {
            GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

可当模板,只需要指定逆向工程配置文件路径即可。

运行之后:会在指定目录下生成相关文件

里面的一些方法我们可以直接用,另外的需求需要我们自己进行更改。

4、修改相关文件

(1) 修改Employee.java

  • 引用Department:向里面加入private Departmen dept;
  • 向里面加入有参构造器和无参构造器用于测试:
  •     public Employee() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public Employee(Integer empId, String empName, String gender, String email, Integer dId) {
            super();
            this.empId = empId;
            this.empName = empName;
            this.gender = gender;
            this.email = email;
            this.dId = dId;
        }

(2)修改Department.java(向里面加入有参构造器和无参构造器)

    public Department() {
        super();
    }

    public Department(Integer deptId, String deptName) {
        super();
        this.deptId = deptId;
        this.deptName = deptName;
    }

(3)修改EmployeMapper.java(由于我们关联了Department,因此原来的查询不能满足实际的需求,我们要重新定义两个方法,一个是根据条件查询出员工和部门,一个是根据主键查询员工和部门)

    List<Employee> selectByExampleWithDept(EmployeeExample example);

    Employee selectByPrimaryKeyWithDept(Integer empId);

(4)修改EmployeeMapper.xml

<!--定义自己的resultMap实现关联-->
  <resultMap id="WithDeptResultMap" type="com.gong.curd.bean.Employee">
    <id column="emp_id" jdbcType="INTEGER" property="empId" />
    <result column="emp_name" jdbcType="VARCHAR" property="empName" />
    <result column="gender" jdbcType="CHAR" property="gender" />
    <result column="email" jdbcType="VARCHAR" property="email" />
    <result column="d_id" jdbcType="INTEGER" property="dId" />
    <association property="dept" javaType="com.gong.curd.bean.Department">
        <id column="dept_id" property="deptId"/>
        <result column="dept_name" property="deptName"/>
    </association>
  </resultMap>
<!--定义自己共用的sql-->
  <sql id="With_Dept_Coulumn_List">
      e.emp_id, e.emp_name, e.gender, e.email, e.d_id,d.dept_id,d.dept_name
  </sql>
<!--定义根据条件查询员工和部门信息,使用连接查询-->
  <select id="selectByExampleWithDept" parameterType="com.gong.curd.bean.EmployeeExample"
  resultMap="WithDeptResultMap">
    select
    <if test="distinct">
      distinct
    </if>
    <include refid="With_Dept_Coulumn_List" />
    from tbl_emp e
    left join tbl_dept d on e.`d_id`=d.`dept_id`
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>
<!--定义根据主键查询员工和部门信息-->
  <select id="selectByPrimaryKeyWithDept" parameterType="java.lang.Integer"
  resultMap="WithDeptResultMap">
    select
    <include refid="With_Dept_Coulumn_List" />
    from tbl_emp
    left join tbl_dept d on e.`d_id`=d.`dept_id`
    where e.emp_id = #{empId,jdbcType=INTEGER}
  </select>

5、在com.gong.curd.test下建立DepartmentMapperTest.java和EmployeeMapperTest.java测试相关sql是否可用:

DepartmentMapperTest.java

测试加入两个部门:(注意我们将测试环境转换成spring测试环境,使用Runwith注解标识,同时使用ContextConfiguration指定spring配置文件)

package com.gong.curd.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.gong.curd.bean.Department;
import com.gong.curd.dao.DepartmentMapper;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:applicationContext.xml"})
public class DepartmentMapperTest {

    @Autowired
    public DepartmentMapper departmentMapper;

    @Test
    public void testCURD() {

        departmentMapper.insertSelective(new Department(1,"开发部"));
        departmentMapper.insertSelective(new Department(2,"测试部"));
    }

}

运行之后:

EmployeeMapperTest.java(同样的转换成spring测试环境)

package com.gong.curd.test;

import java.util.UUID;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.gong.curd.bean.Employee;
import com.gong.curd.dao.EmployeeMapper;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class EmployeeMapperTest {

    @Autowired
    EmployeeMapper employeeMapper;

    @Autowired
    SqlSession sqlSession;

    @Test
    public void testCURD() {
        employeeMapper.insertSelective(new Employee(1,"tom","M","[email protected]",1));
        for(int i=2;i<50;i++) {
            String uid = UUID.randomUUID().toString().substring(0, 5) + i;
            employeeMapper.insertSelective(new Employee(i,uid,"M",uid+"@qq.com",1));
        }
        System.out.println("批量完成");
    }

}

运行之后:我们批量插入了49条数据,当然还可以继续测试其它的sql,这里就不继续测试了:

至此,逆向工程就完成了,下一节进行ssm框架的测试。

原文地址:https://www.cnblogs.com/xiximayou/p/12236217.html

时间: 2024-11-09 16:27:53

基于maven+ssm的增删改查之使用mybatis逆向工程生成相关文件的相关文章

基于maven+ssm的增删改查之批量删除

首先将之前的删除单个的eq(1)改为eq(2),因为我们新增了一个多选项. 然后是在delete.js中加入: //点击全部删除,就批量删除 $("#emp_delete_all_btn").click(function(){ var empNames = ""; var del_idstr = ""; //遍历选中的,获取其姓名和id $.each($(".check_item:checked"),function(){ /

基于maven+ssm的增删改查之spring+springmvc+mybatis环境搭建

接上一节. 1.首先建立如下目录 说明: com.gong.curd.bean:用于存放普通javabean. com.gong.curd.dao:用于存放mapper接口 com.gong.curd.controller:用于存放控制器 com.gong.curd.service:用于存放业务层接口 com.gong.curd.serviceImpl:用于存放service接口的实现类 com.gong.curd.utils:用于存放通用的工具类 com.gong.curd.test:用于测试

基于maven+ssm的增删改查之maven环境的搭建

1.Maven插件的设置: Window->Preferences->Maven (1)installations : 指定Maven核心程序的位置.默认是插件自带的Maven程序,可以改为我们自己解压的那个. 点击add: 选择自己解压的maven的位置,点击finish.选择自己刚刚加入的: 点击apply--Apply and Close. (2)user settings : 指定Maven核心程序中 conf/settings.xml 文件的位置,进而获取本地仓库的位置. 选择我们自

基于maven+ssm的增删改查之测试相关ssm环境是否成功

接上一节. 1.首先我们在com.gong.curd.controller中新建EmployeeController.java(我们使用分页技术) package com.gong.curd.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import

基于maven+ssm的增删改查之前后端之间使用json进行交互(显示员工信息)

接上一节. 首先是在EmployeeController.java中,新建一个返回json数据的方法,注销掉原有的getEmps方法. EmployeeController.java package com.gong.curd.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.

基于maven+ssm的增删改查之关于ajax验证用户是否存在存在的问题

接上一节. 虽然基本完成了验证功能,但是,仍然存在一些问题,比如: 虽然用户名可用,但是这是不合法的,这种情况就不行. 我们需要修改两处,一是EmployeeController.java //检查用户名是否可用 @ResponseBody @RequestMapping("/checkuser") public Msg checkUser(String empName) { String regx = "(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\

基于maven+ssm的增删改查之修改员工信息

具体流程:点击编辑按钮,弹出编辑模态框,同时会发送ajax请求获取员工和部门信息并显示在相关位置.在模态框中修改相关信息,发送ajax请求进行保存. 获取部门信息之前已经有了,现在是获取员工信息. EmployeeController.java //查询员工信息 @ResponseBody @RequestMapping(value="/emp/{id}",method=RequestMethod.GET) public Msg getEmp(@PathVariable("i

MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多

一.用到的实体类如下: Student.java [html] view plaincopy package com.company.entity; import java.io.Serializable; import java.util.Date; public class Student implements Serializable{ private static final long serialVersionUID = 1L; private int id; private Stri

bootstrap+Ajax+SSM(maven搭建)实现增删改查

https://www.jianshu.com/p/d76316b48e3e 源码: https://github.com/Ching-Lee/crud 功能点: 分页 数据校验 ajax Rest风格的URI:使用HTTP协议请求方式的动词,来表示对资源的操作(GET(查询),POST(新增),PUT(修改),DELETE(删除)) 技术点 基础框架-ssm 数据库mysql 前端框架-bootstrap 项目依赖 -Maven 分页 -pagehelper 逆向工程-Mybatis Gene