MyBatis - 1.3
Extension ID
com.castsoftware.ibatis
What’s new ?
Please see MyBatis - 1.3 - Release Notes for more information.
Description
This extension provides support for the MyBatis/IBatis persistence framework on Java and .NET.
In what situation should you install this extension?
This extension should be installed when analyzing a Java/.NET project that uses a MyBatis 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.
Technology support
The following libraries are supported by this extension:
Language | Library | Version | Supported |
---|---|---|---|
Java | com.ibatis | upto 2.0.0 | ✔️ |
Java | org.apache:mybatis | upto 3.5.9 | ✔️ |
Java | org.apache:mybatis-spring | upto 3.0.0 | ✔️ |
Java | tk.mybatis | upto 4.1.5 | ✔️ |
.NET | IBatisNet.DataMapper | upto 2.1.0 | ✔️ |
.NET | SqlBatis.DataMapper | upto 5.1.0 | ✔️ |
Compatibility
This extension is compatible with:
CAST Imaging Core release | Supported |
---|---|
8.3.x | ✔️ |
Download and installation instructions
For applications using any of the above mentionned libraries, this extension will be automatically installed by CAST Imaging Console. For upgrade, if the Extension Strategy is not set to Auto update, you can manually upgrade the extension using the Application - Extensions interface.
What results can you expect?
Once the analysis/snapshot generation has completed, you can view the below objects and links created.
Objects
Icon | Description | Comment |
---|---|---|
![]() |
Java MyBatis SQL Query | An object is created for each native SQL query found in java project and resolved in a method call/xml file |
![]() |
Java MyBatis Entity | An object is created for each tk.MyBatis entity |
![]() |
Java MyBatis Entity Operation | An object is created for each tk.MyBatis Mapper operation |
![]() |
Java Unknown MyBatis SQL Query | An object is created for each native SQL query found in java project and the exact query cannot be resolved |
![]() |
Java Unknown MyBatis Entity | An object is created for when tk.MyBatis entity cannot be resolved |
![]() |
Java Unknown MyBatis Entity Operation | An object is created for each tk.MyBatis Mapper operation and respective Entity cannot be resolved |
![]() |
DotNet MyBatis SQL Query | An object is created for each native SQL query found in .Net project and resolved in a method call/xml file |
Links
Link Type | Caller | Callee | APIs Supported |
---|---|---|---|
callLink | Java Method | Java MyBatis SQL Query | SqlMapClient APIscom.ibatis.sqlmap.client.SqlMapExecutor.updatecom.ibatis.sqlmap.client.SqlMapExecutor.delete com.ibatis.sqlmap.client.SqlMapExecutor.insert com.ibatis.sqlmap.client.SqlMapExecutor.queryForObject com.ibatis.sqlmap.client.SqlMapExecutor.queryForList com.ibatis.sqlmap.client.SqlMapExecutor.queryWithRowHandler com.ibatis.sqlmap.client.SqlMapExecutor.queryForMap com.ibatis.sqlmap.client.SqlMapExecutor.queryForPaginatedList com.ibatis.sqlmap.client.SqlMapClient.update com.ibatis.sqlmap.client.SqlMapClient.delete com.ibatis.sqlmap.client.SqlMapClient.insert com.ibatis.sqlmap.client.SqlMapClient.queryForObject com.ibatis.sqlmap.client.SqlMapClient.queryForList com.ibatis.sqlmap.client.SqlMapClient.queryWithRowHandler com.ibatis.sqlmap.client.SqlMapClient.queryForMap com.ibatis.sqlmap.client.SqlMapClient.queryForPaginatedList Session APIsorg.apache.ibatis.session.SqlSession.selectOneorg.apache.ibatis.session.SqlSession.selectList org.apache.ibatis.session.SqlSession.select org.apache.ibatis.session.SqlSession.insert org.apache.ibatis.session.SqlSession.update org.apache.ibatis.session.SqlSession.delete Annotation APIsorg.apache.ibatis.annotations.Insertorg.apache.ibatis.annotations.Update org.apache.ibatis.annotations.Delete org.apache.ibatis.annotations.Select org.apache.ibatis.annotations.InsertProvider org.apache.ibatis.annotations.UpdateProvider org.apache.ibatis.annotations.DeleteProvider org.apache.ibatis.annotations.SelectProvider |
callLink | Java Method | Java MyBatis Entity Operation | tk.mybatis Mapper APIstk.mybatis.mapper.common.condition.UpdateByConditionMapper.updateByConditiontk.mybatis.mapper.common.condition.UpdateByConditionSelectiveMapper.updateByConditionSelective tk.mybatis.mapper.common.base.delete.DeleteByPrimaryKeyMapper.deleteByPrimaryKey tk.mybatis.mapper.common.base.delete.DeleteMapper.delete tk.mybatis.mapper.common.base.insert.InsertMapper.insert tk.mybatis.mapper.common.base.insert.InsertSelectiveMapper.insertSelective tk.mybatis.mapper.common.base.select.ExistsWithPrimaryKeyMapper.existsWithPrimaryKey tk.mybatis.mapper.common.base.select.SelectAllMapper.selectAll tk.mybatis.mapper.common.base.select.SelectByPrimaryKeyMapper.selectByPrimaryKey tk.mybatis.mapper.common.base.select.SelectCountMapper.selectCount tk.mybatis.mapper.common.base.select.SelectMapper.select tk.mybatis.mapper.common.base.select.SelectOneMapper.selectOne<brtk.mybatis.mapper.common.base.update.UpdateByPrimaryKeyMapper.updateByPrimaryKey tk.mybatis.mapper.common.base.update.UpdateByPrimaryKeySelectiveMapper.updateByPrimaryKeySelective tk.mybatis.mapper.common.example.DeleteByExampleMapper.deleteByExample tk.mybatis.mapper.common.example.SelectByExampleMapper.selectByExample tk.mybatis.mapper.common.example.SelectCountByExampleMapper.selectCountByExample tk.mybatis.mapper.common.example.SelectOneByExampleMapper.selectOneByExample tk.mybatis.mapper.common.example.UpdateByExampleMapper.updateByExample tk.mybatis.mapper.common.example.UpdateByExampleSelectiveMapper.updateByExampleSelective tk.mybatis.mapper.common.ids.DeleteByIdsMapper.deleteByIds tk.mybatis.mapper.common.ids.SelectByIdsMapper.selectByIds tk.mybatis.mapper.common.rowbounds.SelectByConditionRowBoundsMapper.selectByConditionAndRowBounds tk.mybatis.mapper.common.rowbounds.SelectByExampleRowBoundsMapper.selectByExampleAndRowBounds tk.mybatis.mapper.common.rowbounds.SelectRowBoundsMapper.selectByRowBounds tk.mybatis.mapper.common.special.InsertListMapper.insertList tk.mybatis.mapper.common.special.InsertUseGeneratedKeysMapper.insertUseGeneratedKeys tk.mybatis.mapper.common.sqlserver.InsertMapper.insert tk.mybatis.mapper.common.sqlserver.InsertSelectiveMapper.insertSelective |
callLink | C# Method | DotNet MyBatis SQL Query | IBatisNet APIsIBatisNet.DataMapper.ISqlMapper.QueryForListIBatisNet.DataMapper.ISqlMapper.QueryForObject IBatisNet.DataMapper.ISqlMapper.QueryForDictionary IBatisNet.DataMapper.ISqlMapper.QueryForMap IBatisNet.DataMapper.ISqlMapper.QueryWithRowDelegate IBatisNet.DataMapper.ISqlMapper.Insert IBatisNet.DataMapper.ISqlMapper.Delete IBatisNet.DataMapper.ISqlMapper.Update SqlBatis APIsSqlBatis.DataMapper.ISqlMapper.QueryForListSqlBatis.DataMapper.ISqlMapper.QueryForObject SqlBatis.DataMapper.ISqlMapper.QueryForDictionary SqlBatis.DataMapper.ISqlMapper.QueryForMap SqlBatis.DataMapper.ISqlMapper.QueryWithRowDelegate SqlBatis.DataMapper.ISqlMapper.Insert SqlBatis.DataMapper.ISqlMapper.Delete SqlBatis.DataMapper.ISqlMapper.Update |
Java Examples
SQLSession CRUD APIs
public void update(Village village)
{
SqlSession session = MyBatisUtil.getSqlSessionFactory().openSession();
session.update("com.rlab.mappers.VillageMapper.updatevillage",village);
session.commit();
session.close();
}
<mapper namespace = "com.rlab.mappers.VillageMapper">
<update id="updatevillage" parameterType = "Village">
UPDATE village SET name=#{name},district=#{district}WHERE id= #{id}
</update>
</mapper>
Mapper Interface
public interface PersonMapper {
Person insertPerson(Person person);
Person findPersonById(Integer id);
List<Person> findAllPersons();
Person updatePerson(Person person);
void removePerson(Integer idPerson);
}
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="br.com.erudio.mappers.PersonMapper">
<update id="updatePerson" parameterType="Person">
update person set
firstName = #{firstName}
,lastName = #{lastName}
,address = #{address}
where id = #{idPerson}
</update>
</mapper>
Annotations
public interface UserAnnotationMapper {
@Insert("insert into users(name,email) values(#{name},#{email})")
@SelectKey(statement = "call identity()", keyProperty = "id", before = false, resultType = Integer.class)
void insertUser(User user);
@Select("select id, name, email from users WHERE id=#{id}")
User findUserById(Integer id);
@Select("select id, name, email from users")
List<User> findAllUsers();
}
Unknown SQL Query - Annonation Provider APIs
public interface AddressMapper {
@InsertProvider(type = AddressServiceImpl.class, method = "dynamicSQL")
int insertProvider(String record_);
}
tk.MyBatis Mapper
selectCount API
import com.yzx.shop.user.entity.User;
import tk.mybatis.mapper.common.Mapper;
public interface UserMapper extends Mapper<User> {
}
import javax.persistence.Table;
@Table(name = "tb_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public Boolean checkUserData(String data, Integer type) {
User record=new User();
if(type==1){
record.setUsername(data);
}else if(type==2){
record.setPhone(data);
}else {
return null;
}
return userMapper.selectCount(record)==0;
}
}
deleteByPrimaryKey API
import com.yzx.shop.item.entity.Stock;
import tk.mybatis.mapper.common.Mapper;
public interface StockMapper extends Mapper<Stock> {
}
import javax.persistence.Table;
@Table(name = "tb_stock")
public class Stock {
@Id
private Long skuId;
public Long getSkuId() {
return skuId;
}
}
@Service
public class GoodsServiceImpl implements GoodsService {
@Resource
private StockMapper stockMapper;
@Override
@Transactional
public void updateGoods(SpuBo spuBo) {
Sku record=new Sku();
record.setSpuId(spuBo.getId());
List<Sku> skuList=skuMapper.select(record);
skuList.forEach(s->{
stockMapper.deleteByPrimaryKey(s.getId());
skuMapper.deleteByPrimaryKey(s.getId());
});
spuBo.setLastUpdateTime(new Date());
spuMapper.updateByPrimaryKeySelective(spuBo);
spuDetailMapper.updateByPrimaryKey(spuBo.getSpuDetail());
insertSkusBySpuBo(spuBo);
sendMsg(MSG_UPDATA,spuBo.getId());
}
}
Unknown Entity
import tk.mybatis.mapper.common.Mapper;
public abstract class BaseService<T> implements IService<T> {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
protected Mapper<T> mapper;
public Mapper<T> getMapper() {
return mapper;
}
@Override
public int batchSave(List<T> list) {
int result = 0;
for (T record : list) {
int count = mapper.insertSelective(record);
result += count;
}
return result;
}
.NET Examples
ISQLMapper APIs
public static string FindDepartment(int deptId){
ISqlMapper mapper = EntityMapper;
string str = mapper.QueryForObject<string>("FindDepartment", deptId);
return str;
}
<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="MyBatisApp" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<statements>
<statement id="FindDepartment" parameterClass="System.Int32" resultClass="System.String" >
SELECT Name
FROM Department
WHERE Id = #value#
</statement>
</sqlMap>
Structural Rules
None.
Limitations
- SQL Query from Annotation Provider APIs cannot be resolved, therefore Unknown MyBatis SQL Query objects will be created for them
- Unknown Entity and Unknown Entity Operation objects are created for tk.Mybatis in case the entity of the CRUD transaction cannot be resolved