天天看点

MyBatis映射器

MyBatis通过映射器配置可以生成对应的JavaBean返回给调用者。

映射器中可以定义select、insert、update、delete、sql、parameterMap、resultMap、cache、cache-ref等。

1、select

  • 定义Dao接口
public int countFirstName(String firstName);
           
  • 匹配xml文件
<select id="countFirstName" parameterType="string" resultType="int">
	select count(*) as total from user_t where name like concat(#{firstName},'%')
</select>
           

首先id标出这条SQL,然后parameterType定义参数类型,在定义返回类型resultType

当需要传递多个参数到一个select语句中时,可以将这些参数组合成一个POJO类,利用类将参数传递进去;如:

public List<Role> findRole(string name,string role,string note);
           

这个接口需要传递三个参数进去,虽然可以像下面这样使用@Param注解,但是有点儿繁琐:

public List<Role> findRole(@Param("name")string name,@Param("role")string role,@Param("note")string note);
           

将这三个参数变成一个POJO类:

public class RoleParam(){
private String name;
private String role;
private String note;
//setter和getter方法
}
           
<select id="findRole" parameterType="RoleParam" resultType="Role">
	select id as id,role_name as roleName,note as note from role_t 
	where role_name like concat('%',#{role},'%')
	and name like concat('%',#{name},'%')
</select>
           

2、insert

Dao接口为:

public int insertRole(Role role);
           

使用主键回填的方式,自动递增sql数据库中的自增字段;

<insert id="insertRole" parameterType="com.hhh.demo.model.Role" 
useGenerateKeys="true" keyProperty="id">
	insert into role_t(role_name,note) values (#{roleName},#{note})
</insert>
           

也可以使用selectKey处理更复杂的插入逻辑:

<insert id="insertRole" parameterType="com.hhh.demo.model.Role" 
useGenerateKeys="true" keyProperty="id">
	<selectKey keyProperty="id" resultType="int" order="BEFORE">
		select if(max(id) is null,1,max(id)+2) as newId from role_t
	</selectKey>
	insert into role_t(role_name,note) values (#{roleName},#{note})
</insert>
           

如果主键为null,设置为1,否则设置为主键最大值+2;

3、update和delete

在MyBatis中insert、update、delete操作执行完成之后,都会返回一个整数,指示执行语句后影响的记录条数。

<!--更新操作-->
<update id="updateUser" parameterType="com.hhh.demo.model.User">
	update user_t set
	user_name = #{userName},
	user_num = #{userNum},
	user_role = #{userRole}
	where id=#{id}
</update>
<!--删除操作-->
<delete id="deleteUser" parameterType="long">
	delete from user_t where id=#{id}
</delete>
           

继续阅读