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中$和#的区别

 

1.#{}是预编译处理,${}是字符串替换。
2.Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
3.Mybatis在处理${}时,就是把${}替换成变量的值。
4.使用#{}可以有效的防止SQL注入,提高系统安全性。

以下网址着重标明了mybatis对crub的操作

https://www.cnblogs.com/xdp-gacl/p/4262895.html(参考)

 

    

  

 

posted @ 2019-08-30 20:16  勇攀少年  阅读(776)  评论(0)    收藏  举报