This documentation is not maintained. Please refer to doc.castsoftware.com/technologies to find the latest updates.

Summary: This document provides basic information about the extension providing MyBatis (for Java/.NET) support.

Extension ID

com.castsoftware.ibatis

What's new ?

Please see MyBatis - 1.2 - Release Notes for more information.

Description

This extension provides support for:

  • MyBatis for Java using:
    • Mapper XML file containing SQL queries
    • MyBatis Annotations for JAVA

    • MyBatis-Spring integration

  • MyBatis for .NET using:
    • Mapper XML file containing SQL queries only
  • TkMyBatis using:
    • Methods provided by mapper class

In what situation should you install this extension?

This extension should be installed when analyzing a Java/.NET project that uses a MyBatis framework or TkMyBatis framework, and you want to view a transaction consisting of MyBatis objects with their corresponding links. Links to corresponding database tables can also be resolved, provided that the SQL database has been extracted and DDL has been created.

Supported MyBatis versions

The following table displays the supported versions matrix:

Language SupportedVersionSupport
Java3.4.0

Mapper XML files

MyBatis Annotation for Java

MyBatis-Spring Integration

.NET4.5.2Mapper XML file

Supported TkMyBatis Libraries

The following table displays the supported versions matrix:

mapper-spring-boot-starter2.1.5

Supported TkMyBatis Operations

Operation

Methods 

Supported
Insert 
  • insert

(tick)

  • insertSelective 
 (tick)
Update   
  • updateByExample

    (tick)    

  • updateByExampleSelective
(tick)
  • updateByPrimarykey
(tick)
  • updateByPrimaryKeySelective
(tick)
Select       
  • select

(tick)

  • selectAll
(tick)
  • selectByExample
(tick)
  •  selectByExampleAndRowBounds
(tick)
  • selectByPrimaryKey
(tick)
  •  selectByRowBounds
(tick)
  •  selectCount
(tick)
  •  selectCountByExample
(tick)
  • selectOneByExample
       (tick)
  • selectOne
       (tick)
Delete

  • delete

 (tick)

  • deleteByExample
 (tick)
  • deleteByPrimaryKey
 (tick)

AIP Core compatibility 

This extension is compatible with:

CAST AIP release

Supported

8.3.x(tick)

Supported DBMS servers

This extension is compatible with the following DBMS servers:

DBMSSupported
CSS / PostgreSQL(tick)

Prerequisites

(tick)An installation of any compatible release of AIP Core (see table above).
(tick)SQL database should already be extracted and DDL created if it requires analysis.

Dependencies with other extensions 

When using the CAST Extension Downloader to download the MyBatis extension and the Manage Extensions interface in CAST Server Manager to install the extension:

  • the CAST AIP Internal extension will be automatically downloaded and installed for you. You do not need to do anything.
  • the SQL Analyzer extension - is not configured as a "dependent" extension and will therefore not be automatically downloaded and installed for you. However:
    • When using CAST AIP ≥ 8.3.x, the SQL Analyzer extension is installed by default, therefore you do not need to do anything.
    • When using CAST AIP ≤ 8.2.x, the SQL Analyzer extension is not installed by default, therefore you will need to download and install it manually if you want to handle the SQL source code in your MyBatis application.

Download and installation instructions

The extension will be automatically downloaded and installed in CAST Console. You can manage the extension using the Application - Extensions interface:

Source code discovery

The MyBatis extension does not contain any discoverers or extractors, therefore, no "MyBatis" projects will be discovered. However, since the code delivered is Java/.NET and SQL, when using AIP Console, all source should be detected automatically. You should therefore ensure that your code is organised as follows before delivery:

Java

  • one folder containing all the Java related code along with MyBatis.
  • one folder containing the SQL DDL extraction

.NET

  • one folder containing all the .NET related code and the XML related files
  • one folder containing the SQL DDL extraction

Delivery and analysis configuration

Using AIP Console

When using AIP Console, after delivery you should end up with the following technologies:

  • JEE or .NET for the main source code
  • Universal for the SQL source code

All dependencies will be automatically configured (example for JEE):

Note that:

Using CAST Management Studio/Delivery Manager Tool

Click here to expand...

Using the CAST Delivery Manager Tool:

  • Create a new Version
  • Create a new Package using the Files on your file system option:

Click to enlarge


  • Define a name for the package and the root folder of your Application source code - this root folder should contain the folder for the Java/XML files or .NET/XML files and the folder for the SQL DDL:

Click to enlarge

Note that:

  • Run the Package action: the CAST Delivery Manager Tool will find Eclipse/Maven Java or .NET related "projects" associated with the MyBatis application source code - this is the expected behavior. However, if your Java/.NET related source code is part of a larger application, then other projects may also be found during the package action:

  • Finally, Deliver the version.

Analyzing

Using the CAST Management Studio:

  • Accept and deploy the Version in the CAST Management Studio. JEE / .NET Analysis Units will be created automatically - this is the expected behavior. However, if your MyBatis related source code is part of a larger application, then other Analysis Units may be created automatically:

Example for JEE

  • In the Current Version tab, you now need to add manually one Analysis Units for the  SQL source code:
    • Add a Universal Analyzer Analysis Unit for your SQL source code, selecting the Add new Universal Analysis Unit option and then:
      • ticking the SQL option
      • including the folder containing the SQL DDL:

 

  • Now move into the Dependencies tab within the Application editor, and create a dependency between the JEE Analysis Unit or .NET Analysis Unit as Source and the Universal Analysis Unit as Target:

Example for JEE

What results can you expect?

Once the analysis/snapshot generation has completed, you can view the results in the normal manner. Below are the transactions obtained after analysis as shown in CAST Enlighten:

For Java

Mapper XML files

For Mapper XML files - this extension will detect SQL queries and create objects and links. Below is a Mapper XML file with its result in Enlighten:

 

Support of "Include" tag

This extension provide support of "Include" tag used in Mapper XML file. Below is a sample of "Include" tag with its result in Enlighten:

Support of Dynamic SQL Tags

This extension provide support of following Dynamic SQL tag used in Mapper XML file. Below is list of tags support with sample source code and result in Enlighten:

ElementDescription
isEmptyChecks to see if the value of a Collection, String property is null or empty.
isNotEmptyChecks to see if the value of a Collection, String property is not null and not empty.
isNotNullChecks if a property is not null.
isNullChecks if a property is null.
isPropertyAvailableChecks if a property is available.
isNotPropertyAvailableChecks if a property is unavailable.
isParameterPresentChecks to see if the parameter object is present (not null).
isNotParameterPresentChecks to see if the parameter object is not present (null).
isEqualChecks the equality of a property and a value, or another property.
isNotEqualChecks the inequality of a property and a value, or another property.
isGreaterThanChecks if a property is greater than a value or another property.
isGreaterEqualChecks if a property is greater than or equal to a value or another property.
isLessEqualChecks if a property is less than or equal to a value or another property.

list of Add-on Dynamic SQL tags support with sample source code and result in Enlighten:

Tags
where
foreach
if
<select id="getSelectVillage" resultMap="SelectVillage">
			select ID,Name,district from Village
			<where>
				file.ID in
				<foreach collection="interNames" item="interName">#{interName}</foreach>
				<if test="District != null and !District.isEmpty">
					and District in
					<foreach collection="District" item="district" open="(" separator="," close=")">#{district}</foreach>
				</if>
			</where>
			group by ID
		) as import_errors
		on persist_errors.ID = import_errors.ID
	</select>

MyBatis for Annotation / MyBatis-Spring Integration

Supported Annotations

This extension supports the following Annotations used in MyBatis Annotations for Java  and MyBatis-Spring integration applications:

  • @Select - org.apache.ibatis.annotations.Select

  • @Insert - org.apache.ibatis.annotations.Insert

  • @Update - org.apache.ibatis.annotations.Update

  • @Delete - org.apache.ibatis.annotations.Delete

For MyBatis Annotations

In Java mapper File, when we pass the SQL Queries with annotation parameter directly. Below is a MyBatis-Annotation sample source code with its result in Enlighten

Click to enlarge

  

In the Java Mapper file, when the annotation parameter contains variables which are initialized with a query instead of a query statement itself. Below is a sample source code with its result in Enlighten:

For MyBatis-Spring

Below a Mybatis Spring Integration sample source code with its result in Enlighten:

Click to enlarge

For .NET

For Mapper XML files, below is a mapper XML file with its result in Enlighten: 

MYBATIS DOTNET SQLNAMEDQUERY are created to link between C# method and tables


For TkMyBatis

TkMyBatis source code scenario - 1

Insert operation:

public int addVillageCore(VillagePropertysTypeDao card) throws IOException
	{
        int chck = villagePropertysTypeDao.insertSelective(entity);    
        return chck;
    }

Select operation:

private List<VillagePropertysTypeDTO> getVillagePropertysTypeAll() {
        return VillageNameutil.get("VillagePropertysType_All", new Callable<List<VillagePropertysTypeDTO>>() {
            public List<VillagePropertysTypeDTO> call() throws IOException {
            	var list = villagePropertysTypeDao.selectAll();
                return Districtvillageutil.copyList(list, VillagePropertysTypeDTO.class);
            }
        });
    }

Update operation:

public int updateVillageCore(villageEntity entity) {
      
        entity.setModifyTime(new Date());
        entity.setVillageID(null);
        entity.setName(null);
        return villagePropertysTypeDao.updateByExampleSelective(entity,example);
    }

TkMyBatis source code scenario - 2

A quick introduction of how to create the project with its result in Enlighten:

Configuration Entity class:

@Table(name = "`village`")
public class Village_data 
{
 .....
}

Create the interface:

import tk.mybatis.mapper.common.Mapper;
@Component
public interface VillageDao<T> extends Mapper<T>{
}

Create the DAO interface:

public interface VillagePropertysTypeDao extends VillageDao<Village_data>{
}

Test case - Use of Interface:

public List<VillagePropertysTypeDTO> getVillagePropertysCore(String memberId) {
        var queryVillage = new Village_data();
        queryVillage.setMemberID(memberId);
        var list = villagePropertysTypeDao.selectByRowBounds(queryVillage);
        return BeanUtil.copyList(list, VillagePropertysTypeDTO.class);
 }

Objects

The following specific objects are displayed in CAST Enlighten:

  • Mapper xml file - this object is created by the JEE Analyzer/.NET Analyzer.
  • SQL_Named query - this object(s) is created by the MyBatis extension for Java Projects.
  • MYBATIS DOTNET SQLNAMEDQUERY - this object(s) is created by the MyBatis extension for .NET Projects.

Various links are created but the following are the links specific to the MyBatis extension:

MyBatis for Java

  • Call link between a Java Method object and an SQL_Named query object.
  • Use (typed with Select, Delete, Insert, Update) link between an SQL_Named query object and a Table object.

MyBatis for .NET

  • Call link between a .NET Method object and an MYBATIS DOTNET SQLNAMEDQUERY object.
  • Use (typed with Select, Delete, Insert, Update) link between an MYBATIS DOTNET SQLNAMEDQUERY object and a Table object.
  • Refer link between a .NET Constructor object and an MYBATIS DOTNET SQLNAMEDQUERY object.

TkMyBatis

  • Use (typed with Select, Delete, Insert, Update) link between an Java Method object and a Table object.
public int addUpdateVillageCore(VillagePropertysTypeDao card) throws IOException
	{   
		Village_data entity =new Village_data();
        int chck = villagePropertysTypeDao.insertSelective(entity);    
        
        var type = new typed(Village_data.class);
        entity.setModifyTime(new Date());
        entity.setVillageID(null);
        entity.setName(null);
        return villagePropertysTypeDao.updateByExampleSelective(entity,type);
    }

Structural Rules

The following structural rules are provided with MyBatis extension: