Skip to content

11.MybatisGenerator

逆向工程: 从数据库生成代码(实体类、Mapper.java Mapper.xml XXXExample.java )

使用Mybatis-Generator 下载地址:https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core/1.4.2

  • 使用Mybaits-Generator
  • 编写xml
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>

  <!--依赖的类路径 
	1 mysql-connector-java-5.1.46 mysql驱动
  -->
  <classPathEntry location="mysql-connector-java-5.1.46.jar" />
  
  
  
  <!-- context 执行的环境 
		id :通过id 区分不同的环境名字
		targetRuntime :指定生成的类型
		http://mybatis.org/generator/quickstart.html
  -->
  <context id="DB2Tables" targetRuntime="MyBatis3">
		
	<!-- JavaBean 实现 序列化 接口 -->
    <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
	
	<!-- 生成toString方法 -->
    <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
	
	
	<!-- 开启支持内存分页   可生成 支持内存分布的方法及参数   -->
   <!--  <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin" /> -->
	
	<!-- 连接数据库的方式-->
	
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"  connectionURL="jdbc:mysql://localhost:3306/his?useSSL=false"
                     userId="root"   password="root">
    </jdbcConnection>
	

	
	<!-- 设置属性转换器,设置是否使用BigDecimals false    numeric:BigDecimal  double Double -->
    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>
	
	
	
	<!-- 设置生成Java、Mapper、Mapperxml的包名、
		targetPackage :包名
		targetProject :生成后的代码方式在什么位置 -->
	
	<!-- 1 实体类  User、Role、Dept(Example) -->
    <javaModelGenerator targetPackage="com.neuedu.mybatis.entity" targetProject=".\src\main\java">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

	
	<!--2 Mapper.xml   mapper 就是dao概念,文件 -->
    <sqlMapGenerator targetPackage="com.neuedu.mybatis.mapper"  targetProject=".\src\main\resources">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

	<!--3 Mapper.java -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.neuedu.mybatis.mapper"  targetProject=".\src\main\java">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

	
	<!--3  待处理 的表 -->

  <table tableName="register" 		     domainObjectName="Register">  	 </table>

  

  </context>
  
  
</generatorConfiguration>
  • 使用命令行执行 java -jar xxxx.jar -configfile config.xml --overwrite

Mapper.java

生成了11个方法

# 根据条件删除数据 
int deleteByExample(RegisterExample example);
# 根据主键删除数据 
int deleteByPrimaryKey(Integer registId);

#根据数据插入,全量字段
int insert(Register record);
# 根据提供的字段进行插入(只插入有值的字段)
int insertSelective(Register record);

# 根据条件查询总条数
long countByExample(RegisterExample example);
# 根据条件查询数据
List<Register> selectByExample(RegisterExample example);
# 根据主键查询单条数据
Register selectByPrimaryKey(Integer registId);
 
#根据条件跟新多条  仅更新 (参数属性中)有值的字段
int updateByExampleSelective(@Param("record") Register record, @Param("example") RegisterExample example);
#根据条件跟新多条
int updateByExample(@Param("record") Register record, @Param("example") RegisterExample example);
  
//根据主键更新  仅更新 (参数属性中)有值的字段
int updateByPrimaryKeySelective(Register record);
//根据主键更新
int updateByPrimaryKey(Register record);

}

11.1 批量查询selectByExample

​ 根据条件动态查询,需要构造Example

java
UploadFilesExample example = new UploadFilesExample();
UploadFilesExample.Criteria c = example.createCriteria();

Criteria的方法

java
c.andIdEqualTo(17);  					//id = ?
c.andIdGreaterThan(6); 					// id >?
c.andIdGreaterThanOrEqualTo(6);			// id>=?
c.andSizeIsNull();						// and size is null
c.andSizeBetween(500,600);				// size between ? and ?
c.andOriginNameLike("%3%"); 			// origin_name like ?

11.1.2 单元测试

java
/**
     * 批量查询
     */
    @Test
    public void selectByExample() {

        SqlSession session = sqlSessionFactory.openSession();
        UploadFilesMapper mapper = session.getMapper(UploadFilesMapper.class);


        UploadFilesExample example = new UploadFilesExample();

        // select * from table where   ( Criteria  )   and/or (  Criteria )
        UploadFilesExample.Criteria c = example.createCriteria();

        //andXXXXEqualTo
//        c.andIdEqualTo(17);  id = ?
//        c.andIdGreaterThan(6); // id >?
//        c.andIdGreaterThanOrEqualTo(6);// id>=?
//
//        c.andSizeIsNull();// and size is null
//        c.andSizeBetween(500,600);// size between ? and ?

        c.andOriginNameLike("%3%"); // origin_name like ?


        List<UploadFiles> list = mapper.selectByExample(example);
        for (UploadFiles uploadFiles : list) {
            System.out.println(uploadFiles);
        }
        session.close();
    }

11.2 根据主键查询 selectByPrimaryKey

java
@Test
public void selectByPrimaryKey() {
    SqlSession session = sqlSessionFactory.openSession();
    UploadFilesMapper mapper = session.getMapper(UploadFilesMapper.class);
    UploadFiles uploadFiles = mapper.selectByPrimaryKey(17);

    System.out.println(uploadFiles);
    session.close();

}

sql语句如下:

sql
select id, origin_name, path, upload_time, size, ip from upload_files where id = ?

11.3 全量字段插入 insert

需要所有字段都提供值,如果没有提供插入的值,则插入为null,会覆盖字段的默认值

java
@Test
    public void insert() {

        SqlSession session = sqlSessionFactory.openSession();
        UploadFilesMapper mapper = session.getMapper(UploadFilesMapper.class);


        UploadFiles uploadFiles = new UploadFiles();
        uploadFiles.setId(26);
        uploadFiles.setOriginName("aaaa.png");
        uploadFiles.setPath("aaaaaaaaaaaa.png");
        uploadFiles.setSize(10000);

        
        int count  = mapper.insert(uploadFiles);

        System.out.println("count = " + count);

        session.commit();
        session.close();

    }

sql语句如下:

sql
insert into upload_files (id, origin_name, path, upload_time, size, ip ) values (?, ?, ?, ?, ?, ? )

11.4 选择性插入 insertSelective

据提供的字段,生成插入的sql ,不会覆盖没有插入字段的 默认值

java
@Test
    public void insertSelective() {

        SqlSession session = sqlSessionFactory.openSession();
        UploadFilesMapper mapper = session.getMapper(UploadFilesMapper.class);


        UploadFiles uploadFiles = new UploadFiles();
        uploadFiles.setId(27);
        uploadFiles.setOriginName("aaaa.png");
        uploadFiles.setPath("aaaaaaaaaaaa.png");
        uploadFiles.setSize(10000);



        int count  = mapper.insertSelective(uploadFiles);

        System.out.println("count = " + count);

        session.commit();
        session.close();
    }

sql语句如下:

sql
insert into upload_files ( id, origin_name, path, size ) values ( ?, ?, ?, ? )

Released under the MIT License.