Mybatis逆向工程实现连接MySQL数据库
作者:fckey
在开发中,一般我们的开发流程是:
- 数据库:设计数据表
- 实体类:建立与数据表对应的pojo实体类
- 持久层:设计持久层,Mapper接口和Mypper.xml sql映射文件
- 服务层:添加Service接口和ServiceImpl接口实现类
- 逻辑控制层:设计各页面/功能的Cotroller
但是,我们想的是,很多情况下,实体类都是一些和SQL表中重复的字段,能不能有一种方法可以自动生成对应的实体类?如果表少,手敲没有啥,如果表太多的话,难免会很麻烦,所以MyBatis
官方提供了一个逆向工程,可以针对单表自动生成MyBatis
执行所需要的代码(包括mapper.xml,mapper.java,pojo
)。一般在开发中,常用的逆向工程方式是通过数据库的表生成代码。
在引入逆向工程之后,我们的开发流程会变成:
- 加入Mybatis逆向工程的依赖
- 设计数据表
- 配置逆向工程配置信息
- 运行逆向工程
- 得到【pojo类、dao接口、sql映射文件】
下面,我们来开始使用,对于逆向工程,帮我们自动生成的Java
代码,大大加快了我们的开发效率。但是,生成的文件太过冗余,不必要的代码过多。尤其是sql
映射文件,里面的配置内容太多,对于dao
层,提供的方法比较有限,需要自行扩展。后期,一般使用MyBatisPlus
完成开发功能。
一、使用步骤
1、建立新项目
开始,我们建立一个空项目,模拟一下初始的开发流程
对于配置文件可以在官方网站中找到:http://mybatis.org/generator/configreference/xmlconfig.html,很多时候要学会看官网 。
2、引入pom依赖
<!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- mybatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- mybatis逆向工程依赖 --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency>
3、创建逆向工程的配置文件 generatorConfig.xml
注意的是:配置文件中的各个标签顺序是有要求的,和mybatis-config.xml
配置文件一样,顺序不对是会报错的。
<?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="DB2Tables" targetRuntime="MyBatis3"> <!-- 去除生成的注解 --> <commentGenerator> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- 数据库连接配置 --> <!-- 注意xml中不支持&,用&代替 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://rm-m5e130nm7h37n6v982o.mysql.rds.aliyuncs.com:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8" userId="xxxxx" password="xxxxxx"></jdbcConnection> <!-- 处理NUMERIC和DECIMAL类型的策略 --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 配置pojo生成的位置 --> <javaModelGenerator targetPackage="com.ycz.pojo" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- 配置sql映射文件的生成位置 --> <sqlMapGenerator targetPackage="com.ycz.mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </sqlMapGenerator> <!-- 配置dao接口的生成位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.ycz.dao" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaClientGenerator> <!-- 指定逆向依据的数据表 --> <table tableName="person" domainObjectName="Person"></table> </context> </generatorConfiguration>
4、运行逆行工程,生成代码文件
public class GeneratorTest { public static void main(String[] args) throws Exception { List<String> warnings = new ArrayList<String>(); boolean overwrite = true; File configFile = new File("src/main/resources/config/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); System.out.println("生成成功!"); } }
二、案例展示
我们按照上述的开发流程步骤来进行:
1、建立数据表
根据自己的业务,首先第一步进行的就是先创建对应符合业务的数据表。这里我使用三张表:
三张表的字段信息如下:
这里不需要直接用我的三张表,可以自己建立自己的表来进行测试,这边只是为了后文博文的完整性。
2、改写对应的配置文件内容
1、数据库连接配置,指定自己的数据库
需要对generatorConfig.xml
文件中的内容修改为符合自己项目的配置。
<!-- 注意xml中不支持&,用&代替 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis_demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8" userId="root" password="admin123"> <!--在逆向生成时,除了会生成 User 类,还会生成一个继承 User 类的UserWithBLOBs 类。 加入此注解避免生成类的UserWithBLOBs--> <property name="nullCatalogMeansCurrent" value="true" /> </jdbcConnection>
jdbcConnection
设置连接信息,配置用户名和密码,驱动和数据库的url等等信息。
2、配置pojo生成的位置
<!-- 配置pojo生成的位置 --> <javaModelGenerator targetPackage="com.fckey.pojo" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator>
主要配置的是targetPackage
项目,指定pojo生成的位置
3、配置sql映射文件的生成位置
<!-- 配置sql映射文件的生成位置 --> <sqlMapGenerator targetPackage="com.fckey.mapper" targetProject="src/main/resources"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </sqlMapGenerator>
4、配置mapper接口的生成位置
<!-- 配置dao接口的生成位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.fckey.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaClientGenerator>
5、对需要生成对应数据表进行指定
<!-- 指定逆向依据的数据表 --> <table tableName="t_dept" domainObjectName="Dept"></table> <table tableName="t_emp" domainObjectName="Emp"></table> <table tableName="t_user" domainObjectName="User"></table>
3、运行生成代码工具类
在编写好了对应的配置,还需要一个能够运行配置的方法。如下所示:
public class GeneratorTest { public static void main(String[] args) throws Exception { List<String> warnings = new ArrayList<String>(); boolean overwrite = true; File configFile = new File("src/main/resources/config/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); System.out.println("生成成功!"); } }
4、运行结果
直接运行GeneratorTest
,查看最终的结果
生成的效果还是不错的,对于xml配置文件,里面写的内容也是非常的专业。
三、对生成的逆向工程代码进行测试
对于生成的逆向工程代码,我们注意到pojo
包名下还生成了xxxExample
方法,example
用于添加查询条件,相当where
后面的部分。
对于Example
中方法的说明。
在进行测试之前,需要注意的是,我们还需要导入全局配置文件mybatis-config.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> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="cacheEnabled" value="true"/> </settings> <typeAliases> <!--将当前包下的所有类都配置别名--> <package name="com.fckey.mybatis.entity"/> </typeAliases> <!--设置连接数据库的环境--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo"/> <!--注意:如果在建sql表单的时候选了字符集(如utf8), 这里的value要改成:value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8"--> <property name="username" value="root"/> <property name="password" value="admin123"/> </dataSource> </environment> </environments> <!--引入映射文件--> <mappers> <package name="com.fckey.mapper"/> </mappers> </configuration>
书写测试类的时候,发现多了很多条件的查询。
测试类编写:
private static SqlSession getSqlSession() throws IOException { /* 如果是想自动的进行提交,而不需要手动的提交事务,可以在sqlSession()中传入true,即可开启自动提交功能 */ // 加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); // 获取sqlsessionfactorybuilder对象 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 获取sqlsessionFactory SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); // 获取sqlsession SqlSession sqlSession = sqlSessionFactory.openSession(true); return sqlSession; } @org.junit.Test public void test() throws IOException { SqlSession sqlSession = getSqlSession(); EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); List<Emp> emps = mapper.selectByExample(null); System.out.println(emps); }
最后得到所有的对象信息:
到此这篇关于Mybatis逆向工程实现连接MySQL数据库的文章就介绍到这了,更多相关Mybatis连接MySQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!