Mybatis逆向工程简单介绍

转自:http://www.javashuo.com/article/p-vyjouxgm-dz.htmlcss

什么是逆向工程

MyBatis的一个主要的特色就是须要程序员本身编写sql,那么若是表太多的话,不免会很麻烦,因此mybatis官方提供了一个逆向工程,能够针对单表自动生成mybatis执行所须要的代码(包括mapper.xml、mapper.java、po..)。通常在开发中,经常使用的逆向工程方式是经过数据库的表生成代码。java

使用逆向工程

使用MyBatis的逆向工程,须要导入逆向工程的jar包,我用的是mybatis-generator-core-1.3.2.jar,下面开始总结一下MyBatis逆向工程的使用步骤。mysql

新建一个工程(重要)

咱们要新建一个java工程,这个工程专门用来使用逆向工程生成代码的。有些人可能会问,为何要新建一个工程呢?直接在原来工程中你想生成不就能够了么?确实是这样,能够在原来的工程中生成,可是有风险,由于MyBatis是根据配置文件来生成的(下面会说到),若是生成的路径中有相同的文件,那么就会覆盖原来的文件,这样会有风险。因此开发中通常都会新建一个java工程来生成,而后将生成的文件拷贝到本身的工程中,这也不麻烦,并且很安全。以下:
这里写图片描述
从上图中看,①就是要执行的java代码,执行它便可生成咱们须要的代码;②是执行过程当中新建的包,这个包均可以在④的配置文件中指定,最好是跟咱们本身项目的包名一致,后面就能够直接拷贝了,就不须要修改包名了;③就是jar包咯;④是配置文件,下面会详细分析。
读者如若须要MyBatis的逆向工程——generatorSqlmapCustom,可点击MyBatis的逆向工程——generatorSqlmapCustom进行下载!程序员

配置逆向工程的配置文件

MyBatis逆向工程生成代码须要一个配置文件,名字随便起。而后MyBatis会根据这个配置文件中的配置,生成相应的代码。mybatis-generator-core-1.3.2.jar这个jar包里面有帮助文档,打开后里面有配置文件的模板,这里就再也不赘述了,下面先把配置文件写好:web

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
<?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/mybatis" userId="root" password="yezi"> </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.itheima.mybatis.po" targetProject=".\src"> <!-- enableSubPackages:是否让schema做为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理先后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="com.itheima.mybatis.mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema做为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.itheima.mybatis.mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema做为包的后缀 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定数据库表 --> <table schema="" tableName="user"></table> <table schema="" tableName="orders"></table> <!-- 有些表的字段须要指定java类型 <table schema="" tableName=""> <columnOverride column="" javaType="" /> </table> --> </context> </generatorConfiguration>

从上面的配置文件中能够看出,配置文件主要作的几件事是:spring

  1. 链接数据库,这是必须的,要否则怎么根据数据库的表生成代码呢?
  2. 指定要生成代码的位置,要生成的代码包括po类,mapper.xml和mapper.java
  3. 指定数据库中想要生成哪些表

执行逆向工程生成代码

配置文件搞好了,而后就执行如下程序便可生成代码了,生成的java程序,下载的逆向工程文档中都有示例,以下:sql

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
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(); } } }

运行一下便可,运行完了后刷新一下工程,就能够看到最新生成的代码了。
这里写图片描述
这里能够看出有个细节,每一个po类多了一个东西,就是xxxExample.java,这个类是给用户自定义sql使用的,后面我会提到。到这里就生成好了,下面咱们就把生成的代码拷贝到本身的工程使用了。数据库

逆向工程测试

在这里我把生成的代码拷贝到上文MyBatis框架的学习(六)——MyBatis整合Spring的工程案例中,以下:
这里写图片描述
接着在Spring核心配置文件——application-context.xml添加以下配置:安全

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 配置要扫描的包,若是扫描多个包使用半角逗号分隔 --> <!-- <property name="basePackage" value="cn.itheima.mybatis.mapper,com.itheima.mybatis.mapper" /> --> <property name="basePackage" value="com.itheima.mybatis.mapper" /> </bean>

最后编写UserMapper接口的单元测试类——UserMapperTest.java,内容以下:markdown

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
public class UserMapperTest { private ApplicationContext applicationContext; @Before public void init() { // 初始化Spring容器 applicationContext = new ClassPathXmlApplicationContext("classpath:spring/application-context.xml"); } @Test public void testDeleteByPrimaryKey() { // 请读者自行测试... } @Test public void testInsert() { UserMapper userMapper = applicationContext.getBean(UserMapper.class); User user = new User(); user.setUsername("武大郎"); user.setSex("1"); user.setBirthday(new Date()); user.setAddress("河北清河县"); userMapper.insert(user); } @Test public void testSelectByExample() { UserMapper userMapper = applicationContext.getBean(UserMapper.class); UserExample example = new UserExample(); // Criteria类是UserExample类里面的内部类,Criteria类是干什么用的呢?它专门用于封装自定义查询条件的 // Criteria criteria = example.createCriteria(); // criteria.andUsernameLike("%张%"); // 执行查询 List<User> list = userMapper.selectByExample(example); for (User user : list) { System.out.println(user); } } @Test public void testSelectByPrimaryKey() { UserMapper userMapper = applicationContext.getBean(UserMapper.class); User user = userMapper.selectByPrimaryKey(10); System.out.println(user); } @Test public void testUpdateByPrimaryKey() { // 请读者自行测试... } }

能够看出,逆向工程生成的代码,基本上和以前使用的差很少,只不过它更规范一点,并且还多了自定义查询条件的java类,用起来仍是挺方便的。关于MyBatis的逆向工程就总结到这吧。
最后,我仍是给出逆向工程测试的工程吧!读者可点击MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码进行下载。

<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>
相关文章
相关标签/搜索