zoukankan      html  css  js  c++  java
  • 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:codemysqlmysql-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()+"	"+"书名:"+book.getName()+"	"+"出版社:"+book.getpId());
            }
            //释放资源
            session.close();
        }
    }
    代码

    最终效果:

    提醒一下:

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

  • 相关阅读:
    Ubuntu,QT5连接MySQL
    QT添加程序图标及窗口图标
    动态库与静态库
    Windows Gdi & CDC和HDC的区别与转换
    MFC多线程各种线程用法 .
    MFC 使用控制台打印程序信息
    Windows程序员必须知道的字符编码和字符集
    MFC DestroyWindow、OnDestroy、OnClose 程序关闭相关
    Windows消息机制详解
    c c++ 宏定义中#, ##, #@的含义
  • 原文地址:https://www.cnblogs.com/zhang1314/p/13616090.html
Copyright © 2011-2022 走看看