概述
一前言
前面已经知道如何生成逆向工程,则需要对里面的一些构造进行了解.生成的bean实体类都知道,dao是接口方法将之前传统的注解sql语句移到了mapper文件中进行,所以mapper文件与之前写过的有一定区别.
二 mapper里的连表
拿一个例子,员工跟部门来说,员工跟部门是一对一的结构,要想对一系列员工的查询,要把部门的名称通过部门id来显示出来.所以我们要做一些工作.
(1)修改员工bean的实体类,增加一个部门的变量.如下所示
(2)然后在mapper里面进行映射连表,如下面所示
<!-- 包含部门信息 -->
<resultMap id="BaseResultMapWithDept" type="com.eduask.chp.cms.bean.Emp">
<id column="emp_id" jdbcType="INTEGER" property="empId" />
<result column="emp_name" jdbcType="VARCHAR" property="empName" />
<result column="gender" jdbcType="CHAR" property="gender" />
<result column="email" jdbcType="VARCHAR" property="email" />
<result column="dept_id" jdbcType="INTEGER" property="deptId" />
<association property="dept" javaType="com.eduask.chp.cms.bean.Dept">
<id property="did" column="did"/>
<result property="dname" column="dname"/>
</association>
</resultMap>
(3)接下来修改查询所有的语句
<!-- 查询的列 包含部门 -->
<sql id="Base_Column_List_WithDept">
e.emp_id, e.emp_name, e.gender, e.email, e.dept_id,d.did,d.dname
</sql>
<select id="selectByExampleWithDept" parameterType="com.eduask.chp.cms.bean.EmpExample" resultMap="BaseResultMapWithDept">//这个id跟dao里的方法名要一致
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List_WithDept" />
from emp e join dept d on e.dept_id=d.did
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
(4)撰写业务层跟控制层
当接口已经完成,自然而然需要将业务层跟控制层写好.业务层的查询所有的代码如下,
@Service
public class EmpServiceImp implements EmpService{
@Autowired
private EmpMapper empMapper;
@Override
public List getAll() {
return empMapper.selectByExampleWithDept(null);//查询所有没有条件限制所以里面为null
}
}
控制层代码:
@Controller
@RequestMapping("/emp")
public class EmpController {
@Autowired
private EmpService empService;
@RequestMapping("/emps")
public String emps(@RequestParam(value="pn",defaultValue="1")Integer pn,Model model){
PageHelper.startPage(pn,5);
List emps=empService.getAll();
PageInfo pageinfo=new PageInfo<>(emps, 5);
model.addAttribute("pageinfo", pageinfo);
return "emps";
}//上面的是以${}的形式出现在jsp页面上的
@RequestMapping("/list")
@ResponseBody
public Msg list(@RequestParam(value="pn",defaultValue="1")Integer pn){
PageHelper.startPage(pn,5);
List emps=empService.getAll();
PageInfo pageinfo=new PageInfo<>(emps, 5);
return Msg.success().add("page", pageinfo);
}//下面是通过ajax的形式.更偏向与第二种.
}
看了上面的代码,有个PageHelper的类,英文意思是页面的帮助,顾名思义他是用来分页的.那么接下来我们来讲讲如何来使用这个PageHelper类
1.这个插件是他人整理好的包,所以第一步需将它导入
<!-- 引入pageHelper分页包 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.0</version>
</dependency>
如果你想使用本项目的jar包而不是直接引入,你可以在这里下载各个版本的jar包(点击Download下的jar即可下载)
-
https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/
-
http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/
由于使用了sql解析工具,你还需要下载jsqlparser.jar(这个文件完全独立,不依赖其他):
-
http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.1/
-
http://git.oschina.net/free/Mybatis_PageHelper/attach_files
-
2.在mybatis.xml的文件里添加如下代码
-
- <configuration>
- <plugins>
- <!-- com.github.pagehelper为PageHelper类所在包名 -->
- <plugin interceptor="com.github.pagehelper.PageHelper">
- <!-- 4.0.0以后版本可以不设置该参数 -->
- <property name="dialect" value="oracle"/>
- <!-- 该参数默认为false -->
- <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
- <!-- 和startPage中的pageNum效果一样-->
- <property name="offsetAsPageNum" value="true"/>
- <!-- 该参数默认为false -->
- <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
- <property name="rowBoundsWithCount" value="true"/>
- <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
- <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
- <property name="pageSizeZero" value="true"/>
- <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
- <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
- <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
- <property name="reasonable" value="true"/>
- <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
- <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
- <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
- <!-- 不理解该含义的前提下,不要随便复制该配置 -->
- <property name="params" value="pageNum=start;pageSize=limit;"/>
- <!-- 支持通过Mapper接口参数来传递分页参数 -->
- <property name="supportMethodsArguments" value="true"/>
- <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
- <property name="returnPageInfo" value="check"/>
- </plugin>
- </plugins>
- </configuration>
由于版本的问题,如果上面的配置报错的话,就用下面的配置文件 -
<!-- 引入 pageHelper插件 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- 4.0.0以后版本可以不设置该参数 ,可以自动识别 <property name="dialect" value="mysql"/> --> <!-- 该参数默认为false --> <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 --> <!-- 和startPage中的pageNum效果一样 --> <property name="offsetAsPageNum" value="true" /> <!-- 该参数默认为false --> <!-- 设置为true时,使用RowBounds分页会进行count查询 --> <property name="rowBoundsWithCount" value="true" /> <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 --> <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型) --> <property name="pageSizeZero" value="true" /> <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 --> <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 --> <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 --> <property name="reasonable" value="true" /> <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 --> <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 --> <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 --> <!-- 不理解该含义的前提下,不要随便复制该配置 --> <property name="params" value="pageNum=start;pageSize=limit;" /> <!-- 支持通过Mapper接口参数来传递分页参数 --> <property name="supportMethodsArguments" value="true" /> <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page --> <property name="returnPageInfo" value="check" /> </plugin>
在applicationcontext.xml,引入mybatis.xml文档 -
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="ds"></property>
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
<!-- 加入mybatis的配置文件 -->
<property name="configLocation" value="classpath:mybatis.xml"></property>
</bean> -
@Test接下来我们可以通过测试,测试成功代表可以用这些功能了
public void test() {
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
EmpMapper empMapper=app.getBean(EmpMapper.class);
PageHelper.startPage(1, 5);
List<Emp> emps=empMapper.selectByExampleWithDept(null);
PageInfo<Emp> pageinfo=new PageInfo<>(emps,5);
System.out.println("当前的页码:"+pageinfo.getPageNum());
System.out.println("总页码:"+pageinfo.getPages());
System.out.println("每页的大小:"+pageinfo.getPageSize());
System.out.println("总记录数:"+pageinfo.getTotal());
System.out.println("记录数据:"+pageinfo.getList().get(1));
System.out.println("是否有上一页:"+pageinfo.isHasPreviousPage());
System.out.println("是否有下一页:"+pageinfo.isHasNextPage());
System.out.println("显示的页码:"+pageinfo.getNavigatePages());
System.out.println("显示的页码:"+pageinfo.getNavigatepageNums()[0]);
}
最后
以上就是可靠玉米为你收集整理的mybatis generator的案例详解-pagehelper的全部内容,希望文章能够帮你解决mybatis generator的案例详解-pagehelper所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复