mybatis——逆向工程以及案例

逆向工程的作用:

可以使用它通过数据库中的表来自动生成Mapper接口和映射文件和Po类

注:这里的映射文件只包含单表增删改查等操作

 

第一部分:自动生成的方法

第一步:

(1)创建一个Java工程

(2)再导入的jar包,如下:

 

 提醒一下:这些包还是根据自己的版本来,以上就是我包的版本。

 

第二步:将所导入的包,手动添加环境,方法如下:

选中导入的jar包——》右击——》Build Path——》最后点击Add to Build Path即可,效果如下:

 

 

加载成功的话,会有以下效果,如下:

 

第三步:Mapper生成配置文件

需要在根目录(注:不是在src下创建)下创建generatorConfig.xml(也可以取别的,不一定也要跟我取得一样)中配置mapper生成的详细信息,需要注意以下几点:

(1)添加要生成的数据库

(2)po文件所在包路径

(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>
    <!--指定数据库驱动jar包位置-->
    <classPathEntry location="E:\code\mysql\mysql-connector-java-8.0.17.jar"/><!--这里数据驱动位置修改自己的路径  -->
    <!--id:自定义-->
    <context id="mybatisConfig" targetRuntime="MyBatis3">
        <!--禁用注释-->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
        </commentGenerator>
        <!--连接数据库,useSSL=false解决jdbd与mysql版本兼容问题-->
        <!-- 如果出现时区问题,就在数据库名后面加?serverTimezone=UTC -->
        <!-- jdbcConnection中的userId和password修改成自己的用户名和密码 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/day?serverTimezone=UTC"
            userId="root" password="123456"/>
        <!--生成entity类-->
        
        <!--这里的targetPackage包名可以修改,最好是这里的包名和所创的类中类名可以一致  -->
        <javaModelGenerator targetPackage="com.mybatis.mapper" targetProject=".\src"/><!-- 注意:targetProject在写路径时,不要写死了,最好写成为.\src这个路径 -->
        
        <!--xml映射文件-->
        <sqlMapGenerator targetPackage="com.mybatis.mapper.app" targetProject=".\src"/>
        
        <!--mapper接口-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.mybatis.mapper.app" targetProject=".\src"/>
        
        <!--table配置,指定数据库中t_user表生成对应的User实体类-->
        <table tableName="book"/><!-- 这里是我填写的表名 -->
        <table tableName="publisher"/><!--这里是我填写的表名  -->
       <!--  <table tableName="t_tag" domainObjectName="Tag"/>
        <table tableName="t_movie" domainObjectName="Movie"/> -->
    </context>
</generatorConfiguration>

 

 

第四步:使用Java生成mapper文件

(1)创建类,这里我的类名为“text.java”

//这是自己所创建的类
package com.mapper.app;

import java.io.File;
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.internal.DefaultShellCallback;

public class text {
     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 {
                text generatorSqlmap = new text();
                generatorSqlmap.generator();
            } catch (Exception e) {
                e.printStackTrace();
            }
     
        }

}

 

 

运行的效果如下:

 

 

注:运行以后,说明已经生成了,如果看不到的话,请刷新该项目,千万不要重复生成,重复生成看不到,也没法用,需要注意一下。

 

(2)生成以后,有增加了两个包名(这里包可以修改,但需要在刚刚所创建的“generatorConfig.xml里面进行修改”,以下包自己取得,也可以自取),效果如下:

 

 

 第二部分:使用逆向工程对单表进行增删改查等操作

第一步:创建一个项目,在src同级下创建主配置文件、创建配置文件

(1)想要对数据库进行增删改查等操作,就需要导入以下的jar包(跟着自己的版本来),如下:

 

 

(2)创建主配置文件,配置如下(只写一种方式):

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!--数据库连接池 -->
            <dataSource type="POOLED">
            
            <!--解析:这里是添加驱动,还需要注意:这里我的mysql版本是8点多版本,所以在添加驱动时,还需要添加cj。
            如果版本不是那么高的话,驱动就这样的写(com.mysql.cj.jdbc.Driver),反正根据自己的来  -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                
                <!--这里属于所访问的地址,还是需要注意一下:下面是由于我的mysql是8点多的版本,需要添加“?serverTimezone=UTC”这个,
                因为这个是解决时区的问题,出现时区的问题,就加上,如果没有,就不加 。介绍:day是我的数据库,还是根据自己的来 -->
                <property name="url" value="jdbc:mysql://localhost:3306/day?serverTimezone=UTC" />
                
                <!--用户  -->
                <property name="username" value="root" />
                
                <!--这是mysql的密码,反正还是根据自己的mysql的密码  -->
                <property name="password" value="123456" />
                
            </dataSource>
        </environment>
    </environments>
    <mappers> 
    <!--这里是主配置文件(SqlMapConfig.xml)调用映射文件(BookMapper.xml),配置如下  -->
        <mapper resource="com/mybatis/mapper/app/BookMapper.xml" /> 
    </mappers> 
</configuration>

 

 

(3) 创建配置文件,配置如下:

log4j.rootLogger=DEBUG, Console

#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

 

第二步:把逆向工程里所生成的那两个包复制到现在这个项目目录下,效果如下:

 

 

 第三步:创建测试类

package com.mapper.app;

import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.mybatis.mapper.Book;
import com.mybatis.mapper.BookExample;
import com.mybatis.mapper.BookExample.Criteria;
import com.mybatis.mapper.app.BookMapper;

public class test {
    public static void main(String [] args) throws Exception {
        test te=new test();
        te.selectBook();
    }
    
    public void selectBook() throws Exception {
        //获取主配置文件
        String sql="SqlMapConfig.xml";
        //获取配置文件
        InputStream inputStream=Resources.getResourceAsStream(sql);
        //创建会话
        SqlSessionFactory sqlsession=new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlsession.openSession();
                            
        //BookMapper是生成文件中的接口
        BookMapper mapper =session.getMapper(BookMapper.class);//getMapper方法是获取接口的字节码文件
        
        //创建BookExample对象
        BookExample bookExample=new BookExample();
        //通过BookExample对象创建查询条件封装对象()
        Criteria createCriteria = bookExample.createCriteria();
        
        //加入查询条件
        //createCriteria.andIdEqualTo(1);
        //模糊查询
        //name只含有西,则返回信息,如果没有,则不返回
        createCriteria.andNameLike("%西%");
        
        //获取BookExample对象的对象名
        List<Book> selectByExample = mapper.selectByExample(bookExample);
        
        //使用迭代器
        Iterator<Book> iterator = selectByExample.iterator();
        while (iterator.hasNext()) {
            Book book = (Book) iterator.next();
            System.out.println("序号:"+book.getId()+"\t"+"书名:"+book.getName()+"\t"+"出版社:"+book.getpId());
        }
        //释放资源
        session.close();
    }
}
代码

 

 

最终效果:

 

提醒一下:

只要以后想要对数据库进行单表增删改查等操作,都可以使用逆向工程来完成,比较简单。反正还是要看自己怎么选择

posted @ 2020-09-04 20:34  hell_o  阅读(626)  评论(0编辑  收藏  举报