MyBatis 逆向工程

Theodosia ·
更新时间:2024-11-10
· 961 次阅读

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 开始走代码 MyBatis 逆向工程核心配置文件 : mybatis-generator.xml
执行 MyBatis 逆向工程 代码 MbgRunner.javapublic class MbgRunner { public static void main(String[] args) throws InvalidConfigurationException, IOException, XMLParserException, SQLException, InterruptedException { List warnings = new ArrayList(); 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); } } 注意 : 以上操作不会生成 Javabean 中的 toString() 及 有参 和 无参构造方法.需要手动生成 测试一下是否可用 先准备好 MyBatis 的核心配置文件 mybatis-config.xml 生成的 BookMapper.java接口 [ 简单的CRUD ] /** * 标配版 只有 CRUD */ public interface BookMapper { int deleteByPrimaryKey(Integer id); int insert(Book record); Book selectByPrimaryKey(Integer id); List selectAll(); int updateByPrimaryKey(Book record); } 生成的 BookMapper.java接口 大部分的条件查询都有 [ 豪华版 ] 其中每个 Javabean 都会对应有一个查询条件类,类似于像User 会对应 UserExample 这个条件类, 其中对每个字段都进行了条件的封装 : 具体使用方法见 : 文档 int countByExample(BookExample example); int deleteByExample(BookExample example); int deleteByPrimaryKey(Integer id); int insert(Book record); int insertSelective(Book record); List 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); 测试类 BookMapperTest.java public class BookMapperTest { static SqlSessionFactory sqlSessionFactory; @BeforeClass public static void init() throws IOException { sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); } @Test public void deleteByPrimaryKey() { SqlSession sqlSession = sqlSessionFactory.openSession(); try { BookMapper mapper = sqlSession.getMapper(BookMapper.class); mapper.deleteByPrimaryKey(1); sqlSession.commit(); }finally { sqlSession.close(); } } @Test public 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(); } } @Test public void selectByPrimaryKey() { SqlSession sqlSession = sqlSessionFactory.openSession(); try { BookMapper mapper = sqlSession.getMapper(BookMapper.class); System.out.println(mapper.selectByPrimaryKey(8)); }finally { sqlSession.close(); } } @Test public void selectAll() { SqlSession sqlSession = sqlSessionFactory.openSession(); try { BookMapper mapper = sqlSession.getMapper(BookMapper.class); mapper.selectAll().forEach(System.out::println); }finally { sqlSession.close(); } } @Test public 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,欢迎大家加入。

蓝山. 原创文章 36获赞 146访问量 2万+ 关注 私信 展开阅读全文
作者:蓝山.



逆向工程 工程 mybatis

需要 登录 后方可回复, 如果你还没有账号请 注册新账号