做企业展示型网站,如何做一个网站,罗湖福田app网站开发,建设部法律法规网站目录
1 SQL 映射文件介绍
2 select 元素
3 insert 元素
4 update 和 delete 元素
5 sql 元素
6 parameterType 元素
7 resultType 元素
8 resultMap 元素#xff08;重要#xff09;
9 参考文档 1 SQL 映射文件介绍 映射器是 MyBatis 中最复杂并且是最重要的…目录
1 SQL 映射文件介绍
2 select 元素
3 insert 元素
4 update 和 delete 元素
5 sql 元素
6 parameterType 元素
7 resultType 元素
8 resultMap 元素重要
9 参考文档 1 SQL 映射文件介绍 映射器是 MyBatis 中最复杂并且是最重要的组件。它由一个接口和 SQL 映射文件或者注解组成。在映射器中我们可以配置各类 SQL、动态 SQL、缓存、存储过程、级联等复杂的内容。
以下是 SQL 映射文件的部分元素介绍
元素描述cache该命名空间的缓存配置cache-ref引用其它命名空间的缓存配置resultMap描述如何从数据库结果集中加载对象它是最复杂也是最强大的元素sql可被其它语句引用的可重用语句块select映射查询语句insert映射插入语句update映射更新语句delete映射删除语句
2 select 元素
select 元素表示 SQL 的 select 语句用于查询以下是 select 元素的部分属性 属性 描述id在命名空间中唯一的标识符可以被用来引用这条语句parameterType将会传入这条语句的参数类的全类名或别名。这个属性是可选的因为 MyBatis 可以通过类型处理器TypeHandler 推断出具体传入语句的参数默认值为未设置unsetresultType从这条语句中返回的期望类型的类的全类名或别名。 注意如果返回的是集合那应该设置为集合包含的类型而不是集合本身。可以使用 resultType 或 resultMap但不能同时使用resultMap外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性如果你对其理解透彻许多复杂映射的情形都能迎刃而解。可以使用 resultMap 或 resultType但不能同时使用flushCache将其设置为 true 后只要语句被调用都会导致本地缓存和二级缓存被清空默认值falseuseCache将其设置为 true 后将会导致本条语句的结果被二级缓存缓存起来默认值对 select 元素为 truetimeout这个设置是在抛出异常之前驱动程序等待数据库返回请求结果的秒数。默认值为未设置unset依赖驱动fetchSize这是一个给驱动的提示尝试让驱动程序每次批量返回的结果行数和这个设置值相等。 默认值为未设置unset依赖驱动statementTypeSTATEMENTPREPARED 或 CALLABLE 中的一个。这会让 MyBatis 分别使用 StatementPreparedStatement 或 CallableStatement默认值PREPAREDresultSetTypeFORWARD_ONLYSCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT等价于 unset 中的一个默认值为 unset 依赖驱动databaseId如果配置了数据库厂商标识 (databaseIdProvider) 并且存在两个相同的语句一个带 databaseId 而另一个不带MyBatis 会优先加载带有 databaseId 的语句。如果 databaseId 与当前数据库匹配则不带 databaseId 的相同语句将被忽略。未设置 databaseId 使用通用 SQL 规则resultOrderedresultOrdered这个设置仅对嵌套结果 select 语句适用如果为 true就是假设包含了嵌套结果集或是分组这样的话当返回一个主结果行的时候就不会发生有对前面结果集的引用的情况。 这就使得在获取嵌套的结果集的时候不至于导致内存不够用。默认值falseresultSets这个设置仅对多结果集的情况适用。它将列出语句执行后返回的结果集并给每个结果集一个名称名称是逗号分隔的
3 insert 元素 属性 描述id在命名空间中唯一的标识符可以被用来引用这条语句parameterType将会传入这条语句的参数的类全限定名或别名。这个属性是可选的因为 MyBatis 可以通过类型处理器TypeHandler推断出具体传入语句的参数默认值为未设置unsetflushCache将其设置为 true 后只要语句被调用都会导致本地缓存和二级缓存被清空默认值对 insert、update 和 delete 语句truetimeout这个设置是在抛出异常之前驱动程序等待数据库返回请求结果的秒数。默认值为未设置unset依赖数据库驱动statementType可选 STATEMENTPREPARED 或 CALLABLE。这会让 MyBatis 分别使用 StatementPreparedStatement 或 CallableStatement默认值PREPAREDuseGeneratedKeys仅适用于 insert 和 update这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键比如像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段默认值falsekeyProperty仅适用于 insert 和 update指定能够唯一识别对象的属性MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值默认值未设置unset。如果生成列不止一个可以用逗号分隔多个属性名称。不能和keyColumn连用keyColumn仅适用于 insert 和 update设置生成键值在表中的列名在某些数据库像 PostgreSQL中当主键列不是表中的第一列的时候是必须设置的。如果生成列不止一个可以用逗号分隔多个属性名称。不能和keyProperty连用databaseId同 select 元素
主键回填 在 MyBatis 中若表中的主键设置为自增插入数据时没有插入主键但是又想获得数据库中该条数据的主键那么可以通过设置 useGeneratedKeys”true”然后再把 keyProperty 设置到目标属性如 User 类中的 id 属性上来获得该值。
insert idinsertUser parameterTypecom.entity.User useGeneratedKeystrue keyPropertyidinsert into person(name, age, sex)values (#{name}, #{age}, #{sex});
/insert
//添加一个用户数据
Test
public void testInsertUser() {String statement com.mapper.UserMapper.insertUser;User user new User();user.setName(孙尚香);user.setAge(24);user.setSex(女);int i sqlSession.insert(statement, user);System.out.println( (i0)? 添加成功:添加失败);//提交插入的数据sqlSession.commit();sqlSession.close();// 输出返回的主键值System.out.println(返回的主键值 user.getId());
} 自定义主键并且可以在 Java 中通过属性获得该值
在 MyBatis 中可以通过 selectKey 元素自定义主键以下是其属性介绍
keyPropertyselectKey 需要设置的目标属性resultType结果类型order可以设置为 BEFORE 或 AFTER 表示先设置主键后执行插入语句或先执行插入语句后设置主键
insert idinsertUser parameterTypecom.entity.User selectKey keyPropertyid resultTypeint orderBEFOREselect ROUND(RAND()*1000)/selectKeyinsert into person(id, name, age, sex)values (#{id}, #{name}, #{age}, #{sex});
/insert
Test
public void testInsertUser() {String statement com.mapper.UserMapper.insertUser;User user new User();user.setName(郑旦);user.setAge(24);user.setSex(女);int i sqlSession.insert(statement, user);System.out.println( (i0)? 添加成功:添加失败);//提交插入的数据sqlSession.commit();sqlSession.close();// 输出返回的主键值System.out.println(返回的主键值 user.getId());
} 4 update 和 delete 元素 update 和 delete 元素在使用上比较简单所以这里把它们放在一起论述。它们和 insert 元素的属性差不多执行完后也会返回一个整数用来表示该 SQL 语句影响了多少条数据库记录。
!-- 根据 id 更新用户 --
update idupdateUserupdate person set name #{name},age #{age},sex #{sex} where id #{id}
/update
!-- 根据 id 删除用户 --
delete iddeleteUser parameterTypeintdelete from person where id #{id}
/delete
5 sql 元素 sql 元素是用来定义可重用的 sql 代码片段这样在字段比较多的时候以便在其它语句中使用。需要结合 include 元素一起使用以下是代码示例。
!--定义sql代码片段--
sql iduserColsid,username,age,sex
/sql
!-- 查询所有用户 --
select idselectAllUser resultTypecom.entity.Userselect include refiduserCols/ from person
/select
6 parameterType 元素
parameterType 元素可以输入以下类型
Java 基本数据类型POJO 类型Map 类型
!-- 通过 普通数据类型 int 查询一个用户 --
select idselectUserById parameterTypeint resultTypecom.entity.Userselect * from person where id #{id};
/select!-- 通过 POJO 类型 User 添加用户--
insert idinsertUser parameterTypecom.entity.Userinsert into person(id,username,age,sex) values (#{id},#{username},#{age},#{sex});
/insert!-- 通过 嵌套 POJO 类型 查询一个用户QueryVo 类中定义了 User user 属性 --
select idselectUserByUserNameAndAge parameterTypecom.entity.QueryVo resultTypecom.entity.Userselect * from person where name #{user.name} and age #{user.age};
/select!-- 通过 Map 类型 查询一个用户 HashMapString, Object map new HashMap();
map.put(name,赵飞燕); map.put(age,24); 通过 key 获得 map 中的 value--
select idselectUserByMap parameterTypehashmap resultTypecom.entity.Userselect * from person where name #{name} and age #{age};
/select
7 resultType 元素
resultType 元素和 parameterType 元素用法差不多一个是输出一个是输入。resultType 元素可以输出以下类型
Java 基本数据类型POJO 对象POJO 对象列表Map 对象列表
!-- 统计用户总数量输出为一个整数 int --
select idcountUsers resultTypeintselect count(1) from person
/select!-- 通过 id 查询一个用户输出为一个 User --
select idselectUserById parameterTypeint resultTypecom.entity.Userselect * from personwhere id #{id};
/select!-- 查询所有用户输出为一个 ListUser 列表 --
select idselectAllUser resultTypecom.entity.Userselect * from person
/select!-- 查询所有用户 输出为一个 ListHashMapString, Object Map 列表--
select idselectAllUser resultTypehashmapselect * from person
/select
8 resultMap 元素重要 我们在使用 resultType 的时候需要保证数据库表中的字段名和表对应实体类的属性名称一致才行包括驼峰命名规则。那不一致怎么办查询的时候可以给列名起个别名但是一般不建议这样做而是通过 resultMap 元素进行一个转换。
!-- id:唯一标识type:需要映射的 Java 类型--
resultMap iduserMap typecom.entity.User!-- 与主键字段的对应property对应实体属性column对应表字段 --id propertyuserId columnid/!-- 与非主键字段的对应property对应实体属性column对应表字段 --result propertyuserName columnusername/result propertyuserAge columnage/result propertyuserSex columnsex/
/resultMap!-- 查询所有用户,返回集为resultMap类型resultMap的value上面配置的 iduserMap 要一致--
select idselectAllUser resultMapuserMapselect * from person
/select
上述代码是不是很眼熟在 MyBatis 案例中使用了 ResultMap 注解来实现上述代码 resultMap 元素的组成
!-- autoMapping指定是否自动映射查询结果的列到 Java 对象的属性。
默认为开启true如果设置为 false则需要手动配置每个属性的映射关系 --
resultMap id标识 type输出类型 extends继承其他 resultMap autoMapping自动映射constructor!--构造器注入属性值--!-- 构造器标识一般为主键 --!-- column对应表字段name对应实体属性 --idArg columnid nameuserId javaTypeint/!-- 构造器参数 --arg columnusername nameuserName javaTypestring/ /constructor!-- id 与主键字段的对应property对应实体属性column对应表字段 --id propertyuserId columnid/!-- result 与非主键字段的对应property对应实体属性column对应表字段 --result propertyuserName columnusername/association/!--高级映射一对一映射--collection /!--高级映射一对多映射--discriminatorcase//discriminator!--根据返回的字段的值封装不同的类型--
/resultMap
9 参考文档
Mybatis3详解四----SQL映射文件详解(XxxMapper.xml) - 唐浩荣 - 博客园 (cnblogs.com)