通过创建好的表来生成实体类和映射文件
源码案例在github上
最主要的是该配置文件,放在项目的一级目录下面
<?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连接jar包:绝对路径地址;-->,就是本地的jar位置
<classPathEntry location="E:\\maven\\repository\\mysql\\mysql-connector-java\\5.1.40\\mysql-connector-java-5.1.40.jar"/>
<context id="context1" >
<commentGenerator >
<property name="javaFileEncoding" value="UTF-8"/>
<property name="suppressAllComments" value="false" />
<property name="suppressDate" value="true"/>
</commentGenerator>
<!--2.选择数据库的driverClass与connectionURL-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/gww?useUnicode=true&useSSL=false&characterEncoding=UTF-8" userId="root" password="123456" />
<!--3.生成实体类 指定包名 以及生成的绝对地址 (可以自定义地址,但是路径不存在会自动创建 ) -->
<javaModelGenerator targetPackage="com.sz.entity" targetProject="E:\projects\ssm\逆向工程\ssm_demo1\src\main\java" >
<property name="enableSubPackages" value="true"/> <!-- 如果true,MBG会根据catalog和schema来生成子包。如果false就会直接用targetPackage属性。默认为false -->
<property name="trimStrings" value="true" /> <!-- 当数据库字段使用CHAR时,建议在<javaModelGenerator>中设 -->
</javaModelGenerator>
<!--4.生成Mapper映射文件地 址 -->
<sqlMapGenerator targetPackage="com.sz.mapper" targetProject="E:\projects\ssm\逆向工程\ssm_demo1\src\main\resources" />
<!--5.生成Mapper 的接口 可以配置 type="XMLMAPPER"生成xml的dao实现 -->
<javaClientGenerator targetPackage="com.sz.mapper" targetProject="E:\projects\ssm\逆向工程\ssm_demo1\src\main\java" type="XMLMAPPER" />
<!--6.配置哪些 表需要自动生成--> 想生成多个实体类,就需要写几个这样的标签,前提是数据库要有对应的表
<table tableName="users" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true"
enableSelectByExample="true" selectByExampleQueryId="true" />
</context>
</generatorConfiguration>
配置了该文件后,需要配置一个maven配置,eid里面配置
mybatis-generator:generate -e,配置好后,启动就会自动生成实体类和映射文件
注意,这里的密码,用户名更applicationContext.xml是不冲突的
还需要自动生成代码的jar
<!--自动生成代码工具-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>3.7.5</version>
</dependency> <!-- https://mvnrepository.com/artifact/com.github.jsqlparser/jsqlparser -->
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>1.1</version>
</dependency>
<!--mybatis 代码自动生成工具-->插件
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>generatorConfig.xml</configurationFile> 就是生成代码的核心文件
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
spring的配置文件中,加入分页的插件
<!--配置SqlSessionFactory工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!--配置实体类映射文件-->
<property name="mapperLocations" value="classpath*:com/sz/mapper/*.xml"></property>
<!--别名-->
<property name="typeAliasesPackage" value="com.sz.entity"></property>
<!--配置分页插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=mysql
</value>
</property>
</bean>
</array>
</property>
</bean>
<!--10.配置接口包扫描路径; --> <!--就无需给mqpper注解了--> 这是另一种,也可以选择给mapper添加注解的方式
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.sz.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
spring mvc没有改变,跟标准的一样
实体类生成后,会携带一个该类独有的实体Example类 ,该类是该实体类的条件类,是为了方便增删改查的条件处理
mapper接口对应着resources的映射文件,我们也可以自己再进行方法的扩展,
简单增删改查
模糊查询,并且id在10到15范围的
@Override
public List<Users> ByUsersName(String name) {
UsersExample usersExample=new UsersExample();
usersExample.createCriteria()
.andNameLike("%"+name+"%")
.andIdBetween(10,15);
return usersMapper.selectByExample(usersExample);
}
@Override
public int update(Users users) {
UsersExample usersExample=new UsersExample();
usersExample.createCriteria()
.andIdEqualTo(users.getId());
return usersMapper.updateByExample(users, usersExample);
}
@Override
public int delete(int id) {
UsersExample usersExample=new UsersExample();
usersExample.createCriteria()
.andIdEqualTo(id);
return usersMapper.deleteByExample(usersExample);
}
@Override
public int save(Users users) {
// return usersMapper.insert(users); //不会保存值为null的值
return usersMapper.insertSelective(users); //相反,带有Selective
}
@Override
public List<Users> orderByUsers() {
UsersExample usersExample=new UsersExample();
usersExample.setOrderByClause("id desc"); //根据id 倒序
System.out.println("是否去重:"+usersExample.isDistinct());//默认不去重
return usersMapper.selectByExample(usersExample);
}
使用条件的增删改查都是单表操作的,想要多表,需要自定义方法,然后映射到文件里
分页
自定义一个分页类
public class PageUtil<T> {
private long total; //总记录数
private List<T> rows; //当前页的数据
private int pageSize; //每页的记录数
private int pageTotals; //总页数
private int pageIndex; //当前页
生成全参和无参构造
使用
@RequestMapping("/pageUsers/{id}/{row}")
public List<Users> pageUsers(@PathVariable(name = "id") int id,@PathVariable(name = "row") int row){
PageHelper.startPage(id, row);
List<Users> users = userService.pageUsers();
Page<Users> pages=(Page<Users>)users;
PageUtil<Users> pageUtil= new PageUtil
(pages.getTotal(),
pages.getResult(),
pages.getPageSize(),
pages.getPages(),
pages.getPageNum());
return pages.getResult();
}
id是第几页,row是一页的记录数,