您的位置:首页 > 其它

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. 映射文件片段:

<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: