mybatis的逆向工程是很大的減小了程序員對代碼的編寫工做,因爲mybatis是半自動的sql語句使用,咱們在項目中通常都是採用逆向工程來生成mybatis的文件,mapper接口至關於咱們日常所說的dao接口,利用逆向工程,能夠直接生成。java
須要注意的是:mybatis自動生成的代碼只能操做單表,若是是處理多表的話,須要本身寫sqlmysql
前提:數據庫的表已經建立完畢,逆向工程是由數據庫表來生成的dao層。主要是進行數據庫的通訊和供service的調用,具體咱們這幾個步驟:程序員
第一步:數據庫表已經建立完成。web
導入逆向工程出錯緣由:sql
mybatis的逆向工程有兩個文件:數據庫
咱們須要導入generatorSqlmapCustom這個工程文件纔不會報錯。api
出錯緣由,因爲使用mybatis的逆向工程不能重複生成相同名字的表,不然會報mapper錯誤,由於它會在原來的基礎上再重複生成文件。mybatis
因此咱們須要將逆向工程在eclipse中刪除掉,而後再從新導入從新生成。app
這個時候刪除的時候注意:eclipse
有時候不經意把這個刪除框勾選,結果把逆向工程的文件也給刪掉了。下次導入的時候就找不到這個工程文件了。
第二步:在java工程中導入用來生成逆向工程的文件,一個java文件和一個.xml的文件。
通常咱們會封裝成一個java的項目文件,而後直接導入web工程,執行後就能夠自動生成。
例如這裏的:
導入到項目中,
在GeneratorSqlmap.java中的代碼是這樣的,主要用來調用它的.XML文件:
import java.io.File;
import java.io.IOException;
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.exception.XMLParserException;
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();
}
}
}
第二個文件是generatorConfig.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="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自動生成的註釋 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--數據庫鏈接的信息:驅動類、鏈接地址、用戶名、密碼 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/taotao" userId="root"
password="root">
</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.taotao.pojo"
targetProject=".\src">
<!-- enableSubPackages:是否讓schema做爲包的後綴 -->
<property name="enableSubPackages" value="false" />
<!-- 從數據庫返回的值被清理先後的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置,這裏要標明 -->
<sqlMapGenerator targetPackage="com.taotao.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否讓schema做爲包的後綴 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.taotao.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否讓schema做爲包的後綴 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定數據庫表,這裏對應的數據庫的哪些表來生成逆向文件。 -->
<table schema="" tableName="tb_content"></table>
<table schema="" tableName="tb_content_category"></table>
<table schema="" tableName="tb_item"></table>
<table schema="" tableName="tb_item_cat"></table>
<table schema="" tableName="tb_item_desc"></table>
<table schema="" tableName="tb_item_param"></table>
<table schema="" tableName="tb_item_param_item"></table>
<table schema="" tableName="tb_order"></table>
<table schema="" tableName="tb_order_item"></table>
<table schema="" tableName="tb_order_shipping"></table>
<table schema="" tableName="tb_user"></table>
</context>
</generatorConfiguration>
在工程中,執行下.java文件就會生成逆向文件:
會生成上面兩個文件,紅框中表示的是一個數據庫表的生成類型
TbItemMapper.java主要是對數據庫操做的一些接口,直接調用便可,TbItemMapper.xml是對sql語句的拼接,之後能夠直接修改sql語句。
pojo類前面已經說過,其實就是指的一個javabean對象,用來實現持久層和控制層的調用。
對sql的查詢除了固定的id查詢外,還有自定義條件查詢,即生成的TbItemExample.java的使用,由它生成criteria文件來實現查詢。
下面例子:
@Servicepublic class ItemServiceImpl implements ItemService{//這裏的所說的mapper接口其實就是dao接口,因此咱們須要引入商品的dao接口 @Autowired private TbItemMapper itemMapper; @Override public TbItem getItemById(long itemId) { //這是根據id進行查詢:兩種方法查詢:方法一:TbItem item=itemMapper.selectByPrimaryKey(itemId); //方法二:下面一個是根據條件進行查詢 TbItemExample example=new TbItemExample(); //這樣寫不會報錯,添加查詢條件 TbItemExample.Criteria criteria=example.createCriteria(); criteria.andIdEqualTo(itemId);//這裏會自動將itemId傳入,生成sql語句。 List<TbItem> list= itemMapper.selectByExample(example); if (list!=null &&list.size()>0) { TbItem item=list.get(0); return item; }