MyBatis逆向工程詳細教程


1 導入逆向工程到eclipse中

2 修改配置文件

注意修改以下幾點:

  1. 修改要生成的數據庫表
  2. pojo文件所在包路徑
  3. Mapper所在的包路徑

配置文件如下:

<?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://39.105.94.154:3306/mybatis" 
            userId="tom"
            password="tom,">
        </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.mybatis.spring.pojo"
            targetProject=".\src">
            <!-- enableSubPackages:是否讓schema作為包的后綴 -->
            <property name="enableSubPackages" value="false" />
            <!-- 從數據庫返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="com.mybatis.spring.mapper" 
            targetProject=".\src">
            <!-- enableSubPackages:是否讓schema作為包的后綴 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>
        <!-- targetPackage:mapper接口生成的位置 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.mybatis.spring.mapper"
            targetProject=".\src">
            <!-- enableSubPackages:是否讓schema作為包的后綴 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
        <!-- 指定數據庫表 -->
        <table schema="" tableName="user"></table>
        <table schema="" tableName="orders"></table>
        
        <!-- 有些表的字段需要指定java類型
             比如我們表里面有一個字段是tinyint類型,范圍-128~127.
             你會發現它自己生成的時候會生成一個Boolean類型。
             他認為之后裝0,和 1.
             如果說你想裝0,1,2,3,4,5,6多個值,這時候boolean就不行了。
             這時候你就需要指定一下tinyint類型的字段轉換后的類型為int。
         <table schema="" tableName="">
            <columnOverride column="id" javaType="int" />
        </table> -->
    </context>
</generatorConfiguration>

3 生成逆向工程代碼

找到下圖所示的java文件,執行工程main主函數,

刷新工程,發現代碼生成,如下圖:

4 測試逆向工程代碼

1 新建一個java工程名為mybatis-spring-second

2.復制剛剛生成的逆向工程代碼到項目中,效果如下

修改spring配置文件

applicationContext.xml修改.注意使用掃描的方式配置代理

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context" 
       xmlns:aop="http://www.springframework.org/schema/aop" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                        http://www.springframework.org/schema/context 
                        http://www.springframework.org/schema/context/spring-context-4.0.xsd
                        http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
                           http://www.springframework.org/schema/util 
                           http://www.springframework.org/schema/util/spring-util-4.0.xsd">

    <!-- 1加載配置文件 -->
    <context:property-placeholder location="classpath:db.properties" />

    <!-- 2配置連接池 -->
    <bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="10" />
        <property name="maxIdle" value="5" />
    </bean>
    
    <!--3 配置SqlSessionFactory  -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 配置mybatis核心配置文件 -->
        <property name="configLocation" value="classpath:SqlMapConfig.xml" />
        <!-- 配置數據源 -->
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <!-- Mapper代理的方式開發,掃描包方式配置代理 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 配置Mapper接口,如果需要加載多個包,直接寫進來,中間用,分隔 --> <property name="basePackage" value="com.mybatis.spring.mapper"></property> </bean>
     
</beans>

修改SqlMapConfig.xml文件

<?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>
    <!-- 設置別名 -->
    <typeAliases>
        <!-- 2. 指定掃描包,會把包內所有的類都設置別名,別名的名稱就是類名,大小寫不敏感 -->
        <package name="com.mybatis.spring.pojo" />
    </typeAliases>

    <mappers>
        <package name="com.mybatis.spring.mapper"/>
    </mappers>
</configuration>

注意事項

注意:

  1. 逆向工程生成的代碼只能做單表查詢
  2. 不能在生成的代碼上進行擴展,因為如果數據庫變更,需要重新使用逆向工程生成代碼,原來編寫的代碼就被覆蓋了。
  3. 一張表會生成4個文件

測試程序

package com.mybatis.spring.junit;

import java.util.Date;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mybatis.spring.mapper.UserMapper;
import com.mybatis.spring.pojo.User;
import com.mybatis.spring.pojo.UserExample;

public class UserMapperTest {

    private ApplicationContext ac;

    @Before
    public void setUp() throws Exception {
        this.ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    }

    @Test
    //測試插入,插入全部字段
    public void testInsert() {
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);

        User user = new User();
        user.setUsername("曹操");
        user.setSex("1");
        user.setBirthday(new Date());
        user.setAddress("三國");

        userMapper.insert(user);
    }

    @Test
    //測試插入,插入部分字段全部字段
    public void testInsertSelective() {
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);

        User user = new User();
        user.setUsername("盧小西");
        
        user.setBirthday(new Date());
        
        userMapper.insertSelective(user);
    }
    
    @Test
    //測試根據條件刪除
    public void testDeleteByExample(){
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);
        
        // 創建User對象擴展類,用戶設置查詢條件
        UserExample example = new UserExample();
        example.createCriteria().andUsernameLike("%西%");
        
        //刪除數據
        int deleteCount = userMapper.deleteByExample(example);
        
        System.out.println("刪除了:"+deleteCount+"條數據");

    }
    
    @Test
    //測試根據id刪除
    public void testDeleteByPrimaryKey(){
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);
        
        
        //刪除數據
        int deleteCount = userMapper.deleteByPrimaryKey(38);
        
        System.out.println("刪除了:"+deleteCount+"條數據");

    }
    
    @Test
    //查詢名字里面含有張的用戶
    public void testSelectByExample1() {
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);

        // 創建User對象擴展類,用戶設置查詢條件
        UserExample example = new UserExample();
        example.createCriteria().andUsernameLike("%張%");

        // 查詢數據
        List<User> list = userMapper.selectByExample(example);

        System.out.println(list.size());
    }

    @Test
    //查詢性別為1,並且名字里面含有“明”字的,並且降序排序
    public void testSelectByExample2() {
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);

        // 創建User對象擴展類,用戶設置查詢條件
        UserExample example = new UserExample();
        String username = "明";
        example.createCriteria().andSexEqualTo("1").andUsernameLike("%" + username + "%");
        example.setOrderByClause("id desc");
        
        List<User> list = userMapper.selectByExample(example);
        for (User u : list) {
            System.out.println(u.getId() + "\t" + u.getUsername());
        }
    }
    
    @Test
    //查詢性別為1,並且名字里面含有“明”字的用戶數量
    public void testSelectByExample3() {
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);

        // 創建User對象擴展類,用戶設置查詢條件
        UserExample example = new UserExample();
        String username = "明";
        example.createCriteria().andSexEqualTo("1").andUsernameLike("%" + username + "%");
        
        
        int count = userMapper.countByExample(example);
        System.out.println(count);
    }

    @Test
    public void testSelectByPrimaryKey() {
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);

        User user = userMapper.selectByPrimaryKey(31);
        System.out.println(user.getId()+"\t"+user.getUsername()+"\t"+
        user.getAddress()+"\t"+user.getSex()+"\t"+user.getBirthday());
    }
    
    @Test
    //測試用戶修改,根據id,修改全部字段
    public void testUpdateByPrimaryKey(){
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);
        
        User user = new User();
        user.setId(1);
        user.setUsername("曹操");
        user.setSex("1");
        user.setBirthday(new Date());
        user.setAddress("三國");
        
        userMapper.updateByPrimaryKey(user);
        System.out.println(user);
    }
    
    @Test
    //測試用戶修改,根據id,但是只修改其中的某個字段,或者某幾個字段,非全部字段
    public void testUpdateByPrimaryKeySelective(){
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);
        
        User user = new User();
        user.setId(1);
        user.setUsername("諸葛亮");
        
        userMapper.updateByPrimaryKeySelective(user);
        System.out.println(user.getId()+"\t"+user.getUsername());
    }

    @Test
    //測試用戶修改,根據example,修改全部字段
    public void testUpdateByExample(){
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);
        
        //創建需要修改的用戶對象
        User user = new User();
        user.setId(1);
        user.setUsername("習大大");
        user.setSex("1");
        user.setBirthday(new Date());
        user.setAddress("china");
        
        // 創建User對象擴展類,用戶設置查詢條件
        UserExample example = new UserExample();
        example.createCriteria().andIdEqualTo(1);
        
        userMapper.updateByExample(user, example);
        
        System.out.println(user.getId()+"\t"+user.getUsername());
    }

    @Test
    //測試用戶修改,根據id,但是只修改其中的某個字段,或者某幾個字段,非全部字段
    public void testUpdateByExampleSelective(){
        // 獲取Mapper
        UserMapper userMapper = ac.getBean(UserMapper.class);
        
        //創建需要修改的用戶對象
        User user = new User();
        user.setId(1);
        user.setUsername("小強");
        user.setSex("2");
        
        // 創建User對象擴展類,用戶設置查詢條件
        UserExample example = new UserExample();
        example.createCriteria().andIdEqualTo(1);
        
        userMapper.updateByExampleSelective(user, example);
        
        System.out.println(user.getId()+"\t"+user.getUsername());
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM