是一款优秀的持久层框架,它支持自定义 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.java
public 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,欢迎大家加入。