数据库设计

CREATE TABLE `test`  (
  `test_id` varchar(255),
  `test_name` varchar(255),
  PRIMARY KEY (`test_id`) 
)

springboot 生成随机姓名_mysql

生成目录结构

文件

作用

Test.java

实体类

TestExample.java

复杂增删查改所需的条件的模板类

TestMapper.java

方法的接口

TestMapper.xml

方法的sql语句映射文件类

如果有两个以上的主键,则会生成TestKey,java

实体类.java

public class Test {

    private String testId;

    private String testName;

	/*
		get set
	*/
    public String getTestId() {
        return testId;
    }

    public void setTestId(String testId) {
        this.testId = testId == null ? null : testId.trim();
    }

    public String getTestName() {
        return testName;
    }

    public void setTestName(String testName) {
        this.testName = testName == null ? null : testName.trim();
    }
}

增删查改条件模板类 XxxExample.java

这个类是用来作为条件的类(可简称:增删查改条件模板类),里边封装了很多的条件,要增删查改的时候就可以new一个Example类,然后定义里边的条件,这样就是一个条件类了,最后让它作为参数进行select等方法。

看一下类的样子:一个主类有三个内部类,其中有一个内部类继承自另一个内部类

springboot 生成随机姓名_java_02

主类XxxExample.java:

属性

作用

orderByClause

按照什么来排序

distinct

是否要去掉重复

oredCriteria

增删查改条件的集合

内部类GeneratedCriteria.java:

属性

作用

criteria

许多小条件的集合

内部类Criterion.java

属性

作用

condition

查询的条件具体是什么

value

条件里的第一个值

secondValue

条件里的第二个值

noValue

是否是not条件

singleValue

条件的参数值是否是单个的值

betweenValue

是否是between条件

listValue

条件的参数值是否是集合

typeHandler

类型的处理器(暂且没有用到)

XxxMapper.java接口详解

方法名

作用

selectByExample

根据模板类来查询

selectByPrimaryKey

根据主键查询

deleteByPrimaryKey

根据主键来删除

deleteByExample

根据模板类来删除

insert

普通的插入方法(全字段)

insertSelective

可选的插入方法,一般不是null就写入sql语句,是null就算了

countByExample

根据查询条件数元组个数

updateByExampleSelective

根据条件类来可选择地更新元组(还是对null的优化处理)

updateByExample

根据条件类来更新元组()

updateByPrimaryKeySelective

根据主键来可选择地更新元组

updateByPrimaryKey

根据主键来更新元组

public interface TestMapper {
    long countByExample(TestExample example);

    int deleteByExample(TestExample example);

    int deleteByPrimaryKey(String testId);

    int insert(Test record);

    int insertSelective(Test record);

    List<Test> selectByExample(TestExample example);

    Test selectByPrimaryKey(String testId);

    int updateByExampleSelective(@Param("record") Test record, @Param("example") TestExample example);

    int updateByExample(@Param("record") Test record, @Param("example") TestExample example);

    int updateByPrimaryKeySelective(Test record);

    int updateByPrimaryKey(Test record);
}

~Mapper.xml

大致情况:

springboot 生成随机姓名_数据库_03

名称空间:定义到Mapper接口类上

<mapper namespace="com.superkarx.dao.TestMapper">

结果集:定义要返回什么

<!--结果集,指定这个结果集的 id 叫什么,返回的类型是对应哪个 bean-->
  <resultMap id="BaseResultMap" type="com.superkarx.pojo.Test">
    <!--id标签是主键的意思-->
    <!--column:数据库的列(字段),jdbcType:数据库的属性类型,property:对应bean的对应属性名-->
    <id column="test_id" jdbcType="VARCHAR" property="testId" />
    <!--result标签是非主键的意思-->
    <result column="test_name" jdbcType="VARCHAR" property="testName" />
  </resultMap>

sql语句模板

sql模板id

作用

Example_Where_Clause

where查询条件的模板

Update_By_Example_Where_Clause

更新用的where查询条件的模板

Base_Column_List

所有属性列依次列出,不用去再输入一遍

以下只讲述一个sql模板,其他以此类推

<sql id="Example_Where_Clause">
    <where>
    <!--循环查询条件集合,拿出来赋予criteria-->
      <foreach collection="oredCriteria" item="criteria" separator="or">
        <!--生效否,test:if的具体条件-->
        <if test="criteria.valid">
        <!--修剪,去掉多余的关键字(and或or等)-->
        <!--
            prefix:给sql语句拼接的前缀
            suffix:给sql语句拼接的后缀
            prefixOverrides:去除sql语句前面的关键字或者字符
        -->
            <trim prefix="(" prefixOverrides="and" suffix=")">
            <!--循环criteria.criteria那些小规则小标准,然后赋予名为criterion的item-->
            <foreach collection="criteria.criteria" item="criterion">
            <!--choose标签+when:若其中一个成立则退出-->
              <choose>
              <!--当这个是真,说明这条查询条件是noValue的条件,则插入具体的查询条件内容-->
              <!--以此类推~~~~-->
                <when test="criterion.noValue">
                  and ${criterion.condition}
                </when>
                <when test="criterion.singleValue">
                  and ${criterion.condition} #{criterion.value}
                </when>
                <when test="criterion.betweenValue">
                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                </when>
                <when test="criterion.listValue">
                  and ${criterion.condition}
                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                    #{listItem}
                  </foreach>
                </when>
              </choose>
            </foreach>
          </trim>
        </if>
      </foreach>
    </where>
  </sql>

这里只讲诉一个方法的xml配置详情

<select id="selectByExample" parameterType="com.superkarx.pojo.TestExample" resultMap="BaseResultMap">
    select
    <if test="distinct">
      distinct
    </if>
    <!--用include标签引入sql模板(不用去写第二次)-->
    <include refid="Base_Column_List" />
    from test
    <!--
    	查询条件(因为输入参数是TestExample,用Example模板来查询)
    	Example类:有很多的查询条件属性
    -->
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <!--按什么来排序-->
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>

运行测试使用

在数据库存入以下字段

springboot 生成随机姓名_mysql_04

@RestController
public class TestController {

    @Resource
    private TestMapper testMapper;

    @GetMapping("/test/{id}")
    public List getById(@PathVariable("id")String id){
        /**
         * 直接用主键的查询
         */
        Test test = testMapper.selectByPrimaryKey(id);
        TestExample testExample = new TestExample();
        /**
         * 通用的增删查改(不是主键,所以返回集合)
         */
        testExample.createCriteria().andTestIdEqualTo(id);
        List<Test> tests = testMapper.selectByExample(testExample);
        /**
         * 返回
         */
        ArrayList<Object> objects = new ArrayList<>();
        objects.add(test);
        objects.add(tests);
        return objects;
    }
}

两种查询方法皆可行

springboot 生成随机姓名_java_05

让我们看看编译器的各种提示

这里是mapper接口的提示

springboot 生成随机姓名_mysql_06

增删查改模板类Example的使用

springboot 生成随机姓名_mysql_07

直接在这里添加很多的标准(增删查改条件)

springboot 生成随机姓名_springboot 生成随机姓名_08