02. mybatis 常用标签
2016-02-08 11:59
288 查看
一 、mybatis 常用标签
<insert>
id: 在该命名空间中的唯一标识
parameterType: 入参类型,必须为java 基本类型或者自定义类的类全名或者别名
parameterMap: 已被废弃
userGenerateKeys: 使用自动生成key,可以返回主键,但是要求数据库本身具备主键自动增长的功能,如mysql
keyProperty: 返回的主键赋值给那个属性
<delete>
id: 在该命名空间中的唯一标识
resultType: 结果集自动封装的返回结果类型, 必须为java 基本类型或者自定义简单JavaBean类全名或者别名
resultMap: 结果集自动封装的返回结果类型,用于有嵌套类的JavaBean 和 javaBean字段和数据库字段不一致的情况
<select>
id: 在该命名空间中的唯一标识
parameterType: 入参类型,必须为java 基本类型或者自定义类的类全名或者别名
resultType: 结果集自动封装的返回结果类型, 必须为java 基本类型或者自定义简单JavaBean类全名或者别名
resultMap: 结果集自动封装的返回结果类型,用于有嵌套类的JavaBean 和 javaBean字段和数据库字段不一致的情况
statementType: STATEMENT, PREPARED 或 CALLABLE 的一种。 这会让 MyBatis 使用选择使用 Statement,PreparedStatement
或 CallableStatement。默认值:PREPARED。
flushCache:执行此sql是否刷新缓存,默认为false。
timeout:设置数据库访问的最大时间,超出则跑出异常
<update>
id: 在该命名空间中的唯一标识
parameterType: 入参类型,必须为java 基本类型或者自定义类的类全名或者别名
resultType: 结果集自动封装的返回结果类型, 必须为java 基本类型或者自定义简单JavaBean类全名或者别名
<sql>
id:自定义sql 片段的id
<include>
refid: 嵌入sql 片段的id
<resultMap>
自定义结果集映射类型
二 、测试
1. 映射文件片段:
2. 测试用例:
3. 实体类
注意:
1. 当数据库为oracle 等数据库不能自增地数据库时,若想在插入的时候实体类自动返回插入的id,那么可以用以下方式:
<insert>
id: 在该命名空间中的唯一标识
parameterType: 入参类型,必须为java 基本类型或者自定义类的类全名或者别名
parameterMap: 已被废弃
userGenerateKeys: 使用自动生成key,可以返回主键,但是要求数据库本身具备主键自动增长的功能,如mysql
keyProperty: 返回的主键赋值给那个属性
<delete>
id: 在该命名空间中的唯一标识
resultType: 结果集自动封装的返回结果类型, 必须为java 基本类型或者自定义简单JavaBean类全名或者别名
resultMap: 结果集自动封装的返回结果类型,用于有嵌套类的JavaBean 和 javaBean字段和数据库字段不一致的情况
<select>
id: 在该命名空间中的唯一标识
parameterType: 入参类型,必须为java 基本类型或者自定义类的类全名或者别名
resultType: 结果集自动封装的返回结果类型, 必须为java 基本类型或者自定义简单JavaBean类全名或者别名
resultMap: 结果集自动封装的返回结果类型,用于有嵌套类的JavaBean 和 javaBean字段和数据库字段不一致的情况
statementType: STATEMENT, PREPARED 或 CALLABLE 的一种。 这会让 MyBatis 使用选择使用 Statement,PreparedStatement
或 CallableStatement。默认值:PREPARED。
flushCache:执行此sql是否刷新缓存,默认为false。
timeout:设置数据库访问的最大时间,超出则跑出异常
<update>
id: 在该命名空间中的唯一标识
parameterType: 入参类型,必须为java 基本类型或者自定义类的类全名或者别名
resultType: 结果集自动封装的返回结果类型, 必须为java 基本类型或者自定义简单JavaBean类全名或者别名
<sql>
id:自定义sql 片段的id
<include>
refid: 嵌入sql 片段的id
<resultMap>
自定义结果集映射类型
二 、测试
1. 映射文件片段:
<mapper namespace="org.zgf.learn.mybatis.entity.PersonMapper"> <!--******************* 基本标签 用法 *******************--> <!-- 增:向数据库插入一条记录,并返回主键 --> <insert id="addPerson" parameterType="Person" useGeneratedKeys="true" keyProperty="id" > insert into mybatis_person(name, age, sex) values(#{name},#{age},#{sex}) </insert> <!-- 删:从数据库删除一条记录 --> <delete id="deletePersonById" parameterType="int"> delete from mybatis_person where id = #{id} </delete> <!-- 改:更新数据库的一条记录 --> <update id="updatePerson" parameterType="Person" flushCache="true"> update mybatis_person set name = #{name}, age = #{age}, sex=#{sex} where id = #{id} </update> <!-- 自定义sql 片段 --> <sql id="person_columns">id,name,age,sex</sql> <!-- 查: 从数据库中查询单个对象--> <select id="getPersonById" parameterType="int" resultType="Person" > select <include refid="person_columns"/> from mybatis_person where id = #{id} </select> <!-- 查:从数据库查询多个对象 --> <select id="getPersons" resultType="Person"> select * from mybatis_person </select>
2. 测试用例:
package org.zgf.learn.mybatis.mapper.api; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.zgf.learn.mybatis.entity.api.Person; import org.zgf.learn.mybatis.mapper.abase.BasicTest; public class Test_PersonMapper extends BasicTest{ String statement = ""; String namespace = "org.zgf.learn.mybatis.entity.PersonMapper."; /** TODO mybatis 基本标签使用 **/ @Test public void test_addPerson(){ Person person = new Person("zhangsan",20,"man"); this.statement = this.namespace + "addPerson"; session.insert(statement, person); System.out.println(person); } @Test public void test_deletePersonById(){ this.statement = this.namespace + "deletePersonById"; int delNum = session.delete(statement, 6); System.out.println("删除了:" + delNum + " 条数据"); } @Test public void test_updatePerson(){ this.statement = this.namespace + "updatePerson"; Person person = new Person("lisi",30,"women"); person.setId(1); int delNum = session.update(statement,person); System.out.println("更新了:" + delNum + "条数据"); } @Test public void test_getPersonById(){ this.statement = this.namespace + "getPersonById"; Person person = session.selectOne(statement,1); System.out.println(person); } @Test public void test_getPersons(){ this.statement = this.namespace + "getPersons"; List<Person> personList = session.selectList(statement); for (Person person : personList) { System.out.println(person); } } }
3. 实体类
package org.zgf.learn.mybatis.entity.api; public class Person { private Integer id; private String name; private Integer age; private String sex; public Person() { super(); } public Person(Integer id , String name, Integer age, String sex) { super(); this.id = id; this.name = name; this.age = age; this.sex = sex; } public Person(String name, Integer age, String sex) { super(); this.name = name; this.age = age; this.sex = sex; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]"; } }
注意:
1. 当数据库为oracle 等数据库不能自增地数据库时,若想在插入的时候实体类自动返回插入的id,那么可以用以下方式:
<insert id="addBackOrder" parameterType="BackOrder"> <!-- selectkey 在插入后将返回插入的id值 --> <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id"> SELECT LAST_INSERT_ID() AS ID </selectKey> insert into backorder(number,state,begintime,uid) values(#{number},#{state},#{begintime},#{uid}) </insert>
相关文章推荐
- 03. mybatis 动态sql && 模糊查询
- 为什么计算机只有0和1两个数字啊?
- HDU 1022 Train Problem I
- 01. mybatis 简介 && 环境搭建
- ArrayList<T>数组转换为二维数组
- ubuntu ibus pinyin输入法异常
- 编程世界,我的世界。
- ADO.NET之command录入数据(视图版)
- NYOJ-12-喷水装置(二)
- 解决cocoapods在64位iOS7系统以下的警告问题
- PadLeft函数
- Django工程读取mongodb并使用分页器
- 删除海量数据之全表删除与部分删除
- HDU ACM 1081 To The Max->最大子矩阵
- 除夕夜
- 造轮子:论Top与ROW_NUMBER读取第一页的效率问题
- SQL变量与全局变量
- Java多线程编程总结 java 1.6版
- 使用Linux操作系统命令检查服务器主板上每个内存插槽的内存大小
- Codeforces Round #342 (Div. 2) A