MyBatis的逆向工程
概述:MyBatis的逆向工程能自动帮开发者生成数据库表对应的 pojo实体文件,自动生成映射文件
自定生成表的各种(CRUD)的sql语句, 但是只能做单表操作,联合查询还得开发者自己动
逆向工程可以使用插件 也可以使用jar 这里给大家演示jar试下逆向工程
-
准备必要的jar
log4j-1.2.17.jar log4j日志包 mybatis-3.5.2.jar mybatis核心包 mybatis-generator-core-1.3.7.jar 逆向工程包 mysql-connector-java-5.1.36-bin.jar 数据库驱动包
-
创建一个java项目
1. 添加上面的jar 2. 添加配置文件 db.properties 数据库配置文件 generatorConfig.xml 逆向工程配置文件 log4j.properties 日志文件 mybatis-config.xml mybatis配置文件
generatorConfig 逆向工程文件详情:
<?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="test" targetRuntime="MyBatis3"> <!-- 注释构建 --> <commentGenerator> <!-- 去掉所有的注释 --> <property name="suppressAllComments" value="true"/> <property name="suppressDate" value="true"/> </commentGenerator> <!-- 数据库四要素 --> <jdbcConnection connectionURL="jdbc:mysql://localhost:3306/mybatis" driverClass="com.mysql.jdbc.Driver" password="root" userId="root" /> <!-- 实体类 : pojo targetPackage : 实体类生成后存放的包 targetProject : 存放的目录一般都放在 src下面 --> <javaModelGenerator targetPackage="cn.mybatis.pojo" targetProject="mybatis-generator/src" /> <!-- 映射文件 --> <sqlMapGenerator targetPackage="cn.mybatis.mapper" targetProject="mybatis-generator/src" /> <!-- 操作接口 type 生成映射的形式 ANNOTATEDMAPPER : 纯注解的,没有xml映射 XMLMAPPER : 生成的有xml映射文件 --> <javaClientGenerator type="XMLMAPPER" targetPackage="cn.mybatis.mapper" targetProject="mybatis-generator/src" /> <!-- 要生成对应表的配置 tableName : 数据库表名 //如果下面全部是true,mybatis直接可以使用纯面向对象开发 enableCountByExample : 是否生成查询总数的 Example enableDeleteByExample : 是否生成删除的 Example enableSelectByExample : 是否生成查询集合的 Example enableUpdateByExample : 是否生成修改的 Example --> <table tableName="user" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="true" enableUpdateByExample="false"></table> <table tableName="employee" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="true" enableUpdateByExample="false"></table> <table tableName="department" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="true" enableUpdateByExample="false"></table> </context> </generatorConfiguration>
-
写一个java程序 解析逆向工程配置文件
public class AppMain { public static void main(String[] args) throws Exception { List<String> warnings = new ArrayList<String>(); boolean overwrite = true; //指定 逆向工程配置文件 Reader reader = Resources.getResourceAsReader("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(reader); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); } }
4.测试逆向工程的代码:
package cn.mybatis.test;
import cn.mybatis.mapper.UserMapper;
import cn.mybatis.pojo.User;
import cn.mybatis.pojo.UserExample;
import cn.mybatis.utils.SqlSessionUitils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
public class UserMapperTest {
/**
* 添加 一个user
*/
@Test
public void testInsert(){
// 1. 创建 sqlSession对象
SqlSession session = SqlSessionUitils.getConn();
// 2. 创建userMapper 映射接口
UserMapper mapper = session.getMapper(UserMapper.class);
// 3. 执行usermapper 接口方法 insert
User u = new User();
u.setName("周芷若");
u.setPassword("1234");
u.setAge(30);
int row = mapper.insert(u);
System.out.println("受影响的行数 :" + row);
// 4.提交事务(MyBatis默认手动提交事务)
session.commit();
// 5.关闭session对象
session.close();
}
@Test
public void testUpdate(){
// 1. 创建 sqlSession对象
SqlSession session = SqlSessionUitils.getConn();
// 2. 创建userMapper 映射接口
UserMapper mapper = session.getMapper(UserMapper.class);
// 3. 执行usermapper 接口方法 updateByPrimaryKey
User u = new User();
u.setName("周芷若");
u.setPassword("1234");
u.setAge(30);
u.setId(15);
int row = mapper.updateByPrimaryKey(u);
System.out.println("受影响的行数 :" + row);
// 4.提交事务(MyBatis默认手动提交事务)
session.commit();
// 5.关闭session对象
session.close();
}
@Test
public void testDelete(){
// 1. 创建 sqlSession对象
SqlSession session = SqlSessionUitils.getConn();
// 2. 创建userMapper 映射接口
UserMapper mapper = session.getMapper(UserMapper.class);
// 3. 执行usermapper 接口方法 delete
int row = mapper.deleteByPrimaryKey(20);
System.out.println("受影响的行数 :" + row);
// 4.提交事务(MyBatis默认手动提交事务)
session.commit();
// 5.关闭session对象
session.close();
}
@Test
public void testSelectByPrimaryKey(){
// 1. 创建 sqlSession对象
SqlSession session = SqlSessionUitils.getConn();
// 2. 创建userMapper 映射接口
UserMapper mapper = session.getMapper(UserMapper.class);
// 3. 执行usermapper 接口方法 selectByPrimaryKey
User user = mapper.selectByPrimaryKey(19);
System.out.println(user);
// 4.提交事务(MyBatis默认手动提交事务)
session.commit();
// 5.关闭session对象
session.close();
}
/**
* 通过条件查询1
* @throws Exception
*/
@Test
public void testSelectList() throws Exception {
// 1. 创建 sqlSession对象
SqlSession session = SqlSessionUitils.getConn();
// 2. 创建userMapper 映射接口
UserMapper mapper = session.getMapper(UserMapper.class);
// 3. 执行usermapper 接口方法
// 创建条件对象
UserExample example = new UserExample();
// 多个条件之间用and 关系 直接在Criteria 后面追加新条件
// 创建条件限制对象
UserExample.Criteria criteria = example.createCriteria();
//设置条件
// 模糊查询
criteria.andNameLike("%周%");
// 多个条件 直接 在 criteria 追加
// age 小于等于 35
criteria.andAgeLessThanOrEqualTo(35);
List<User> users = mapper.selectByExample(example);
System.out.println(users);
// 4.提交事务(MyBatis默认手动提交事务)
session.commit();
// 5.关闭session对象
session.close();
}
@Test
public void testSelectList2() throws Exception {
// 1. 创建 sqlSession对象
SqlSession session = SqlSessionUitils.getConn();
// 2. 创建userMapper 映射接口
UserMapper mapper = session.getMapper(UserMapper.class);
// 3. 执行usermapper 接口方法
// 创建条件对象
UserExample example = new UserExample();
// 多个条件之间或者关系 必须创建多个 Criteria 限制对象 使用or方法
// 创建条件限制对象
// 第一个条件
UserExample.Criteria criteria1 = example.createCriteria();
//设置条件
// 模糊查询
criteria1.andNameLike("%周%");
// 第二个条件
UserExample.Criteria criteria2 = example.createCriteria();
// 等于30
criteria2.andAgeEqualTo(30);
example.or(criteria2);
List<User> users = mapper.selectByExample(example);
System.out.println(users);
// 4.提交事务(MyBatis默认手动提交事务)
session.commit();
// 5.关闭session对象
session.close();
}
}
andAgeEqualTo(30);
example.or(criteria2);
List<User> users = mapper.selectByExample(example);
System.out.println(users);
// 4.提交事务(MyBatis默认手动提交事务)
session.commit();
// 5.关闭session对象
session.close();
}
}