Mybatis Generator 工具的使用
MyBatis Generator(MBG)是 MyBatis 官方提供的代码生成工具。MyBatis Generator工具可以根据数据库的表结构自动的帮助我们生成模型、接口与映射配置文件,它可以极大地 减少我们对代码的编写,提高开发效率
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="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/lanh" userId="root" password="123456">
</jdbcConnection>
<!-- 默认 false,把 JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为true 时把 JDBC DECIMAL 和 NUMERIC 类型解析为 java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成 POJO 类的位置 -->
<javaModelGenerator targetPackage="com.lanh.pojo" targetProject=".\src">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper 映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.lanh.mapper" targetProject=".\src">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper 接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.lanh.mapper" targetProject=".\src">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table schema="" tableName="users"/>
</context>
</generatorConfiguration>
运行主方法生成 POJO、接口与映射配置文件
public class GeneratorSqlmap {
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();
}
}
}
生成代码的结构介绍
模型类
Users 实体类。
Example 类
UsersExample 类封装了针对于 Users 实体类中所用属性的条件定义。它的作用是通过基于面向对象语法结构来给定操作数据库的条件
UsersMapper 接口
定义了对数据库 CRUD 操作的抽象方法。
映射配置文件
UsersMapper 接口的映射配置文件。
生成代码的使用
根据主键查询用户
public class SelectUsersByIdTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
Users users = usersMapper.selectByPrimaryKey(1);
System.out.println(users);
}
}
多条件查询 and
public class SelectUsersByNameAndSexTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
UsersExample usersExample = new UsersExample();
UsersExample.Criteria criteria = usersExample.createCriteria();
criteria.andUsernameEqualTo("lanh");
criteria.andUsersexEqualTo("male");
List<Users> list = usersMapper.selectByExample(usersExample);
list.forEach(System.out::println);
}
}
多条件查询 or
public class SelectUsersByNameOrSexTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
UsersExample usersExample = new UsersExample();
UsersExample.Criteria criteria = usersExample.createCriteria();
criteria.andUsernameEqualTo("lanh");
UsersExample.Criteria criteria1 = usersExample.createCriteria();
criteria1.andUsersexEqualTo("male");
usersExample.or(criteria1);
List<Users> list = usersMapper.selectByExample(usersExample);
list.forEach(System.out::println);
}
}
添加用户
public class InsertUsersTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
Users users = new Users();
users.setUsername("kevin");
users.setUsersex("male");
usersMapper.insertSelective(users);
sqlSession.commit();
}
}
更新用户
public class UpdateUsersTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
Users users = new Users();
users.setUsername("zhangsanfeng");
users.setUsersex("male");
users.setUserid(25);
usersMapper.updateByPrimaryKey(users);
sqlSession.commit();
}
}
删除用户
public class DeleteUsersByIdTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UsersMapper usersMapper = sqlSession.getMapper(UsersMapper.class);
usersMapper.deleteByPrimaryKey(25);
sqlSession.commit();
}
}