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 ( ?, ?, ?, ? )
