spring和Mybatis的逆向工程

文章目录

十二、注解开发

注解方式比较简单,但是实际开发不推荐使用注解,使用配置文件的方式,不需要改源代码)

1、注解方式单表的增删改查的操作

(1)查询所有

java 复制代码
/**
 * 查询所有
 * @return
 */
@Select("select * from user")
List<User> findAll();
java 复制代码
@Test
public void testFindAll(){
    List<User> users = userMapper.findAll();
    users.forEach(System.out::println);
}

(2)根据id查询

java 复制代码
/**
 * 通过id查询用户
 * @param id
 * @return
 */
@Select("select * from user where id=#{id}")
User findUserById(Integer id);
java 复制代码
@Test
public void testFindUserById(){
    User user = userMapper.findUserById(2);
    System.out.println(user);
}

十三、逆向工程

正向工程:先创建java实体类,有框架负责根据实体类生成数据库表。Hibernate是支持正向工程
逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:

⑴Java实体类

⑵Mapper接口

⑶Mapper映射文件

注意:逆向工程生成的都是单表资源

13.1、创建逆向工程的步骤

⑴添加依赖
xml 复制代码
<!-- 控制Maven在构建过程中相关配置 -->
<build>
    <!-- 构建过程中用到的插件 -->
    <plugins>
        <!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 -->
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.0</version>
            <!-- 插件的依赖 -->
            <dependencies>
                <!-- 逆向工程的核心依赖 -->
                <dependency>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-core</artifactId>
                    <version>1.3.2</version>
                </dependency>
                <!-- MySQL驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.6</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>
 	
⑵配置MyBatis的核心配置文件

配置pojo包和mapper包

⑶创建逆向工程的配置文件,该文件文件名必须是:generatorConfig.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>
    <!--
    targetRuntime: 执行生成的逆向工程的版本
    MyBatis3Simple: 生成基本的CRUD(清新简洁版)
    MyBatis3: 生成带条件的CRUD(奢华尊享版)
    -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!-- 数据库的连接信息 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mybatis_demo"
                        userId="root"
                        password="root">
        </jdbcConnection>
        <!-- javaBean的生成策略-->
        <javaModelGenerator targetPackage="com.qcby.mybatis.pojo"
                            targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- SQL映射文件的生成策略 -->
        <sqlMapGenerator targetPackage="com.qcby.mybatis.mapper"
                         targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- Mapper接口的生成策略 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.qcby.mybatis.mapper" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <!-- 逆向分析的表 -->
        <!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName -->
        <!-- domainObjectName属性指定生成出来的实体类的类名 -->
        <table tableName="emp" domainObjectName="Emp"/>
        <table tableName="dept" domainObjectName="Dept"/>
    </context>
</generatorConfiguration>

13.2测试

java 复制代码
/**
 * 根据主键查询
 */
@Test
public void testSelectByPrimaryKey(){

    Emp emp = empMapper.selectByPrimaryKey(1);
    System.out.println(emp);
}

/**
 * 带条件查询
 */
@Test
public void testSelectByExample(){
    List<Emp> emps = empMapper.selectByExample(null);
    emps.forEach(System.out::println);
}

@Test
public void testSelectByExample2(){
    EmpExample example = new EmpExample();
    example.createCriteria().andEmpNameEqualTo("李四").andAgeGreaterThanOrEqualTo(22);

    List<Emp> emps = empMapper.selectByExample(example);
    emps.forEach(System.out::println);
}

@Test
public void testSelectByExample3(){
    EmpExample example = new EmpExample();
    example.createCriteria().andEmpNameEqualTo("王五").andAgeGreaterThanOrEqualTo(22);
    example.or().andSexEqualTo("男");

    List<Emp> emps = empMapper.selectByExample(example);
    emps.forEach(System.out::println);
}

@Test
public void testUpdateByPrimaryKey(){
    Emp emp = new Emp(2,"小张",null,"女");
    // int i  = empMapper.updateByPrimaryKey(emp);
    // if(i>0){
    //     System.out.println("更新成功");
    // }else {
    //     System.out.println("更新失败");
    // }

    int i = empMapper.updateByPrimaryKeySelective(emp);
    if(i>0){
        System.out.println("更新成功");
    }else {
        System.out.println("更新失败");
    }
}

十四、分页插件

14.1、使用步骤

⑴添加依赖

xml 复制代码
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.0</version>
</dependency>

⑵配置分页插件

在MyBatis的核心配置文件中配置插件

xml 复制代码
<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

14.2分页插件的使用

tex 复制代码
PageInfo{pageNum=1, pageSize=5, size=5, startRow=1, endRow=5, total=42, pages=9, list=Page{count=true, pageNum=1, pageSize=5, startRow=0, endRow=5, total=42, pages=9, reasonable=false, pageSizeZero=false}[Emp{empId=1, empName='小张', age=null, sex='女'}, Emp{empId=2, empName='小张', age=22, sex='女'}, Emp{empId=3, empName='王五', age=24, sex='男'}, Emp{empId=4, empName='马六', age=25, sex='女'}, Emp{empId=5, empName='赵七', age=26, sex='男'}], prePage=0, nextPage=2, isFirstPage=true, isLastPage=false, hasPreviousPage=false, hasNextPage=true, navigatePages=5, navigateFirstPage=1, navigateLastPage=5, navigatepageNums=[1, 2, 3, 4, 5]}
tex 复制代码
Page{count=true, pageNum=2, pageSize=5, startRow=5, endRow=10, total=42, pages=9, reasonable=false, pageSizeZero=false}[Emp{empId=8, empName='a', age=null, sex='null'}, Emp{empId=13, empName='a', age=null, sex='null'}, Emp{empId=14, empName='a', age=null, sex='null'}, Emp{empId=20, empName='a', age=null, sex='null'}, Emp{empId=22, empName='a', age=null, sex='null'}]
tex 复制代码
a>在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能 
pageNum:当前页的页码 
pageSize:每页显示的条数 
b>在查询获取list集合之后,使用PageInfo<T> pageInfo = new PageInfo<>(List<T> list, int 
navigatePages)获取分页相关数据 
list:分页之后的数据 
navigatePages:导航分页的页码数 
c>分页相关数据 
PageInfo{ 
pageNum=8, pageSize=4, size=2, startRow=29, endRow=30, total=30, pages=8, 
list=Page{count=true, pageNum=8, pageSize=4, startRow=28, endRow=32, total=30, 
pages=8, reasonable=false, pageSizeZero=false}, 
prePage=7, nextPage=0, isFirstPage=false, isLastPage=true, hasPreviousPage=true, 
hasNextPage=false, navigatePages=5, navigateFirstPage4, navigateLastPage8, 
navigatepageNums=[4, 5, 6, 7, 8] 
} 
pageNum:当前页的页码 
pageSize:每页显示的条数 
size:当前页显示的真实条数 
total:总记录数 
pages:总页数 
prePage:上一页的页码 
nextPage:下一页的页码 
isFirstPage/isLastPage:是否为第一页/最后一页 
hasPreviousPage/hasNextPage:是否存在上一页/下一页 
navigatePages:导航分页的页码数 
navigatepageNums:导航分页的页码,[1,2,3,4,5] 

, 5, 6, 7, 8]

}

pageNum:当前页的页码

pageSize:每页显示的条数

size:当前页显示的真实条数

total:总记录数

pages:总页数

prePage:上一页的页码

nextPage:下一页的页码

isFirstPage/isLastPage:是否为第一页/最后一页

hasPreviousPage/hasNextPage:是否存在上一页/下一页

navigatePages:导航分页的页码数

navigatepageNums:导航分页的页码,[1,2,3,4,5]

复制代码
相关推荐
醉颜凉34 分钟前
【NOIP提高组】潜伏者
java·c语言·开发语言·c++·算法
阿维的博客日记38 分钟前
java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程
java·jvm
qiyi.sky38 分钟前
JavaWeb——Web入门(8/9)- Tomcat:基本使用(下载与安装、目录结构介绍、启动与关闭、可能出现的问题及解决方案、总结)
java·前端·笔记·学习·tomcat
lapiii35842 分钟前
图论-代码随想录刷题记录[JAVA]
java·数据结构·算法·图论
RainbowSea1 小时前
4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明
java·spring·spring cloud
程序员小明z1 小时前
基于Java的药店管理系统
java·开发语言·spring boot·毕业设计·毕设
爱敲代码的小冰1 小时前
spring boot 请求
java·spring boot·后端
Lyqfor1 小时前
云原生学习
java·分布式·学习·阿里云·云原生
程序猿麦小七2 小时前
今天给在家介绍一篇基于jsp的旅游网站设计与实现
java·源码·旅游·景区·酒店
张某布响丸辣2 小时前
SQL中的时间类型:深入解析与应用
java·数据库·sql·mysql·oracle