Сводка общих атрибутов MyBatis для выбора, вставки, обновления, удаления

база данных MySQL MyBatis

Введение

При использовании MyBatis самые долгие сделкиXML映射文件, Используйте выбор, вставку, обновление, удаление MyBatis для добавления, удаления, изменения и запроса базы данных.

Однако это занимает много времени, и один и тот же запрос находится, но способов его использования много, способов настройки свойств тоже много, каждый раз лучше выбирать, какой из них использовать. Беспомощно затягивать время разработки.

Основное резюме здесь представляет собой набор наиболее часто используемых и наиболее разумных способов использования MyBatis, помня об этом, вы можете удовлетворить свои повседневные потребности и попрощаться с боязнью выбора.

2. Законы об общей собственности

Просто запомните общие атрибуты, например, у элемента select много атрибутов:

<select
  id="selectUser" //与 UserMapper.java 接口对应的方法
  parameterType="int" //传入的参数格式
  resultType="hashmap" //返回的数据类型,当返回多个参数的时候,建议使用 resultMap
  resultMap="userResultMap" //返回的数据类型,相当于对 resultType="hashmap" 的封装。resultType、resultMap两者只能存在一个
  parameterMap="deprecated" //已经废弃,现在使用 resultType 和 resultType
  flushCache="false" //是否清空缓存,默认为false
  useCache="true" //是否二级缓存,默认值:对 select 元素为 true。
  timeout="10000" //等待数据库返回请求结果的秒数
  fetchSize="256" 
  statementType="PREPARED" // STATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。
  ...>

Но обычно нам нужно настроить только несколько из них, а остальные используются редко:

<select
  id="selectUser"
  resultType="hashmap" //返回的数据类型,当返回多个参数的时候,建议使用 resultMap
  resultMap="userResultMap" //返回的数据类型,相当于对 resultType="hashmap" 的封装。resultType、resultMap两者只能存在一个
  >

Разве это не круче.

3. Общие атрибуты (вспомните здесь)

<typeAlias type="com.test.model.User" alias="User"/> //类型别名,之后就不用写包名了


// resultMap 可以封装很多个属性,在返回数据多的情况下,可以避免使用 resultType="hashmap" 返回不易识别的Map对象,而可以直接返回封装的对象,如 User
<resultMap id="userResultMap" type="User">
  <id property="id" column="user_id" />
  <result property="username" column="user_name"/>
  <result property="password" column="hashed_password"/>
</resultMap> 


//sql语句的封装,之后可以使用 <include refid="Base_Column_List" /> 来插入相关 sql 语句
<sql id="Base_Column_List" >
    id, phone, email, nickname, password, avatar, create_time, last_login_time, status
</sql>


<select
  id="selectUser"
  resultType="hashmap"        //返回的数据类型。当返回多个参数的时候,建议使用 resultMap
  resultMap="userResultMap" //返回的数据类型。相当于对 resultType="hashmap" 的封装。resultType、resultMap两者只能存在一个
  >
  
<insert
  id="insertUser"
  parameterType="com.test.model.User"

  useGeneratedKeys="true" //(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。
  keyProperty="id"      //(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
  >

<update
  id="updateUser">

<delete
  id="deleteUser">

Значение useGeneratedKeys и keyProperty в MyBatis:

// 如果没有useGeneratedKeys="true"和keyProperty="id",下面 insert 之后的 user.getId() 是无法获取 id 值的
public void insert(User user) {  
    int count = userMapper.insert(user); 
    System.out.println("共插入" + count + "条记录!"  + "\n刚刚插入记录的主键自增长值为:" + user.getId()); 
}

4. Атрибуты

<select
  id="selectUser" //与 PersonMapper.java 接口对应的方法
  parameterType="int" //传入的参数格式
  resultType="hashmap" //返回的数据类型,当返回多个参数的时候,建议使用 resultMap
  resultMap="userResultMap" //返回的数据类型,相当于对 resultType="hashmap" 的封装。resultType、resultMap两者只能存在一个
  parameterMap="deprecated" //已经废弃,现在使用 resultType 和 resultType
  flushCache="false" //是否清空缓存,默认为false
  useCache="true" //是否二级缓存,默认值:对 select 元素为 true。
  timeout="10000" //等待数据库返回请求结果的秒数
  fetchSize="256" 
  statementType="PREPARED" // STATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。
  ...>
  
<insert
  id="insertUser"
  parameterType="com.test.model.User"
  flushCache="true"
  statementType="PREPARED"
  timeout="20"
  keyProperty=""      //(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
  useGeneratedKeys="" //(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。
  keyColumn="" //(仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像 PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
  >

<update
  id="updateUser"
  parameterType="com.test.model.User"
  flushCache="true"
  statementType="PREPARED"
  timeout="20">

<delete
  id="deleteUser"
  parameterType="com.test.model.User"
  flushCache="true"
  statementType="PREPARED"
  timeout="20">

Пять, рекомендация учебника MyBatis

Если вы хотите подробно изучить MyBatis, я рекомендую всем посмотреть это руководство:woohoo. не добавил elevate.org/ не добавил elevate-3/ в…