反向生成工程可以直接通过数据库表生成对应的实体类和dao层mapper配置文件
在反向生成的项目配置文件中修改以下几点
1> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/db01" userId="root"
password="189828">
</jdbcConnection>
3306/后面是数据库名 userId是数据库登录账号 password登录密码
2> <!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.kgc.pojo"
targetProject=".\src">
targetPackage是实体类的包名
3> <!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.kgc.dao.mapper"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
targetPackage是mapper映射文件位置包名
4> <!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.kgc.dao"
targetProject=".\src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
targetPackage是mapper接口生成的位置包名,就是之前的dao层包名
5> <!-- 指定数据库表 -->
<table tableName="emp">
<property name="useActualColumnNames" value="true"/>
</table>
<table tableName="dept">
<property name="useActualColumnNames" value="true"/>
</table>
tableName是数据库的表名,多个表直接复制多个table即可
匹配数据库字段的命名规则<property name="useActualColumnNames" value="true"/>
所得配置设置完成之后运行代码既可以,然后将生成的包直接复制到你的项目里面
分页插件
<!-- 版本号控制 -->
<properties>
<pagehelper.version>5.1.2</pagehelper.version>
</properties>
<dependencies>
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
</dependencies>
因为之前使用了反向生成工程,dao层和mapper配置文件,实体类不用写
但是分页的操作要在业务层的实现类中编写
@Service
@Transactional
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper empMapper;
@Autowired
private DeptMapper depetMapper;
public PageInfo<Emp> getEmpList(Integer pageIndex, Integer pageSize, EmpSearch empSearch) {
EmpExample example=new EmpExample();
Criteria criteria=example.createCriteria();
if(empSearch!=null) {
if(empSearch.getId()!=null&&empSearch.getId()!=-1) {
criteria.andDeptidEqualTo(empSearch.getId());
}
if(StringUtils.isNotBlank(empSearch.getEmpName())){
criteria.andEmpnameLike("%"+empSearch.getEmpName()+"%");
}
if(empSearch.getMinSal()!=null) {
criteria.andSalGreaterThanOrEqualTo(empSearch.getMinSal());
}
if(empSearch.getMaxSal()!=null) {
criteria.andSalLessThanOrEqualTo(empSearch.getMaxSal());
}
}
//分页设置
PageHelper.startPage(pageIndex, pageSize);
PageInfo<Emp> info=new PageInfo<Emp>(emplist);
return info;
}
注意事项
1、 因为没有做连表查询,所以在实体类中将主表dept生成的实体类Dept作为从表emp生成的实体类Emp的属性
public class Emp {
private Integer id;
private String empname;
private Integer sex;
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday;
private Integer deptid;
private Double sal;
private Dept dept;
然后在查询的时候分步查询,然后将主表的实体类set到从表的实体类中
List<Emp> emplist=empMapper.selectByExample(example);
for(Emp emp:emplist) {
Integer deptId=emp.getDeptid();
Dept dept=depetMapper.selectByPrimaryKey(deptId);
emp.setDept(dept);
}
2、分页操作中涉及到带条件的分页查询我们要对条件进行处理
EmpExample example=new EmpExample();
Criteria criteria=example.createCriteria();
if(empSearch!=null) {
if(empSearch.getId()!=null&&empSearch.getId()!=-1) {
criteria.andDeptidEqualTo(empSearch.getId());
}
if(StringUtils.isNotBlank(empSearch.getEmpName())){
criteria.andEmpnameLike("%"+empSearch.getEmpName()+"%");
}
if(empSearch.getMinSal()!=null) {
criteria.andSalGreaterThanOrEqualTo(empSearch.getMinSal());
}
if(empSearch.getMaxSal()!=null) {
criteria.andSalLessThanOrEqualTo(empSearch.getMaxSal());
}
}
3、分页是根据页号和页容量来进行操作
PageHelper.startPage(pageIndex, pageSize);
4、最后将查询的的结果赋值给PageInfo<Emp>
PageInfo<Emp> info=new PageInfo<Emp>(emplist);
在页面回显数据如果是用的session存储${sessionScope.info.list}
控制层的操作主要在于带条件的分页查询,增删改和之前的一样
@RequestMapping("/index")
public String list(@RequestParam(value="pageIndex",required=true,defaultValue="1") Integer pageIndex,
EmpSearch empSearch,Model model,HttpSession session) {
List<Dept> listdept=deptService.getDeptList();
PageInfo<Emp> info=empService.getEmpList(pageIndex, 3, empSearch);
session.setAttribute("listdept",listdept);
model.addAttribute("info",info);
model.addAttribute("empSearch",empSearch);
return "/index";
}
empSearch是表单中查询的条件,为了方便操作将他们封装在一个工具类中,pageIndex为当前页号,在第一次查询的时候因为没有值,所以要在第一次查询的时候赋默认值1,
分页增删查改所有操作
@Controller
@RequestMapping("/emp")
public class ControllerTest {
@Autowired
private EmpService empService;
@Autowired
private DeptService deptService;
@RequestMapping("/index")
public String list(@RequestParam(value="pageIndex",required=true,defaultValue="1") Integer pageIndex,
EmpSearch empSearch,Model model,HttpSession session) {
List<Dept> listdept=deptService.getDeptList();
PageInfo<Emp> info=empService.getEmpList(pageIndex, 3, empSearch);
session.setAttribute("listdept",listdept);
model.addAttribute("info",info);
model.addAttribute("empSearch",empSearch);
return "/index";
}
@RequestMapping("/{page}")
public String list(@PathVariable("page") String page) {
return "/"+page;
}
@RequestMapping(value="/insert",method=RequestMethod.POST,produces="text/html;charset=UTF-8")
@ResponseBody
public String insert(Emp emp) {
if(empService.insert(emp)) {
return "<script>alert('添加成功');location.href='/emp/index'</script>";
}
return "<script>alert('添加失败');history.go(-1)</script>";
}
@RequestMapping(value="/delete/{id}", method=RequestMethod.GET,produces="text/html;charset=UTF-8")
@ResponseBody
public String delete(@PathVariable("id") Integer id) {
if(empService.delete(id)) {
return "<script>alert('删除成功');location.href='/emp/index'</script>";
}else {
return "<script>alert('删除失败');history.go(-1)</script>";
}
}
@RequestMapping(value="/proUpdate/{id}",method=RequestMethod.GET,produces="text/html;charset=UTF-8")
public String proUpdate(@PathVariable("id") Integer id,Model model) {
Emp emp=empService.getEmp(id);
model.addAttribute("emp", emp);
return "/update";
}
//修改操作
@RequestMapping(value="/update",method=RequestMethod.POST,produces="text/html;charset=UTF-8")
@ResponseBody
public String update(Emp emp) {
if(empService.update(emp)) {
return "<script>alert('修改成功');location.href='/emp/index'</script>";
}else {
return "<script>alert('修改失败');history.go(-1)</script>";
}
}
//信息详细
@RequestMapping("/view{id}")
public String view(@PathVariable("id") Integer id,Model model) {
Emp emp=empService.getEmp(id);
Integer deptid=emp.getDeptid();
Dept dept=deptService.getDet(deptid);
emp.setDept(dept);
model.addAttribute("emp", emp);
return "/view";
}
}
方向生成工程在我的资源里面可以下载,或者直接邮箱(allen_bao0927@163.com)联系我