MyBatis 逆向工程

MyBatis

是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

MyBatis Generator简介

MyBatis生成器(MBG)是MyBatis MyBatis 和iBATIS的代码生成器。它将为MyBatis的所有版本以及版本2.2.0之后的iBATIS生成代码。它将对一个(或多个)数据库表进行内部检查,并将生成可用于访问表的工件。这减轻了设置对象和配置文件以与数据库表进行交互的麻烦。MBG试图对简单CRUD(创建,检索,更新,删除)的大部分数据库操作产生重大影响。您仍将需要手工编写SQL和对象代码以进行联接查询或存储过程。

MyBatis Generator将生成:

与表结构匹配的Java POJO。这可能包括:

  • 一个与表的主键匹配的类(如果有主键)
  • 一个与表的非主键字段匹配的类(BLOB字段除外)
  • 一个包含表的BLOB字段的类(如果表具有BLOB字段)
  • 一个启用动态选择,更新和删除的类

这些类之间有适当的继承关系。请注意,可以将生成器配置为生成不同类型的POJO层次结构-例如,如果您愿意,可以选择为每个表生成单个域对象。

MyBatis / iBATIS兼容的SQL Map XML文件。MBG为配置中的每个表上的简单CRUD函数生成SQL。生成的SQL语句包括:

  • insert
  • update by primary key
  • update by example (using a dynamic where clause)
  • delete by primary key
  • delete by example (using a dynamic where clause)
  • select by primary key
  • select by example (using a dynamic where clause)
  • count by example

开始走代码

  1. MyBatis 逆向工程核心配置文件 : mybatis-generator.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><!--mybatis-generator.xmltargetRuntime 可以设置生成的版本MyBatis3Simple   标配版   只有 CRUDMyBatis3         豪华版   除了 CRUD 还有很多有用的查询方法--><context id="DB2Tables" targetRuntime="MyBatis3Simple"><!-- 去掉全部的注释 --><commentGenerator><property name="suppressAllComments" value="true" /></commentGenerator><!-- 修改数据库的连接属性 --><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/mybatis_mbg"userId="root"password="root"></jdbcConnection><javaTypeResolver ><property name="forceBigDecimals" value="false" /></javaTypeResolver><!--配置生成的 JavabeantargetPackage : Javabean 的包名targetProject : 生成在哪个项目目录下--><javaModelGenerator targetPackage="com.mybatis.pojo" targetProject=".\mybatis-mbg\src"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><!--配置生成的 : Mapper.xmltargetPackage : Javabean 的包名targetProject : 生成在哪个项目目录下--><sqlMapGenerator targetPackage="com.mybatis.mapper"  targetProject=".\mybatis-mbg\src"><property name="enableSubPackages" value="true" /></sqlMapGenerator><!--配置生成的 : Mapper 接口targetPackage : Mapper 接口的包名targetProject : 生成在哪个项目目录下--><javaClientGenerator type="XMLMAPPER" targetPackage="com.mybatis.mapper"  targetProject=".\mybatis-mbg\src"><property name="enableSubPackages" value="true" /></javaClientGenerator><!--配置对应的数据库表 tabletableName : 表名domainObjectName : 设置生成的类名--><table tableName="t_book" domainObjectName="Book" /><table tableName="t_user" domainObjectName="User" /></context>
</generatorConfiguration>
  1. 执行 MyBatis 逆向工程 代码 MbgRunner.java
public class MbgRunner {public static void main(String[] args) throws InvalidConfigurationException, IOException, XMLParserException, SQLException, InterruptedException {List<String> warnings = new ArrayList<String>();boolean overwrite = true;// mybatis-generator.xml 配置文件的路径File configFile = new File("mybatis-mbg/mybatis-generator.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);}
}
  1. 注意 : 以上操作不会生成 Javabean 中的 toString() 及 有参 和 无参构造方法.需要手动生成

测试一下是否可用

  1. 先准备好 MyBatis 的核心配置文件 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><!--通过配置包名的方式配置所有JavaBean的别名--><typeAliases><package name="com.mybatis.pojo"/></typeAliases><!-- 配置数据库连接数据库连接属性 --><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis_mbg"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 使用包名配置 [更简单] --><mappers><package name="com.mybatis.mapper"/></mappers>
</configuration>
  1. 生成的 BookMapper.java接口 [ 简单的CRUD ]
/*** 标配版 只有 CRUD */
public interface BookMapper {int deleteByPrimaryKey(Integer id);int insert(Book record);Book selectByPrimaryKey(Integer id);List<Book> selectAll();int updateByPrimaryKey(Book record);
}
  1. 生成的 BookMapper.java接口 大部分的条件查询都有 [ 豪华版 ]
  2. 其中每个 Javabean 都会对应有一个查询条件类,类似于像User 会对应 UserExample 这个条件类, 其中对每个字段都进行了条件的封装 : 具体使用方法见 : 文档
int countByExample(BookExample example);int deleteByExample(BookExample example);int deleteByPrimaryKey(Integer id);int insert(Book record);int insertSelective(Book record);List<Book> selectByExample(BookExample example);Book selectByPrimaryKey(Integer id);int updateByExampleSelective(@Param("record") Book record, @Param("example") BookExample example);int updateByExample(@Param("record") Book record, @Param("example") BookExample example);int updateByPrimaryKeySelective(Book record);int updateByPrimaryKey(Book record);
  1. 测试类 BookMapperTest.java
public class BookMapperTest {static SqlSessionFactory sqlSessionFactory;@BeforeClasspublic static void init() throws IOException {sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));}@Testpublic void deleteByPrimaryKey() {SqlSession sqlSession = sqlSessionFactory.openSession();try {BookMapper mapper = sqlSession.getMapper(BookMapper.class);mapper.deleteByPrimaryKey(1);sqlSession.commit();}finally {sqlSession.close();}}@Testpublic void insert() {SqlSession sqlSession = sqlSessionFactory.openSession();try {BookMapper mapper = sqlSession.getMapper(BookMapper.class);mapper.insert(new Book(null, "乔布斯传", "乔布斯", new BigDecimal(98), 1000, 100));sqlSession.commit();}finally {sqlSession.close();}}@Testpublic void selectByPrimaryKey() {SqlSession sqlSession = sqlSessionFactory.openSession();try {BookMapper mapper = sqlSession.getMapper(BookMapper.class);System.out.println(mapper.selectByPrimaryKey(8));}finally {sqlSession.close();}}@Testpublic void selectAll() {SqlSession sqlSession = sqlSessionFactory.openSession();try {BookMapper mapper = sqlSession.getMapper(BookMapper.class);mapper.selectAll().forEach(System.out::println);}finally {sqlSession.close();}}@Testpublic void updateByPrimaryKey() {SqlSession sqlSession = sqlSessionFactory.openSession();try {BookMapper mapper = sqlSession.getMapper(BookMapper.class);mapper.updateByPrimaryKey(new Book(8 , "滚雪球", "周某", new BigDecimal(68), 100, 80));sqlSession.commit();}finally {sqlSession.close();}}
}

如果文章对你有帮助记得点赞+关注哦!
QQ交流群:1101584918,欢迎大家加入。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部