Mybatis的sql语句的基本查询与联表查询
parameterType:参数类型,可以省略
resultType:返回结果的类型
#{id}:类似于EL表达式。解析id的值
id="findById":一定要和接口中方法的名字对照
写在映射文件中:
namespace:表示名称空间,这里的namespace一定要和接口所在的包以及接口的名字一样
<mapper namespace="com.zjj.dao.usersDao">
<select id="findById" parameterTyp=“com.zjj.bean.users” resultType="com.zjj.bean.users">
select * from users where user_id=#{id}
</select>
</mapper>
解决字段与属性不匹配:
1.为字段起别名,别名与实体类中的属性名要求一致
例如在sql中:select user_id id,user_name name ,user_age age from users where user_id=#{id}
2.使用resultMap标签来定义实体类与字段之间的对应关系
resultMap:属性与字段的对应关系
type:表示那个实体类与表对应的关系
id:是主键是唯一的标识
column:外键列
<resultMap type="com.zjj.bean.users" id="myMap">
<id column="user_id" property="id"/>
<result column="user_name" property="name"/>
以下省略
</resultMap>
联表查询
需要被联表的类需要在主类中关联
例如老师学生,对于老师是一对多,而对于学生则是多对一,一名老师多个学生
班级实体类中
private int c_id;
private String s_name;
private int teacher_id;
private Teacher teacher; (需要关联的是老师对象)
映射文件中
<mapper namespace="com.zjj.dao.clazzdao">
<resultMap type="com.zjj.bean.clazz" id="clazzMap">
<id column="c_id" property="cid"/>
<result column="c_name" property="cname"/>
<result column="teacher_id" proterty="teacherid/>
<!-- 该类中引入的是另一方属性teacher的id
property:属性名
javaType:该属性的java类型
-->
<association property="teacher" javaType="com.zjj.bean.Teacher">
<id column="t_id" proterty="tid"/>
<result column="t_name" property="tname"/>
</association>
</resultMap>
resultMap中的clazzMap与上面reusltMap的id要一样
<select id=selectById" resultMap="clazzMap">
sql语句(省略)
</select>
多个表的联表(学生,教师,班级:其中一张表是一对多老师与多个学生)
需要用到集合类
在实体类中private List<Student>students;
映射文件中:
<collection property="students" ofType="com.zjj.bean.Student">
<id column="s_id" property="sid"/>
<result column="s_name" property="sname"/>
</collection>
在添加对象时如何将id返回(添加Id的时候一般时自动增长的,不返回的话返回的对象中是没有的)
在<insert>标签中加入 useGenerateKeys="true" keyProperty="id"
一般需要注意数据库中的表的字段名,与实体类中属性不一致时虽然在上方解决了字段与属性不匹配,
但有时候还会出错,一般时单一的属性上出错可以用:@Param注解来解决
例如在dao中@param("userName")String name,@param("userpassword")String password
具体请参考:https://www.cnblogs.com/cangqinglang/p/9279254.html(某位博主的)
注意:Mybatis中$和#的区别
以下网址着重标明了mybatis对crub的操作
https://www.cnblogs.com/xdp-gacl/p/4262895.html(参考)

浙公网安备 33010602011771号