文章目录
一、逆向工程
1、简介
mybaits需要程序员自己编写sql语句,
mybatis官方提供逆向工程,可以针 对数据库的表 自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po…)
2、使用步骤
代码生成
- 第一步:导入jar包,创建好放存放接口、mapper.xml、bean的包
- 第二步:编写 mbg.xml 逆向工程配置文件(配置文件以src同级)
- 第三步:运行官方提供的执行入口
代码使用
- 第一步:配置mybatis主配置文件,指定映射文件位置
- 第二步:编写mybatis入口代码
3、案例
第一步:jar及导入 及 创建相应包
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
第二步:mbg.xml配置文件
MyBatis Generator官网:http://mybatis.org/generator/
(看 MyBatis Generator官网 模板改就可以,相应的标签及属性 看官网)
mbg.xml 配置文件(指定好数据库、mapper接口、mapper.xml、bean、表等信息)
<?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>
<!--targetRuntime有多个取值,代表生成的接口方法的复杂度-->
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
<!--注释中去除日期注释-->
<property name="suppressDate" value="true"/>
<!--注释中添加数据库字段备注注释-->
<property name="addRemarkComments" value="true"/>
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis_damo1?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"
userId="root"
password="015718">
<!-- 放在重名问题导致生成重复的内容-->
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<!--选定java类型的解析器:使用默认的就可以 -->
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- javaBean 的生成策略 -->
<!--指定我们生成的代码指定目标工程和目标包-->
<!--
targetPackage:生成Bean类的位置
targetProject:目标工程(.\src包下)
-->
<javaModelGenerator targetPackage="com.zy.Bean" targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--映射文件的生成策略 -->
<!--
targetProject:mapper映射文件生成的位置
targetProject:目标工程(.\resource 包下)
-->
<sqlMapGenerator targetPackage="com.zy.Dao" targetProject=".\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--接口文件的生成策略 -->
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.zy.Dao" targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 指定要逆向生成哪些数据库的表 -->
<!--
tableName: 指明数据库表
domainObjectName:指明要生成对应JavaBean的名称
-->
<table tableName="user" domainObjectName="User" />
<!-- <table schema="" tableName="sys_user"></table>
<table schema="" tableName="sys_role"></table>
<table schema="" tableName="sys_permission"></table>
<table schema="" tableName="sys_user_role"></table>
<table schema="" tableName="sys_role_permission"></table> -->
<!-- 有些表的字段需要指定java类型
<table schema="" tableName="">
<columnOverride column="" javaType="" />
</table> -->
</context>
</generatorConfiguration>
第三步:运行MBG入口程序
MyBatis Generator官方提供了很多执行方案:
1、From the command prompt with an XML configuration 2、As an Ant task with an XML configuration 3、As a Maven Plugin 4、From another Java program with an XML configuration 5、From another Java program with a Java based configuration 6、As an Eclipse Feature
我们用第五种代码的方式:
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("mbg.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);
4、注意事项
- 注意逆向工程配置文件的位置,最好放在最外层,不放在resources下
- 在重新生成的时候,不会替代原来文件,会追加(最好把文件全删再重新生成)
- 在编写配置文件的时候,很多属性取值具体看官网
- 配置文件指定文件路径的时候,不要弄错
二、生成代码的使用
1、使用方式
当我们在mbg配置文件选择的是 mybatis3 的生成版本、会生成条件查询的方法
1、看生成的Bean文件: User 和 UserExample User 类是对应数据库的Bean UserExample类是进行封装条件的类 该类中有三个属性: String orderByClause; 排序的列 boolean distinct; 是否去重 List<Criteria> oredCriteria; 拼装的条件 该类还有一个内部类: Criteria类 声明条件的一个类 2、查看生成的接口中的方法 ----> 根据方法的名称可以判断出作用 传xxxExample的方法都是按条件查询 3、怎么使用复发的条件查询?? (1)xxxExample就是拼装查询条件的,当条件没有时按全部查询 (2)怎么进行条件的封装?? 创建一个xxxExample对象,在example.createCriteria()得到Criteria对象 调用Criteria对象的系列and方法(可根据知道字段进行拼接范围查询条件、模糊查询条件等等) 一个Criteria对象内部的条件为and关系 (3)怎么封装条件之间的and和or关系??? 在example.createCriteria()得到Criteria对象,在该对象拼接玩条件之后 example.or(criteria); 表示该条件以或的方式拼接 (一般声明两个Criteria对象)(第一个不用指明or)
2、案例
@Test
public void test2() throws Exception {
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("Config.xml")).openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//1、当传入的查询条件为null,表示没有条件,全部查询
//select id, username, birthday, sex, address from user
List<User> users = mapper.selectByExample(null);
//2、创建查询条件
// select id, username, birthday, sex, address from user WHERE ( address like ? and sex = ? )
UserExample example = new UserExample();
//进行条件拼接
UserExample.Criteria criteria = example.createCriteria();
//一个criteria中拼接的条件都是and (可以选择什么字段的范围查询、模糊查询等等)
criteria.andAddressLike("%山东%");
criteria.andSexEqualTo("男");
List<User> users1 = mapper.selectByExample(example);
//3、or
//select id, username, birthday, sex, address from user WHERE ( id = ? ) or( id = ? )
UserExample example1 = new UserExample();
UserExample.Criteria criteria1 = example1.createCriteria();
criteria1.andIdEqualTo(41);
UserExample.Criteria criteria2 = example1.createCriteria();
criteria2.andIdEqualTo(42);
example1.or(criteria2);
List<User> users2 = mapper.selectByExample(example1);
for (User i:users2)
System.out.println(i.toString());
}