文档章节

MyBatis的逆向工程

Bruce_520
 Bruce_520
发布于 2017/05/04 22:01
字数 1073
阅读 66
收藏 0

1. 什么是逆向工程?

    mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po..)企业实际开发中,常用的逆向工程方式:由于数据库的表生成java代码。

2. 准备工作

建议使用java程序方式,不依赖开发工具

3. 逆向工程步骤

3.1 准备逆向工程

3.2 配置generatorConfig.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="oracle.jdbc.OracleDriver"
			connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:shop" userId="mybatis" password="mybatis">
		</jdbcConnection>

		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把 JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:【生成实体类的位置】 -->
		<javaModelGenerator targetPackage="cn.mybatis.entity" targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
		
		<!-- targetProject:【mapper映射文件生成的位置】 -->
		<sqlMapGenerator targetPackage="cn.mybatis.dao" targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		
		<!-- targetPackage:【mapper接口生成的位置】 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="cn.mybatis.dao" 
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>
		
		<!-- 【指定要逆向生成的 数据库表】 -->
		<table tableName="SINGER">
		   <!-- Height类型生成的时候生成为Double -->
		   <columnOverride column="HEIGHT" javaType="java.lang.Double" />
		</table>

	</context>
</generatorConfiguration>

3.3  刷新项目生成代码

4. 使用逆向生成文件

4.1 接口实现类


package cn.mybatis.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import cn.mybatis.dao.SingerDao;
import cn.mybatis.entity.Singer;
import cn.mybatis.entity.SingerExample;
import cn.mybatis.util.MyBatisUtil;

public class SingerDaoImpl implements SingerDao{

	/*
	 * 1.根据条件(任意)查询数量
	 */
	public int countByExample(SingerExample example) {
		int count=0;
		SqlSession session=null;
		try {
			session=MyBatisUtil.getSession();
			count= session.selectOne("cn.mybatis.dao.SingerDao.countByExample", example);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MyBatisUtil.closeSession();
		}
		return count;
	}

	@Override
	public int deleteByExample(SingerExample example) {
		int count=0;
		SqlSession session=null;
		try {
			session=MyBatisUtil.getSession();
			count= session.delete("cn.mybatis.dao.SingerDao.deleteByExample", example);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MyBatisUtil.closeSession();
		}
		return count;
	}

	@Override
	public int deleteByPrimaryKey(Integer id) {
		int count=0;
		SqlSession session=null;
		try {
			session=MyBatisUtil.getSession();
			count= session.delete("cn.mybatis.dao.SingerDao.deleteByPrimaryKey", id);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MyBatisUtil.closeSession();
		}
		return count;
	}

	@Override
	public int insert(Singer record) {
		int count=0;
		SqlSession session=null;
		try {
			session=MyBatisUtil.getSession();
			count= session.insert("cn.mybatis.dao.SingerDao.insert", record);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MyBatisUtil.closeSession();
		}
		return count;
	}

	@Override
	public int insertSelective(Singer record) {
		int count=0;
		SqlSession session=null;
		try {
			session=MyBatisUtil.getSession();
			count= session.insert("cn.mybatis.dao.SingerDao.insertSelective", record);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MyBatisUtil.closeSession();
		}
		return count;
	}

	@Override
	public List<Singer> selectByExample(SingerExample example) {
		SqlSession session=null;
		try {
			session=MyBatisUtil.getSession();
			return session.selectList("cn.mybatis.dao.SingerDao.selectByExample", example);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MyBatisUtil.closeSession();
		}
		return null;
	}

	@Override
	public Singer selectByPrimaryKey(Integer id) {
		SqlSession session=null;
		try {
			session=MyBatisUtil.getSession();
			return session.selectOne("cn.mybatis.dao.SingerDao.selectByPrimaryKey", id);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MyBatisUtil.closeSession();
		}
		return null;
	}

	@Override
	public int updateByExampleSelective(Singer record, SingerExample example) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int updateByExample(Singer record, SingerExample example) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int updateByPrimaryKeySelective(Singer record) {
		int count=0;
		SqlSession session=null;
		try {
			session=MyBatisUtil.getSession();
			count= session.update("cn.mybatis.dao.SingerDao.updateByPrimaryKeySelective", record);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MyBatisUtil.closeSession();
		}
		return count;
	}

	@Override
	public int updateByPrimaryKey(Singer record) {
		int count=0;
		SqlSession session=null;
		try {
			session=MyBatisUtil.getSession();
			count= session.update("cn.mybatis.dao.SingerDao.updateByPrimaryKey", record);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			MyBatisUtil.closeSession();
		}
		return count;
	}

}

4.2  测试类


package cn.mybatis.test;

import java.util.List;

import org.junit.Test;

import cn.mybatis.dao.SingerDao;
import cn.mybatis.dao.impl.SingerDaoImpl;
import cn.mybatis.entity.Singer;
import cn.mybatis.entity.SingerExample;
import cn.mybatis.entity.SingerExample.Criteria;

public class TestAuto {

	SingerDao dao = new SingerDaoImpl();

	/*
	 * 作用:根据条件查询数目
	 */
	@Test
	public void countByExample() {
		SingerExample example = new SingerExample();

		Criteria criteria = example.createCriteria();// 查询条件
		criteria.andNameLike("%嘿%");
		criteria.andAgeGreaterThan(35);

		int count = dao.countByExample(example);
		System.out.println(count);
	}

	/*
	 * 作用:根据条件删除
	 */
	@Test
	public void deleteByExample() {
		SingerExample example = new SingerExample();

		Criteria criteria = example.createCriteria(); // 条件
		criteria.andAgeLessThan(35);

		int count = dao.deleteByExample(example);
		System.out.println(count);
	}

	/*
	 * 作用:再根据主键删除
	 */
	@Test
	public void deleteByPrimaryKey() {
		int count = dao.deleteByPrimaryKey(1);
		System.out.println(count);
	}

	/*
	 * 作用:新增对象到数据库,会新增所有的字段,如果属性没有传值 新增为null insert into SINGER (ID, NAME, AGE,
	 * HEIGHT, BIRTHDAY, CD, ADDRESS) values (seq_siongrid.NEXTVAL, ?, ?, ?, ?,
	 * ?, ?)
	 */
	@Test
	public void insert() {
		Singer s = new Singer();
		s.setName("德华");
		s.setAddress("香港");

		int count = dao.insert(s);
		System.out.println(count);
	}

	/*
	 * 作用:新增对象到数据库,会新增所有的字段,如果属性没有传值 该字段就不新增 insert into SINGER ( ID, NAME,
	 * ADDRESS ) values ( seq_siongrid.NEXTVAL, ?, ? )
	 */
	@Test
	public void insertSelective() {

		Singer s = new Singer();
		s.setName("德华");
		s.setAddress("香港");

		int count = dao.insertSelective(s);
		System.out.println(count);
	}

	/*
	 * 作用:根据条件查询列表
	 */
	@Test
	public void selectByExample() {
		SingerExample example = new SingerExample();

		Criteria criteria = example.createCriteria(); // 条件
		criteria.andAgeEqualTo(35);
		criteria.andAgeIsNotNull();

		List<Singer> list = dao.selectByExample(example);
		for (Singer singer : list) {
			System.out.println(singer);
		}
	}
	
	@Test
	public void selectByPrimaryKey(){
		Singer singer = dao.selectByPrimaryKey(12);
		System.out.println(singer);
	}
	
	/*
	 * 作用:update SINGER SET NAME = ?, ADDRESS = ? where ID = ?
	 */
	@Test
	public void updateByPrimaryKeySelective(){
		Singer s = new Singer();
		s.setId(5);
		s.setName("德华");
		s.setAddress("香港");
		
		int count = dao.updateByPrimaryKeySelective(s);
		System.out.println(count);
	}
	
	/*
	 * 作用://根据主键更新指定字段
	 */
	@Test
	public void updateByPrimaryKey(){
		Singer s = new Singer();
		s.setId(6);
		s.setName("德华");
		s.setAddress("香港");
		
		int count = dao.updateByPrimaryKey(s);
		System.out.println(count);
	}
	
	

}

 

© 著作权归作者所有

Bruce_520
粉丝 0
博文 1
码字总数 1073
作品 0
私信 提问
Mybatis的逆向工程简单的使用

参考资料: 官方文档:http://www.mybatis.org/generator/index.html 使用方法: 1.下载使用mybatis逆向工程所需的jar包。 ①自己百度下载mybatis-generator-core,版本为1.3.5。 ②如果使用...

帅得拖网速
2016/11/19
183
0
【MyBatis框架】mybatis逆向工程自动生成代码

逆向工程 1.什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po..) 企业实际开发中,常...

Mysoft
2015/09/21
222
0
Mybatis应用学习(6)——Spring框架整合与逆向工程

与Spring框架整合 1. 整合思路: 需要spring通过单例方式管理SqlSessionFactory。 spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)...

江左煤郎
2018/11/27
0
0
回顾一下MyBatis逆向工程——自动生成代码

⭐⭐⭐⭐⭐最最最最最重要的事情: 我自己总结的Java学习的系统知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailclimb/Java-Guide 我...

snailclimb
2018/07/12
0
0
spring和mybatis整合及逆向工程

思路 需要spring通过单例方式管理sqlSessionFactory spring和mybatis整合生成代理对象,使用sqlSessionFactory创建SqlSession。(spring和mybtis整合自动完成) 持久层的mapper都需要由sprin...

lambdaλ
2018/08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Django笔记-3-模型-20190526

简介 django为各种数据库提供了很好的支持,django对这些数据库提供了统一的调用API;可以根据不同的也无需求选择不同的数据库; 配置数据库 在setting.py文件中配置数据库 DATABASES = { ...

Frank1126lin
23分钟前
0
0
OSChina 周日乱弹 —— 程序员做噩梦

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 手嶌葵《Kiss The Girl》 《Kiss The Girl》- 手嶌葵 手机党少年们想听歌,请使劲儿戳(这里) @Sharon啊 :今天...

小小编辑
57分钟前
134
9
Another app is currently holding the yum lock; waiting for it to exit...

Another app is currently holding the yum lock; waiting for it to exit... The other application is: PackageKit Memory : 153 M RSS (266 MB VSZ) Started: Thu Jul 12 00:03......

圣洁之子
今天
2
0
FastDateFormat 研究

FastDateFormat 对缓存的利用,其实就是用ConcurrentHashMap 做了一个map类型的缓存 public F getInstance(final String pattern, TimeZone timeZone, Locale locale) { Validate......

暗中观察
今天
3
0
Android双向绑定原理简述

Android双向绑定原理简述 双向绑定涉及两个部分,即将业务状态的变化传递给UI,以及将用户输入信息传递给业务模型。 首先我们来看业务状态是如何传递给UI的。开启dataBinding后,编译器为布局...

tommwq
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部