查看“进阶:逆向工具”的源代码
←
进阶:逆向工具
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Mybatis]] __TOC__ == 关于 == 由数据库生成java代码,使用官方网站的mapper自动生成工具'''mybatis-generator-core-1.3.2''',来生成:po类和mapper映射文件、mapper接口。 <pre> Running MyBatis Generator MyBatis Generator (MBG) can be run in the following ways: 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 also: 6、As a Eclipse Plugin </pre> 建议使用java程序方式,不依赖开发工具。 == 下载 == (Github项目下载:[https://github.com/mybatis/generator Github:mybatis/generator]) (另外,IDE可能会有插件工具,可以进行代码生成) == 使用 == === mapper生成配置文件 === 在'''generatorConfig.xml'''中配置mapper生成的详细信息,注意改下几点: # 添加要生成的数据库表 # po文件所在包路径 # mapper文件所在包路径 配置文件如下: <syntaxhighlight lang="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="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root" password="mysql"> </jdbcConnection> <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" userId="yycg" password="yycg"> </jdbcConnection> --> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO类的位置 --> <javaModelGenerator targetPackage="cn.itcast.ssm.po" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="cn.itcast.ssm.mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="cn.itcast.ssm.mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定数据库表 --> <table tableName="items"></table> <table tableName="orders"></table> <table tableName="orderdetail"></table> <table tableName="user"></table> </context> </generatorConfiguration> </syntaxhighlight> === 执行生成程序 === <syntaxhighlight lang="java"> Public void generator() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; File configFile = new File("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); } Public static void main(String[] args) throws Exception { try { GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap(); generatorSqlmap.generator(); } catch (Exception e) { e.printStackTrace(); } } </syntaxhighlight> mybatis-generator生成的mapper.xml和mapper.java和po: : [[File:mybatis-generator生成的mapper.xml和mapper.java和po.png|300px]] === 使用生成的代码 === * 将生成工程中所生成的代码拷贝到自己的工程中。 测试ItemsMapper中的方法: <syntaxhighlight lang="java"> public class ItemsMapperTest { //自定义条件查询 @Test public void testSelectByExample() { ItemsExample itemsExample = new ItemsExample(); //通过criteria构造查询条件 ItemsExample.Criteria criteria = itemsExample.createCriteria(); criteria.andNameEqualTo("笔记本3"); //可能返回多条记录 List<Items> list = itemsMapper.selectByExample(itemsExample); System.out.println(list); } //根据主键查询 @Test public void testSelectByPrimaryKey() { Items items = itemsMapper.selectByPrimaryKey(1); System.out.println(items); } //插入 @Test public void testInsert() { //构造 items对象 Items items = new Items(); items.setName("手机"); items.setPrice(999f); itemsMapper.insert(items); } //更新数据 @Test public void testUpdateByPrimaryKey() { //对所有字段进行更新,需要先查询出来再更新 Items items = itemsMapper.selectByPrimaryKey(1); items.setName("水杯"); itemsMapper.updateByPrimaryKey(items); //如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新 //itemsMapper.updateByPrimaryKeySelective(record); } } </syntaxhighlight> == 注意 == === Mapper文件内容不覆盖而是追加 === XXXMapper.xml文件已经存在时,如果进行重新生成则mapper.xml文件内容'''不被覆盖而是进行内容追加''',结果导致mybatis解析失败。<br/> <br/> 解决方法:删除原来已经生成的mapper.xml文件再进行生成。 * 只存在于映射文件,Mybatis自动生成的po及mapper.java文件不是内容而是直接覆盖没有此问题。 === Table schema问题 === 下边是关于针对oracle数据库表生成代码的schema问题:<br/> : ('''Schma'''即数据库模式,oracle中一个用户对应一个schema,可以理解为用户就是schema。) : 当Oralce数据库存在多个schema可以访问相同的表名时,使用mybatis生成该表的mapper.xml将会出现mapper.xml内容重复的问题,结果导致mybatis解析错误。 <br/> 解决方法:在table中填写schema,如下: : <syntaxhighlight lang="xml"> <table schema="XXXX" tableName=" " > </syntaxhighlight> :* XXXX即为一个schema的名称,生成后将mapper.xml的schema前缀批量去掉,如果不去掉当oracle用户变更了sql语句将查询失败。 :*快捷操作方式:mapper.xml文件中批量替换:“from XXXX.”为空 Oracle查询对象的schema可从dba_objects中查询,如下: <syntaxhighlight lang="sql"> select * from dba_objects </syntaxhighlight>
返回至“
进阶:逆向工具
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息