Maven下SSM项目整合笔记02:mybatis配置文件以及逆向工程

配置文件

  • mybatis的全局配置文件
    可以使用官方文档,搜索mybatis-》帮助文档-》http://www.mybatis.org/mybatis-3/
    在getting start扎到配置文件的文件头:
    在configuration xml里面找到setting:里面能够找到对应的自动设置:
    以下是mybatis的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value=""/>
    </settings>
    <!-- 别名 -->
    <typeAliases>
        <package name="com.zr.crud.bean"/>
    </typeAliases>

</configuration>

创建数据表:

创建表后导出的表结构如下(这里添加外键是为了保证数据的安全性,逻辑上可以不要):

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for tbl_dept
-- ----------------------------
DROP TABLE IF EXISTS `tbl_dept`;
CREATE TABLE `tbl_dept` (
  `dept_id` int(11) NOT NULL AUTO_INCREMENT,
  `dept_name` varchar(255) NOT NULL,
  PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for tbl_emp
-- ----------------------------
DROP TABLE IF EXISTS `tbl_emp`;
CREATE TABLE `tbl_emp` (
  `emp_id` int(11) NOT NULL AUTO_INCREMENT,
  `emp_name` varchar(255) NOT NULL,
  `gender` char(1) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `d_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`emd_id`),
  KEY `fk_emp_dept` (`d_id`),
  CONSTRAINT `fk_emp_dept` FOREIGN KEY (`d_id`) REFERENCES `tbl_dept` (`dept_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

使用mybatis提供的逆向工程

使用逆向工程创建需要的bean以及mapper:
点击quick start按照步骤使用:
- 1.首先引入generator的相关jar包:pom.xml里面添加:

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

这里因为导入pom文件仍然无法读取,所以采用吧jar包导入本地的方法,使用maven把文件导入本地仓库:
-Dfile为下载文件的位置,这里指定版本号,将下载的jar包导入本地的仓库,仓库位置可以看maven目录下的conf文件夹下的settings.xml:
使用以下命令导入:

mvn install:install-file -Dfile=d:\BaseCodes\mybatis-generator-core-1.3.5.jar -DgroupId=com.google.code -DartifactId=mybatis-generator-core -Dversion=1.3.5 -Dpackaging=jar

之后在pom连添加:

        <dependency>
            <groupId>com.google.code</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
  • 2.使用官方模板创建配置文件(mgb.xml):
<?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="DB2Tables" targetRuntime="MyBatis3">
        <!-- 配置数据库的连接信息 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://localhost:3306/ssm_crud" userId="root" password="mysqladmin">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!-- 指定javabean生成的位置 -->
        <javaModelGenerator targetPackage="com.zr.crud.bean"
            targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- 指定sql映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="mapper"
            targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- 指定dao接口生成的位置,mapper接口 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.zr.crud.dao" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!-- 指定每个表的生成策略 -->
        <!-- tableName表名 -->
        <!-- domainObjectName生成类的名字 -->
        <table tableName="tbl_emp" domainObjectName="Employee"></table>
        <table tableName="tbl_dept" domainObjectName="Department"></table>
    </context>
</generatorConfiguration>
package com.zr.crud.test;

import java.io.*;
import java.util.*;

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 MBGTest {
    public static void main(String[] args) throws Exception {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        File configFile = new File( System.getProperty("user.dir")+"\\mgb.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);
    }
}

运行后dao类报错:
The import org.apache.ibatis cannot be resolved
这个时候需要导入对应的包:
在pom.xml中添加:

<dependency>
    <groupId>org.apache.ibatis</groupId>
    <artifactId>ibatis-core</artifactId>
    <version>3.0</version>
</dependency>

至此,生成完成。

修改相关配置文件

此时,在生成代码的基础上开始修改:
- 因为我们在查询时需要多表关联查询,所以在生成的com.zr.crud.bean.Employee类中添加Department字段:

    //自动生成的基础上添加的成员department用于方便关联查询
    private Department department;

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }
  • 在com.zr.crud.dao.EmployeeMapper类中添加方法关联查询:
    //新增加的方法:
    //1.selectByExampleWithDept
    //2.selectByPrimaryKeyWithDept
    List<Employee> selectByExampleWithDept(EmployeeExample example);

    Employee selectByPrimaryKeyWithDept(Integer emdId);
  • 在Mapper配置文件EmployeeMapper.xml中添加对应sql语句:
    – 返回集合:关联查询返回多个表的数据,使用association来关联:
<resultMap type="com.zr.crud.bean.Employee" id="WithDeptResultMap">
        <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为类中的变量名 column为 javaType为数据类型 -->
        <association property="department" javaType="com.zr.crud.bean.Department">
            <!-- column为返回的列名 -->
            <id column="dept_id" property="deptId"/>
            <result column="dept_name" property="deptName" jdbcType="VARCHAR"/>
        </association>
    </resultMap>

– 新建需要查询的列:

    <sql id="WithDept_Column_List">
        e.emp_id, e.emp_name, e.gender, e.email, e.d_id, d.dept_id,
        d.dept_name
    </sql>

– 使用右连接关联查询:

    <select id="selectByExampleWithDept" resultMap="WithDeptResultMap">
        select
        <if test="distinct">
            distinct
        </if>
        <include refid="WithDept_Column_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" resultMap="WithDeptResultMap">
        select
        <include refid="WithDept_Column_List" />
        FROM tbl_emp e LEFT JOIN tbl_dept d on e.d_id=d.dept_id
        where emp_id = #{empId,jdbcType=INTEGER}        
    </select>

测试mapper

使用Spring的单元测试,需要在pom.xml中添加对应的依赖关系:

        <!-- 导入Spring的测试模块 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

编写测试类查看数据:

package com.zr.crud.test;

import java.util.List;

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

import com.zr.crud.bean.Department;
import com.zr.crud.bean.DepartmentExample;
import com.zr.crud.dao.DepartmentMapper;

/**
 * 测试dao层的工作
 * Spring的项目推荐使用Spring的单元测试,可以自动注入我们需要的组件
 * 1.在pom.xml中导入SpringTest的依赖
 * 2.使用注解@ContextConfiguration指定Spring配置文件的位置
 * 3.直接autowired要使用的组件即可
 * @author asus
 *
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class MapperTest {

    @Autowired
    DepartmentMapper departmentMapper;
    /**
     * 测试DepartmentMapper
     */
    @Test
    public void testCRUD_Dept() {
        List<Department> d_list = departmentMapper.selectByExample(new DepartmentExample());
        for (Department department : d_list) {
            System.out.println(department.getDeptId()+" : " + department.getDeptName());
        }
    }
}

控制台输出:
这里写图片描述

可以看到数据成功显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值