一、自动生成代码
1、maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mybatis 自动生成插件-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
mybatis代码生成插件
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<!-- 生成代码的配置文件-->
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml
</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
2、些许配置 application.yml
这里注意自己的数据库链接驱动,版本不同,配置会稍有不同,
spring:
# datasource:
# driverClassName: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/mfgw?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
# username: root
# password: root
#mysql-connector-java 6及以上
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mfgw?useUnicode=true&characterEncoding=utf8
username: root
password: root
#mysql-connector-java 5
# MyBatis
mybatis:
# 搜索指定包别名
typeAliasesPackage: com.manful.mfgw
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath:mapping/*Mapper.xml
# PageHelper
pagehelper:
#分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:
#oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
helperDialect: mysql
#分页参数合理化 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
reasonable: true
# 支持通过 Mapper 接口参数来传递分页参数,默认值false
supportMethodsArguments: true
params: count=countSql
生成代码的配置文件 generatorConfig.xml(文件的位置与前面pom文件中配置的一致即可)
<?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>
<!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
<classPathEntry location="D:\mysql-connector-java-5.1.46.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/mfgw" userId="root" password="root">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.manful.mfgw.pojo" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="resources.mapping" targetProject="src/main">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.manful.mfgw.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="t_article" domainObjectName="Article" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<!--当表中有Text类型的字段时,generator会生成WithBLOBS.java文件并继承entity,同时具有带有text等类型字段的属性。想要将这两个属性合并到entity中需要在xml添加如下配置即可,这样就不会生成WithBLOBS.java文件了-->
<columnOverride column="content" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="html_content" javaType="java.lang.String" jdbcType="VARCHAR" />
</table>
<table tableName="t_person" domainObjectName="Person" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="t_pic" domainObjectName="Pic" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
<table tableName="t_product" domainObjectName="Product" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<columnOverride column="sub_images" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="detail" javaType="java.lang.String" jdbcType="VARCHAR" />
</table>
</context>
</generatorConfiguration>
注意,该配置中需要修改几个地方,1、修改本地数据库连接驱动的地址 2、数据库连接的信息 3、生成mapper,实体类的包名 4、实体类和数据库表对应的配置 5、当表中有Text类型的字段时,generator会生成WithBLOBS.java文件并继承entity,同时具有带有text等类型字段的属性。想要将这两个属性合并到entity中需要在xml添加相应配置(见上面文件)。
(前提数据库表都创建好了)然后,就可以生成生成 pojo 和 dao 了
数据库表:
二、简单的增删改查
现在已经生成dao层的代码了,测试一下是否能用
首先向数据库中插入一条数据
然后不要忘了在启动类上加上注解来扫描我们的mapper
@MapperScan("com.xxx.xxx.dao")
写一个controller,来测试一下,这里偷懒了一下,没有写service层
@Controller
public class MainController {
@Autowired
private PersonMapper personMapper;
@RequestMapping("/test")
public String test1(ModelMap map){
Person person = personMapper.selectByPrimaryKey(1);
map.put("person",person);
return "test";
}
}
页面成功取到,成功,
这里测试的mapper的 personMapper.selectByPrimaryKey() 方法时生成器自动帮我们生成的,xml形式的mapper
如果在已有的mapper里使用注解的方式能行吗?试试看
public interface PersonMapper {
int deleteByPrimaryKey(Integer id);
int insert(Person record);
int insertSelective(Person record);
Person selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Person record);
int updateByPrimaryKey(Person record);
@Select(value = "select * from t_person")
List<Person> findAll();
}
controller修改:这次调用的时使用注解的那个方法
@RequestMapping("/test")
public String test1(ModelMap map){
// Person person = personMapper.selectByPrimaryKey(1);
// map.put("person",person);
Person person = personMapper.findAll().get(0);
map.put("person",person);
return "test";
}
测试:
成功显示出来了,可以看出,是可行的,
三、pagehelper 分页
添加依赖,三个缺一不可
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
可选配置;
application.yml
# PageHelper
pagehelper:
#分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:
#oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
helperDialect: mysql
#分页参数合理化 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
reasonable: true
# 支持通过 Mapper 接口参数来传递分页参数,默认值false
supportMethodsArguments: true
params: count=countSql
用法如下,pageinfo对象一般能满足我们的需求了,当然也可以自行把数据进行封装
@RunWith(SpringRunner.class)
@SpringBootTest
public class MfgwApplicationTests {
@Autowired
PersonMapper personMapper;
@Test
public void contextLoads() {
PageHelper.startPage(1,4);
List<Person> personList = personMapper.findAll();
PageInfo pageInfo = new PageInfo(personList);
List list = pageInfo.getList(); //封装数据的list
int pageNum = pageInfo.getPageNum(); //当前页码
int pageSize = pageInfo.getPageSize(); //每页几条记录
int size = pageInfo.getSize(); //
int pages = pageInfo.getPages(); //总页数
long total = pageInfo.getTotal(); //总记录数
}
}
debug 运行结果