MyBatis 的mapper.xml配置的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis 的mapper.xml配置的问题相关的知识,希望对你有一定的参考价值。
如图所示,想把mapper.xml中sql语句的where条件部分设定成某个从dto中传来的键值,不知道图中的写法是否可行,如果不可行,想问问该如何实现。
参考技术A 我们知道在Mybatis中定义Mapper信息有两种方式,一种是利用xml写一个对应的包含Mapper信息的配置文件;另一种就是定义一个Mapper接口,然后定义一些相应的操作方法,再辅以相应的操作注解。现假设我有这样一个实体类:
Java代码 收藏代码
package com.tiantian.mybatis.model;
public class User
private int id;
private String name;
private int age;
public int getId()
return id;
public void setId(int id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public int getAge()
return age;
public void setAge(int age)
this.age = age;
它对应的数据库表结构是这样的:
然后我要利用Mybatis对它做一个简单的增删改查操作,那么如果利用xml配置Mapper的方式来定义的话,我对应的UserMapper.xml文件会是这样:
Xml代码 收藏代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tiantian.mybatis.mapper.UserMapper">
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyColumn="id">
insert into t_user(name, age) values(#name, #age)
</insert>
<update id="updateUser" parameterType="User">
update t_user set name=#name, age=#age where id=#id
</update>
<select id="findById" parameterType="int" resultType="User">
select * from t_user where id=#id
</select>
<delete id="deleteUser" parameterType="int">
delete from t_user where id=#id
</delete>
</mapper>
如果使用接口加注解的方式,那么我们的UserMapper接口应该这样定义:
Java代码 收藏代码
package com.tiantian.mybatis.mapperinterface;
import org.apache.ibatis.annotations.Delete;
import or www.hbbz08.com g.apac he.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.tiantian.mybatis.model.User;
public interface UserMapper
@Insert("insert into t_user(name, age) values(#name, #age)")
public void insertUser(User user);
@Update("update t_user set name=#name, age=#age where id=#id")
public void updateUser(User user);
@Select("select * from t_user where id=#id")
public User findById(int id);
@Delete("delete from t_user where id=#id")
public void deleteUser(int id);
注意看这里我故意把UserMapper接口的namespace也就是它的包名置为与UserMapper.xml的namespace属性不一样。这主要是为了要更好的讲以下的内容。
接下来要做的就是把Mapper信息注册到Mybatis的配置中,告诉Mybatis我们定义了哪些Mapper信息。这主要是在Mybatis的配置文件中通过mappers元素来进行的。在以前版本的Mybatis中我们在Mybatis的配置文件中需要这样定义Mapper信息资源的位置。
Xml代码 收藏代码
<mappers>
<mapper resource="com/tiantian/mybatis/mapper/UserMapper1.xml"/>
<mapper url="file:///E:/UserMapper.xml"/>
</mappers>
这主要是通过mapper元素的resource和url属性来指定的,resource属性指定的是相对于跟类路径下的资源,url属性指定的是通过URL可以获取到的资源。这有一点不好的地方,当我们使用Mapper接口加注解来定义当前Mapper的操作信息时,我们还需要定义一个与它对应的Mapper.xml文件。如:
Xml代码 收藏代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tiantian.mybatis.mapperinterface.UserMapper">
</mapper>
以上是关于MyBatis 的mapper.xml配置的问题的主要内容,如果未能解决你的问题,请参考以下文章