逆向工程的作用:
可以使用它通过数据库中的表来自动生成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();
}
}
代码
最终效果:
提醒一下:
只要以后想要对数据库进行单表增删改查等操作,都可以使用逆向工程来完成,比较简单。反正还是要看自己怎么选择